Statistik nur wenn Treffen auch stattgefunden hat

This commit is contained in:
Borgal
2025-08-23 00:47:28 +02:00
parent 8f5141005e
commit d581d8e0e7
2 changed files with 23 additions and 18 deletions

View File

@@ -15,6 +15,7 @@ $penalty_amount = 1;
// SQL-Abfrage, um Strafen pro Benutzer seit dem letzten Reset-Datum zu zählen // SQL-Abfrage, um Strafen pro Benutzer seit dem letzten Reset-Datum zu zählen
// Strafe = anwesend (attended=1) aber Farbe nicht getragen (wore_color=0) // Strafe = anwesend (attended=1) aber Farbe nicht getragen (wore_color=0)
// NEUE BEDINGUNG: Nur Meetings einbeziehen, die als abgeschlossen markiert sind.
$sql_penalties = " $sql_penalties = "
SELECT SELECT
u.username, u.username,
@@ -22,7 +23,7 @@ $sql_penalties = "
FROM meeting_teilnehmer mt FROM meeting_teilnehmer mt
JOIN meetings m ON mt.meeting_id = m.id JOIN meetings m ON mt.meeting_id = m.id
JOIN users u ON mt.user_id = u.id JOIN users u ON mt.user_id = u.id
WHERE m.meeting_date >= ? AND mt.attended = 1 AND mt.wore_color = 0 WHERE m.meeting_date >= ? AND mt.attended = 1 AND mt.wore_color = 0 AND m.is_completed = 1
GROUP BY u.username GROUP BY u.username
ORDER BY penalty_count DESC ORDER BY penalty_count DESC
"; ";
@@ -43,16 +44,18 @@ while ($row = mysqli_fetch_assoc($result)) {
mysqli_stmt_close($stmt); mysqli_stmt_close($stmt);
// Neue Statistik: Ranking nach bezahlten Strafen // Neue Statistik: Ranking nach bezahlten Strafen
// NEUE BEDINGUNG: Auch hier nur abgeschlossene Meetings einbeziehen.
$paid_stats = []; $paid_stats = [];
$sql_paid = " $sql_paid = "
SELECT SELECT
u.username, u.username,
COUNT(mt.user_id) AS paid_count COUNT(mt.user_id) AS paid_count
FROM meeting_teilnehmer mt FROM meeting_teilnehmer mt
JOIN meetings m ON mt.meeting_id = m.id
JOIN users u ON mt.user_id = u.id JOIN users u ON mt.user_id = u.id
WHERE mt.paid = 1 WHERE mt.paid = 1 AND m.is_completed = 1
GROUP BY u.username GROUP BY u.username
ORDER BY paid_count ASC ORDER BY paid_count DESC
"; ";
$result_paid = mysqli_query($conn, $sql_paid); $result_paid = mysqli_query($conn, $sql_paid);
while ($row = mysqli_fetch_assoc($result_paid)) { while ($row = mysqli_fetch_assoc($result_paid)) {
@@ -104,16 +107,13 @@ require_once 'inc/header.php';
</div> </div>
</div> </div>
<!-- Neuer Bereich für bezahlte Rechnungen -->
<div class="card shadow mb-4"> <div class="card shadow mb-4">
<div class="card-header bg-success-subtle text-success"> <div class="card-header bg-success-subtle text-success">
<h4 class="mb-0">Rechnungen</h4> <h4 class="mb-0">Rechnungen</h4>
</div> </div>
<div class="card-body"> <div class="card-body">
<h5 class="card-title text-center">Ranking - Rechnung übernommen</h5> <h5 class="card-title text-center">Ranking - Rechnung übernommen</h5>
<p class="text-center text-muted mt-2 mb-3">
Der mit der geringsten Anzahl ist das nächste Mal dran.
</p>
<div style="height: 40vh;"> <div style="height: 40vh;">
<canvas id="paidChart"></canvas> <canvas id="paidChart"></canvas>
</div> </div>
@@ -151,7 +151,7 @@ require_once 'inc/header.php';
}, },
title: { title: {
display: true, display: true,
text: 'Anzahl der bezahlten Essen pro Benutzer' text: 'Anzahl der bezahlten Rechnungen'
} }
}, },
scales: { scales: {

View File

@@ -11,6 +11,7 @@ $sql_colors = "
COUNT(m.id) AS meeting_count COUNT(m.id) AS meeting_count
FROM meetings m FROM meetings m
JOIN colors c ON m.color_id = c.id JOIN colors c ON m.color_id = c.id
WHERE m.is_completed = 1
GROUP BY c.name, c.hex_code GROUP BY c.name, c.hex_code
ORDER BY meeting_count DESC ORDER BY meeting_count DESC
"; ";
@@ -27,7 +28,8 @@ $sql_participation = "
COUNT(mt.user_id) AS total_attendance COUNT(mt.user_id) AS total_attendance
FROM meeting_teilnehmer mt FROM meeting_teilnehmer mt
JOIN users u ON mt.user_id = u.id JOIN users u ON mt.user_id = u.id
WHERE mt.attended = 1 JOIN meetings m ON mt.meeting_id = m.id
WHERE mt.attended = 1 AND m.is_completed = 1
GROUP BY u.username GROUP BY u.username
ORDER BY total_attendance DESC ORDER BY total_attendance DESC
"; ";
@@ -41,10 +43,11 @@ $avg_attendance = 0;
$sql_avg_attendance = " $sql_avg_attendance = "
SELECT AVG(attended_count) AS avg_attended SELECT AVG(attended_count) AS avg_attended
FROM ( FROM (
SELECT COUNT(user_id) AS attended_count SELECT COUNT(mt.user_id) AS attended_count
FROM meeting_teilnehmer FROM meeting_teilnehmer mt
WHERE attended = 1 JOIN meetings m ON mt.meeting_id = m.id
GROUP BY meeting_id WHERE mt.attended = 1 AND m.is_completed = 1
GROUP BY mt.meeting_id
) AS subquery"; ) AS subquery";
$result_avg = mysqli_query($conn, $sql_avg_attendance); $result_avg = mysqli_query($conn, $sql_avg_attendance);
if ($row = mysqli_fetch_assoc($result_avg)) { if ($row = mysqli_fetch_assoc($result_avg)) {
@@ -56,10 +59,11 @@ $avg_wore_color = 0;
$sql_avg_wore_color = " $sql_avg_wore_color = "
SELECT AVG(wore_color_count) AS avg_wore_color SELECT AVG(wore_color_count) AS avg_wore_color
FROM ( FROM (
SELECT COUNT(user_id) AS wore_color_count SELECT COUNT(mt.user_id) AS wore_color_count
FROM meeting_teilnehmer FROM meeting_teilnehmer mt
WHERE wore_color = 1 JOIN meetings m ON mt.meeting_id = m.id
GROUP BY meeting_id WHERE mt.wore_color = 1 AND m.is_completed = 1
GROUP BY mt.meeting_id
) AS subquery"; ) AS subquery";
$result_avg_wore = mysqli_query($conn, $sql_avg_wore_color); $result_avg_wore = mysqli_query($conn, $sql_avg_wore_color);
if ($row = mysqli_fetch_assoc($result_avg_wore)) { if ($row = mysqli_fetch_assoc($result_avg_wore)) {
@@ -74,7 +78,8 @@ $sql_wore_color = "
COUNT(mt.user_id) AS wore_color_count COUNT(mt.user_id) AS wore_color_count
FROM meeting_teilnehmer mt FROM meeting_teilnehmer mt
JOIN users u ON mt.user_id = u.id JOIN users u ON mt.user_id = u.id
WHERE mt.wore_color = 1 JOIN meetings m ON mt.meeting_id = m.id
WHERE mt.wore_color = 1 AND m.is_completed = 1
GROUP BY u.username GROUP BY u.username
ORDER BY wore_color_count DESC ORDER BY wore_color_count DESC
"; ";