From 1b9ba22bb53e263cb3af9b083723f065240d8eb7 Mon Sep 17 00:00:00 2001 From: Borgal Date: Sun, 16 Nov 2025 21:13:04 +0100 Subject: [PATCH] 1.3.0 --- backups/DoMiLi_Backup_2025-10.pdf | Bin 0 -> 34650 bytes export.php | 277 +++++++++++++++++++ inc/menu.php | 30 ++- index.php | 91 +++---- info.php | 123 +++++++++ kasse.php | 424 ++++++++++++++++++++++++------ participant.php | 36 ++- profil.php | 113 ++++++-- users.php | 67 ++++- verschiebung.php | 119 +++++++-- zahler.php | 58 ++-- 11 files changed, 1104 insertions(+), 234 deletions(-) create mode 100755 backups/DoMiLi_Backup_2025-10.pdf create mode 100755 export.php create mode 100755 info.php diff --git a/backups/DoMiLi_Backup_2025-10.pdf b/backups/DoMiLi_Backup_2025-10.pdf new file mode 100755 index 0000000000000000000000000000000000000000..168d89152d83b438dcf2d15a67f4a5e994dd8ca8 GIT binary patch literal 34650 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'Y-m-d'); +$stmt = mysqli_prepare($conn, " + SELECT m.id AS meeting_id, m.meeting_date, + mt.user_id, mt.wore_color, mt.paid + FROM meetings m + LEFT JOIN meeting_teilnehmer mt ON m.id = mt.meeting_id AND mt.attended = 1 + WHERE m.meeting_date <= ? AND m.is_completed = 1 + ORDER BY m.meeting_date +"); +mysqli_stmt_bind_param($stmt, 's', $bisDatum); +mysqli_stmt_execute($stmt); +$result = mysqli_stmt_get_result($stmt); + +$alleMeetingsMitTeilnehmern = []; +while ($row = mysqli_fetch_assoc($result)) { + $alleMeetingsMitTeilnehmern[] = $row; +} +mysqli_stmt_close($stmt); + +// === 5. Meetings des Berichtsmonats mit Farben === +$stmtMeta = mysqli_prepare($conn, " + SELECT id, meeting_date, reason, color_id + FROM meetings + WHERE meeting_date >= ? AND meeting_date <= ? AND is_completed = 1 + ORDER BY meeting_date +"); +$startDate = $berichtsMonatBeginn->format('Y-m-d'); +$endDate = $berichtsMonatEnde->format('Y-m-d'); +mysqli_stmt_bind_param($stmtMeta, 'ss', $startDate, $endDate); +mysqli_stmt_execute($stmtMeta); +$resultMeta = mysqli_stmt_get_result($stmtMeta); + +$berichtsMeetingsMeta = []; +while ($row = mysqli_fetch_assoc($resultMeta)) { + $color_id = (int)$row['color_id']; + $colorStmt = mysqli_prepare($conn, "SELECT name FROM colors WHERE id = ?"); + mysqli_stmt_bind_param($colorStmt, 'i', $color_id); + mysqli_stmt_execute($colorStmt); + $colorRes = mysqli_stmt_get_result($colorStmt); + $colorName = '–'; + if ($cRow = mysqli_fetch_assoc($colorRes)) { + $colorName = $cRow['name']; + } + mysqli_stmt_close($colorStmt); + + $berichtsMeetingsMeta[] = [ + 'id' => $row['id'], + 'meeting_date' => $row['meeting_date'], + 'reason' => $row['reason'], + 'color_name' => $colorName + ]; +} +mysqli_stmt_close($stmtMeta); + +// === 6. Für jedes Meeting: alle Benutzer mit allen Werten === +$gruppiert = []; + +foreach ($berichtsMeetingsMeta as $meta) { + $mid = $meta['id']; + $meetingDatum = new DateTime($meta['meeting_date']); + + $gruppiert[$mid] = [ + 'datum' => $meta['meeting_date'], + 'reason' => $meta['reason'], + 'color_name' => $meta['color_name'], + 'teilnehmer' => [] + ]; + + foreach ($userIds as $uid) { + $username = $alleBenutzer[$uid]; + + $teilgenommen = false; + $wore_color = null; + $paid_this = false; + + foreach ($alleMeetingsMitTeilnehmern as $mt) { + if ($mt['meeting_id'] == $mid && $mt['user_id'] == $uid) { + $teilgenommen = true; + $wore_color = !empty($mt['wore_color']); + $paid_this = !empty($mt['paid']); + break; + } + } + + // Kumulierte Werte bis zu diesem Meeting + $strafenGesamt = 0; + $offeneStrafen = 0; + $teilnahmenGesamt = 0; + $rechnungenGesamt = 0; + + foreach ($alleMeetingsMitTeilnehmern as $mt) { + if ($mt['user_id'] != $uid || is_null($mt['user_id'])) continue; + $mDatum = new DateTime($mt['meeting_date']); + if ($mDatum > $meetingDatum) continue; + + $teilnahmenGesamt++; + if (!$mt['wore_color']) { + $strafenGesamt++; + if ($mt['meeting_date'] >= $last_closing) { + $offeneStrafen++; + } + } + if (!empty($mt['paid'])) { + $rechnungenGesamt++; + } + } + + $userNameAnzeige = htmlspecialchars($username); + if ($paid_this) { + $userNameAnzeige .= ' '; + } + + if (!$teilgenommen) { + $farbeSymbol = '–'; + } else { + $farbeSymbol = $wore_color ? '✓' : '✗'; + } + + $gruppiert[$mid]['teilnehmer'][] = [ + 'username' => $userNameAnzeige, + 'farbe_symbol' => $farbeSymbol, + 'teilgenommen' => $teilgenommen, + 'offene_strafen' => $offeneStrafen, + 'strafen_gesamt' => $strafenGesamt, + 'teilnahmen_gesamt' => $teilnahmenGesamt, + 'rechnungen_gesamt' => $rechnungenGesamt + ]; + } +} + +// === 7. Gesamt offene Strafen === +$gesamtOffen = 0; +foreach ($alleMeetingsMitTeilnehmern as $mt) { + if (!is_null($mt['user_id']) && !$mt['wore_color'] && $mt['meeting_date'] >= $last_closing) { + $gesamtOffen++; + } +} + +// === 8. PDF-Pfad === +@mkdir(__DIR__ . '/backups', 0755, true); +$baseName = 'DoMiLi_Backup_' . $berichtsMonatBeginn->format('Y-m'); +$counter = 0; +$outputPath = __DIR__ . '/backups/' . $baseName . '.pdf'; +while (file_exists($outputPath)) { + $counter++; + $outputPath = __DIR__ . '/backups/' . $baseName . '_' . $counter . '.pdf'; +} + +// === 9. HTML mit allen Anforderungen === +$html = ' + + + + + + + + +

