- stricheintragen.php und einzahlung.php erhielten bisher gar keine Zugriffskontrolle (nur CSRF), jetzt Rollen-/Legacy-Fallback wie in kaffeeliste.php; Sammeleintraege spiegeln transaktional ins Ledger (ledger_mirror_legacy_payment neu ergaenzt). - letzteneintraege.php war rein ueber Legacy-Admin gesperrt und haette neue SaaS-Mandanten ausgeschlossen; Loeschen markiert den gespiegelten Ledger-Eintrag jetzt per voided_at statt ihn zu entfernen (ledger_void_entry_by_legacy_id). - check-m4-ledger-migration.php an das Storno-Modell angepasst: verwaiste Ledger-Zeilen sind nur noch ein Fehler, wenn sie nicht voided sind. - Nebenbei: PHP-Warning bei Sammelerfassung behoben, toten Code entfernt, veraltete README (verwies auf nicht existierende saas-app/-Struktur) korrigiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
194 lines
5.0 KiB
PHP
194 lines
5.0 KiB
PHP
<?php
|
|
|
|
include "functions.php";
|
|
require_once __DIR__ . "/app/ledger.php";
|
|
app_require_csrf();
|
|
include "header.php";
|
|
|
|
include "headerline.php";
|
|
include "nav.php";
|
|
|
|
|
|
|
|
?>
|
|
|
|
<!-- Banner -->
|
|
<section id="banner">
|
|
<div class="content">
|
|
|
|
<?php
|
|
|
|
$pdo = app_db_pdo();
|
|
$saasUser = saas_current_user($pdo);
|
|
$tenantId = 0;
|
|
$hasAccess = false;
|
|
|
|
if ($saasUser !== null && saas_user_has_role(['owner', 'admin', 'treasurer'], $saasUser)) {
|
|
$tenantId = (int)$saasUser['tenant_id'];
|
|
$hasAccess = true;
|
|
}
|
|
|
|
if (!$hasAccess && $saasUser === null && checkKaffeelisteAdmin($conn, $mailadress)) {
|
|
$tenant = ledger_fetch_default_tenant($pdo);
|
|
if ($tenant !== null) {
|
|
$tenantId = (int)$tenant['id'];
|
|
$hasAccess = true;
|
|
}
|
|
}
|
|
|
|
if (!$hasAccess) {
|
|
echo "<h2>Kein Zugriff</h2>";
|
|
include "footer.php";
|
|
exit;
|
|
}
|
|
|
|
// Verarbeitung des Formulars, wenn es gesendet wurde
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST" ) {
|
|
$datum = date("Y-m-d H:i:s"); // Das aktuelle Datum verwenden
|
|
$eingetragen = 0;
|
|
$fehlgeschlagen = false;
|
|
|
|
try {
|
|
$pdo->beginTransaction();
|
|
$insert = $pdo->prepare(
|
|
"INSERT INTO kl_Einzahlungen (MitarbeiterID, Betrag, Datum) VALUES (?, ?, ?)"
|
|
);
|
|
|
|
foreach ($_POST["anzahlBetrag"] ?? [] as $mitarbeiterID => $anzahlBetrag) {
|
|
$mitarbeiterID = (int)$mitarbeiterID;
|
|
$anzahlBetrag = floatval($anzahlBetrag);
|
|
if ($mitarbeiterID <= 0 || $anzahlBetrag == 0.0) {
|
|
continue;
|
|
}
|
|
|
|
$insert->execute([$mitarbeiterID, $anzahlBetrag, $datum]);
|
|
$legacyPaymentId = (int)$pdo->lastInsertId();
|
|
ledger_mirror_legacy_payment($pdo, $tenantId, $legacyPaymentId);
|
|
$eingetragen++;
|
|
}
|
|
|
|
$pdo->commit();
|
|
} catch (Throwable $e) {
|
|
if ($pdo->inTransaction()) {
|
|
$pdo->rollBack();
|
|
}
|
|
$fehlgeschlagen = true;
|
|
}
|
|
|
|
if ($fehlgeschlagen) {
|
|
echo "Die Einzahlungen konnten nicht gespeichert werden.";
|
|
} else {
|
|
echo $eingetragen . " Einträge erfolgreich hinzugefügt.";
|
|
}
|
|
|
|
// Mitarbeiter aus der Datenbank abrufen und nach Namen sortieren
|
|
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter WHERE aktiv = 1 ORDER BY Name";
|
|
}elseif($_SERVER["REQUEST_METHOD"] == "GET" AND isset($_GET["action"])){
|
|
|
|
if($_GET["action"] == "vorderseite"){
|
|
|
|
$sqlMitglieder = "SELECT M.MitarbeiterID, M.Name, M.Email
|
|
FROM kl_Mitarbeiter M
|
|
JOIN kl_Kaffeeverbrauch V ON M.MitarbeiterID = V.MitarbeiterID
|
|
WHERE V.Datum >= DATEADD(DAY, -100, GETDATE()) AND M.aktiv = 1
|
|
GROUP BY M.MitarbeiterID, M.Name, M.Email
|
|
HAVING SUM(V.AnzahlStriche) >= 10
|
|
ORDER BY Name;";
|
|
|
|
}elseif( $_GET["action"] == "rueckseite"){
|
|
|
|
$sqlMitglieder = "SELECT M.MitarbeiterID, M.Name, M.Email
|
|
FROM kl_Mitarbeiter M
|
|
LEFT JOIN kl_Kaffeeverbrauch V ON M.MitarbeiterID = V.MitarbeiterID AND V.Datum >= DATEADD(DAY, -100, GETDATE())
|
|
WHERE M.aktiv = 1
|
|
GROUP BY M.MitarbeiterID, M.Name, M.Email
|
|
HAVING COALESCE(SUM(V.AnzahlStriche), 0) < 10
|
|
ORDER BY M.Name;";
|
|
}elseif($_GET["action"] == "alle"){
|
|
// Mitarbeiter aus der Datenbank abrufen und nach Namen sortieren
|
|
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter WHERE aktiv = 1 ORDER BY Name";
|
|
}
|
|
|
|
}else{
|
|
// Mitarbeiter aus der Datenbank abrufen und nach Namen sortieren
|
|
$sqlMitarbeiter = "SELECT MitarbeiterID, Name FROM kl_Mitarbeiter WHERE aktiv = 1 ORDER BY Name";
|
|
|
|
|
|
}
|
|
|
|
$stmtMitarbeiter = sqlsrv_query($conn, $sqlMitarbeiter);
|
|
|
|
// Schließe die Verbindung zur Datenbank
|
|
#sqlsrv_close($conn);
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Kaffeeliste - Einzahlung</title>
|
|
</head>
|
|
<body>
|
|
|
|
<h2>Einzahlungen für alle Mitarbeiter</h2>
|
|
<ul class="actions">
|
|
<li>
|
|
<form action="einzahlung.php?aktion=vorderseite" method="get">
|
|
<button type="submit">Vorderseite</button>
|
|
</form>
|
|
</li>
|
|
<li>
|
|
<form action="einzahlung.php?aktion=rueckseite" method="get">
|
|
<button type="submit">Rückseite</button>
|
|
</form>
|
|
</li>
|
|
<li>
|
|
<form action="einzahlung.php?aktion=alle" method="get">
|
|
<button type="submit">Alle</button>
|
|
</form>
|
|
</li>
|
|
<li>
|
|
<form action="letzteneintraege.php" method="get">
|
|
<button type="submit">Letzten Einträge</button>
|
|
</form>
|
|
</li>
|
|
<li>
|
|
<form action="csvupload.php" method="get">
|
|
<button type="submit">CSV Upload</button>
|
|
</form>
|
|
</li>
|
|
</ul>
|
|
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
|
|
<?php echo app_csrf_field(); ?>
|
|
<?php
|
|
|
|
echo "<table>";
|
|
echo " <tr>
|
|
<th>Mitarbeiter</th>
|
|
<th>Betrag</th>
|
|
</tr>";
|
|
// Iteriere über alle Mitarbeiter
|
|
while ($row = sqlsrv_fetch_array($stmtMitarbeiter, SQLSRV_FETCH_ASSOC)) {
|
|
$mitarbeiterID = $row["MitarbeiterID"];
|
|
$mitarbeiterName = $row["Name"];
|
|
echo "<tr>";
|
|
// Formularfeld für die Anzahl der Striche
|
|
echo "<td><label for='anzahlBetrag[$mitarbeiterID]'>$mitarbeiterName </label></td>";
|
|
echo "<td><input type='number' name='anzahlBetrag[$mitarbeiterID]' step='0.01'></td>";
|
|
echo "</tr>";
|
|
}
|
|
echo "</table>";
|
|
?>
|
|
|
|
<button type="submit" name="submit" value="Speichern" >Eintragen</button>
|
|
</form>
|
|
|
|
</body>
|
|
</html>
|
|
|
|
</div>
|
|
</section>
|
|
|
|
<?php include "footer.php"; ?>
|