Kein Zugriff"; include "footer.php"; exit; } /** * Liefert die Mitarbeiter/Teilnehmerliste fuer die Vorder-/Rueckseiten- oder * Alle-Auswahl. Fuer den Default-Mandanten bleibt die Fensterlogik exakt wie * im Legacy-Bestand (Anker ist das juengste Datum in kl_Kaffeeverbrauch); * andere Mandanten haben keine Legacy-Historie und nutzen die * Ledger-native Fensterpruefung mit dem konfigurierten Listenfenster. * * @return list */ function stricheintragen_fetch_participants(PDO $pdo, int $tenantId, string $action): array { $isDefault = ledger_is_default_tenant($pdo, $tenantId); if ($isDefault && $action === 'vorderseite') { $stmt = $pdo->query( "SELECT M.MitarbeiterID FROM kl_Mitarbeiter M JOIN kl_Kaffeeverbrauch V ON M.MitarbeiterID = V.MitarbeiterID WHERE V.Datum >= DATE_SUB((SELECT MAX(Datum) FROM kl_Kaffeeverbrauch WHERE Datum < CURDATE()), INTERVAL 100 DAY) AND M.aktiv = 1 GROUP BY M.MitarbeiterID HAVING SUM(V.AnzahlStriche) >= 10" ); $legacyIds = array_map('intval', $stmt->fetchAll(PDO::FETCH_COLUMN)); return ledger_fetch_participant_summaries($pdo, $tenantId, ['legacy_mitarbeiter_ids' => $legacyIds]); } if ($isDefault && $action === 'rueckseite') { $stmt = $pdo->query( "SELECT M.MitarbeiterID FROM kl_Mitarbeiter M LEFT JOIN kl_Kaffeeverbrauch V ON M.MitarbeiterID = V.MitarbeiterID AND V.Datum >= DATE_SUB((SELECT MAX(Datum) FROM kl_Kaffeeverbrauch), INTERVAL 100 DAY) WHERE M.aktiv = 1 GROUP BY M.MitarbeiterID HAVING COALESCE(SUM(V.AnzahlStriche), 0) < 10" ); $legacyIds = array_map('intval', $stmt->fetchAll(PDO::FETCH_COLUMN)); return ledger_fetch_participant_summaries($pdo, $tenantId, ['legacy_mitarbeiter_ids' => $legacyIds]); } if (!$isDefault && ($action === 'vorderseite' || $action === 'rueckseite')) { $settings = saas_fetch_tenant_settings($pdo, $tenantId); $windowDays = $settings['sheet_window_days'] ?? 100; return ledger_fetch_participants_by_window_marks($pdo, $tenantId, $windowDays, $action === 'vorderseite'); } return ledger_fetch_participant_summaries($pdo, $tenantId, ['active_only' => true]); } $eingetragen = 0; $fehlgeschlagen = false; $hatGespeichert = false; // Verarbeitung des Formulars, wenn es gesendet wurde if ($_SERVER["REQUEST_METHOD"] == "POST") { $hatGespeichert = true; $kostenproStrich = floatval($_POST["kostenproStrich"] ?? 0); $unitPriceCents = (int)round($kostenproStrich * 100); $datum = date("Y-m-d H:i:s"); // Legacy-Verknuepfung je Teilnehmer vorab laden, damit pro Zeile // entschieden werden kann, ob (Default-Mandant) zusaetzlich in // kl_Kaffeeverbrauch geschrieben oder (jeder andere Mandant) direkt // ins Ledger gebucht wird. $legacyMap = []; $stmt = $pdo->prepare('SELECT id, legacy_mitarbeiter_id FROM participants WHERE tenant_id = ?'); $stmt->execute([$tenantId]); foreach ($stmt->fetchAll() as $row) { $legacyMap[(int)$row['id']] = $row['legacy_mitarbeiter_id'] !== null ? (int)$row['legacy_mitarbeiter_id'] : null; } try { $pdo->beginTransaction(); $insertLegacy = $pdo->prepare( "INSERT INTO kl_Kaffeeverbrauch (MitarbeiterID, AnzahlStriche, Kosten, KostenproStrich, Datum) VALUES (?, ?, ?, ?, ?)" ); foreach ($_POST["anzahlStriche"] ?? [] as $participantId => $anzahlStriche) { $participantId = (int)$participantId; $anzahlStriche = (int)$anzahlStriche; if ($participantId <= 0 || $anzahlStriche === 0 || !array_key_exists($participantId, $legacyMap)) { continue; } $legacyMitarbeiterId = $legacyMap[$participantId]; if ($legacyMitarbeiterId !== null) { $kosten = $anzahlStriche * $kostenproStrich; $insertLegacy->execute([$legacyMitarbeiterId, $anzahlStriche, $kosten, $kostenproStrich, $datum]); $legacyConsumptionId = (int)$pdo->lastInsertId(); ledger_mirror_legacy_consumption($pdo, $tenantId, $legacyConsumptionId); } else { ledger_record_consumption($pdo, $tenantId, $participantId, $anzahlStriche, $unitPriceCents, 'manual_bulk'); } $eingetragen++; } $pdo->commit(); } catch (Throwable $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } $fehlgeschlagen = true; } $action = 'alle'; } else { $action = (string)($_GET['action'] ?? 'alle'); } $mitarbeiter = stricheintragen_fetch_participants($pdo, $tenantId, $action); $settings = saas_fetch_tenant_settings($pdo, $tenantId); $kostenproStrichAnzeige = number_format(($settings['mark_price_cents'] ?? 20) / 100, 2, '.', ''); ?>

Anzahl der Striche für alle Mitarbeiter

Die Einträge konnten nicht gespeichert werden.

Einträge erfolgreich hinzugefügt.

"> Kosten pro Strich:
"; echo ""; echo " "; foreach ($mitarbeiter as $teilnehmer) { $participantId = $teilnehmer['participant_id']; $name = saas_html($teilnehmer['display_name']); echo ""; echo ""; echo ""; echo ""; } echo "
Mitarbeiter Anzahl Striche
"; ?>