M5 Kaffeeliste read-only auf Ledger umstellen

- kaffeeliste.php aus ledger_fetch_participant_summaries lesen lassen
- Legacy-Teilnehmerlinks ueber legacy_mitarbeiter_id erhalten
- Sidebar-Zugriff fuer Legacy-Admin und SaaS-Rollen trennen
- Smoke-Test um konkrete Ledger-Werte und Inaktiv-Ausschluss erweitern
- M5-App-Kern-Doku ergaenzen
This commit is contained in:
2026-07-14 21:32:59 +02:00
parent 1aa4a4989e
commit f9544f24fd
8 changed files with 216 additions and 137 deletions
+108 -128
View File
@@ -1,148 +1,128 @@
<?php
include "functions.php";
require_once __DIR__ . "/app/ledger.php";
$pdo = app_db_pdo();
$saasUser = saas_current_user($pdo);
$tenantId = 0;
$hasAccess = false;
function kaffeeliste_default_tenant(PDO $pdo): ?array
{
$tenantSlug = getenv('M4_DEFAULT_TENANT_SLUG');
if ($tenantSlug === false || trim($tenantSlug) === '') {
$tenantSlug = getenv('M3_DEFAULT_TENANT_SLUG');
}
$tenantSlug = $tenantSlug !== false && trim($tenantSlug) !== ''
? trim($tenantSlug)
: 'default';
$stmt = $pdo->prepare('SELECT id, name, slug FROM tenants WHERE slug = ? LIMIT 1');
$stmt->execute([$tenantSlug]);
$tenant = $stmt->fetch();
return $tenant !== false ? $tenant : null;
}
function kaffeeliste_money(int $cents): string
{
return saas_format_money_cents($cents) . ' €';
}
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 = kaffeeliste_default_tenant($pdo);
if ($tenant !== null) {
$tenantId = (int)$tenant['id'];
$hasAccess = true;
}
}
$participants = $hasAccess
? ledger_fetch_participant_summaries($pdo, $tenantId, ['active_only' => true])
: [];
include "header.php";
include "headerline.php";
include "nav.php";
?>
<!-- Banner -->
<section id="banner">
<div class="content">
<section id="banner">
<div class="content">
<?php
if(checkKaffeelisteAdmin($conn, $mailadress)){
if ($hasAccess) {
?>
<h2>Aktive Mitarbeiter mit Gesamtstand</h2>
<br>
<ul class="actions">
<li>
<form action="exportKaffeeliste.php" method="get">
<button type="submit">Kaffeeliste exportieren</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>
// Funktion zum Berechnen der Gesamtausgabe und Gesamtstriche pro Mitarbeiter
function berechneGesamtausgabe($mitarbeiterID, $conn) {
// Gesamtausgabe für Kaffeeverbrauch pro Mitarbeiter
$sqlAusgabe = "SELECT SUM(Kosten) AS Gesamtausgabe FROM kl_Kaffeeverbrauch WHERE MitarbeiterID = ?";
$stmtAusgabe = sqlsrv_query($conn, $sqlAusgabe, array($mitarbeiterID));
$rowAusgabe = sqlsrv_fetch_array($stmtAusgabe, SQLSRV_FETCH_ASSOC);
$gesamtausgabe = $rowAusgabe['Gesamtausgabe'] ?? 0;
<br>
<table border="1" class="table table-striped table-bordered">
<tr>
<th>Name</th>
<th>E-Mail</th>
<th>Aktueller Stand</th>
<th>Gesamtausgabe (€)</th>
<th>Gesamtstriche</th>
<th>Gesamteinzahlungen</th>
</tr>
<?php
foreach ($participants as $participant) {
$legacyId = $participant['legacy_mitarbeiter_id'];
$name = saas_html($participant['display_name']);
$email = saas_html((string)($participant['email'] ?? ''));
$balance = kaffeeliste_money((int)$participant['balance_cents']);
$totalCosts = kaffeeliste_money((int)$participant['total_costs_cents']);
$totalMarks = number_format((int)$participant['total_marks'], 0, ',', '.');
$totalPayments = kaffeeliste_money((int)$participant['total_payments_cents']);
return $gesamtausgabe;
}
// Funktion zum Berechnen der Gesamtstriche pro Mitarbeiter
function berechneGesamtstriche($mitarbeiterID, $conn) {
// Gesamtstriche pro Mitarbeiter
$sqlStriche = "SELECT SUM(AnzahlStriche) AS Gesamtstriche FROM kl_Kaffeeverbrauch WHERE MitarbeiterID = ?";
$stmtStriche = sqlsrv_query($conn, $sqlStriche, array($mitarbeiterID));
$rowStriche = sqlsrv_fetch_array($stmtStriche, SQLSRV_FETCH_ASSOC);
$gesamtstriche = $rowStriche['Gesamtstriche'] ?? 0;
return $gesamtstriche;
}
// Funktion zum Berechnen der Gesamteinzahlungen pro Mitarbeiter
function berechneGesamteinzahlungen($mitarbeiterID, $conn) {
// Gesamteinzahlungen pro Mitarbeiter
$sqlEinzahlungen = "SELECT SUM(Betrag) AS Gesamteinzahlungen FROM kl_Einzahlungen WHERE MitarbeiterID = ?";
$stmtEinzahlungen = sqlsrv_query($conn, $sqlEinzahlungen, array($mitarbeiterID));
$rowEinzahlungen = sqlsrv_fetch_array($stmtEinzahlungen, SQLSRV_FETCH_ASSOC);
$gesamteinzahlungen = $rowEinzahlungen['Gesamteinzahlungen'] ?? 0;
return $gesamteinzahlungen;
}
// Mitglieder aus der Datenbank abrufen
$sqlMitglieder = "SELECT MitarbeiterID, Name, Email FROM kl_Mitarbeiter WHERE aktiv = 1 ORDER BY Name";
$stmtMitglieder = sqlsrv_query($conn, $sqlMitglieder);
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kaffeeliste - Aktive Mitarbeiter mit Gesamtstand</title>
</head>
<body>
<h2>Aktive Mitarbeiter mit Gesamtstand</h2>
<br>
<ul class="actions">
<li>
<form action="exportKaffeeliste.php" method="get">
<button type="submit">Kaffeeliste exportieren</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>
<br>
<table border="1" class="table table-striped table-bordered">
<tr>
<th>Name</th>
<th>E-Mail</th>
<th>Aktueller Stand</th>
<th>Gesamtausgabe (€)</th>
<th>Gesamtstriche</th>
<th>Gesamteinzahlungen</th>
</tr>
<?php
while ($row = sqlsrv_fetch_array($stmtMitglieder, SQLSRV_FETCH_ASSOC)) {
$mitarbeiterID = $row['MitarbeiterID'];
$name = $row['Name'];
$email = $row['Email'];
$gesamtausgabe = berechneGesamtausgabe($mitarbeiterID, $conn);
$gesamtstriche = berechneGesamtstriche($mitarbeiterID, $conn);
$gesamteinzahlungen = berechneGesamteinzahlungen($mitarbeiterID, $conn);
$differenztemp = $gesamteinzahlungen - $gesamtausgabe;
$differenz = number_format($differenztemp, 2, ',', '.');
$gesamtausgabe = number_format($gesamtausgabe, 2, ',', '.');
$gesamteinzahlungen = number_format($gesamteinzahlungen, 2, ',', '.');
$gesamtstriche = number_format($gesamtstriche, 0, ',', '.');
echo "<tr>";
echo "<td><a href=teilnehmerauswertung.php?user_id=$mitarbeiterID>{$name}</a></td>";
echo "<td>{$email}</td>";
echo "<td>{$differenz} €</td>";
echo "<td>{$gesamtausgabe} €</td>";
echo "<td>{$gesamtstriche}</td>";
echo "<td>{$gesamteinzahlungen} €</td>";
echo "</tr>";
echo "<tr>";
if ($legacyId !== null) {
echo "<td><a href=\"teilnehmerauswertung.php?user_id=" . (int)$legacyId . "\">{$name}</a></td>";
} else {
echo "<td>{$name}</td>";
}
?>
</table>
<br><br>
<form action="mailversenden.php" method="get">
<button type="submit">Info-Mail versenden</button>
</form>
echo "<td>{$email}</td>";
echo "<td>{$balance}</td>";
echo "<td>{$totalCosts}</td>";
echo "<td>{$totalMarks}</td>";
echo "<td>{$totalPayments}</td>";
echo "</tr>";
}
?>
</table>
<br><br>
<form action="mailversenden.php" method="get">
<button type="submit">Info-Mail versenden</button>
</form>
<?php
}else{
} else {
echo "<h2>Kein Zugriff</h2>";
}
?>
</div>
</div>
</section>
<?php include "footer.php"; ?>