DoMiLi – Monatliches Backup

+

Zeitraum: ' . $berichtsMonatBeginn->format('F Y') . '

+
Strafkasse: ' . $gesamtOffen . ' €
'; + +if (empty($berichtsMeetingsMeta)) { + $html .= '

Keine abgeschlossenen Meetings im Berichtsmonat.

'; +} else { + $meetingCount = 0; + foreach ($gruppiert as $meeting) { + if ($meetingCount > 0 && $meetingCount % 3 === 0) { + $html .= '
'; + } + $meetingCount++; + + $meetingDatum = new DateTime($meeting['datum']); + $html .= '

' . $meetingDatum->format('d.m.Y') . ' – ' . htmlspecialchars($meeting['reason']) . ' (' . htmlspecialchars($meeting['color_name']) . ')

'; + $html .= ' + + + + + + + + + + + '; + + foreach ($meeting['teilnehmer'] as $t) { + if ($t['farbe_symbol'] === '✓') { + $farbeHtml = ''; + } elseif ($t['farbe_symbol'] === '✗') { + $farbeHtml = ''; + } else { + $farbeHtml = $t['farbe_symbol']; + } + + $html .= ' + + + + + + + '; + } + + $html .= '
Benutzer*Farbe getragenoffene Strafen (in €)Strafen gesamtTeilnahmen gesamtRechnung gesamt
' . $t['username'] . '' . $farbeHtml . '' . $t['offene_strafen'] . '' . $t['strafen_gesamt'] . '' . $t['teilnahmen_gesamt'] . '' . $t['rechnungen_gesamt'] . '
'; + } +} + +$html .= ' +
+

Erstellt am: ' . date('d.m.Y') . '

+

* = "€" hat Restaurant-Rechnung bezahlt

+
+ + +'; + +// === 10. PDF erzeugen === +$options = new Options(); +$options->set('defaultFont', 'DejaVu Sans'); +$dompdf = new Dompdf($options); +$dompdf->loadHtml($html); +$dompdf->setPaper('A4', 'portrait'); +$dompdf->render(); + +file_put_contents($outputPath, $dompdf->output()); +echo "✅ PDF erfolgreich gespeichert: " . $outputPath . "\n"; diff --git a/inc/menu.php b/inc/menu.php index 34e692b..20fef10 100755 --- a/inc/menu.php +++ b/inc/menu.php @@ -12,34 +12,42 @@