Jede Summenangabe in rep-month.php und rep-person.php führt jetzt per Klick zum Dashboard mit exakt den Filtern (Jahr, Monat, Kategorie(n), Zahler), die in die jeweilige Summe eingeflossen sind. Außerdem Fix für rep-person.php: ohne ?categories[]-Parameter wurde $selectedCategories nie initialisiert, was zu einem Fatal Error führte - jetzt werden standardmäßig alle Kategorien vorausgewählt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
159 lines
4.5 KiB
PHP
159 lines
4.5 KiB
PHP
<?php
|
|
require 'config.php';
|
|
if (!isset($_SESSION['user_id'])) {
|
|
header('Location: index.php');
|
|
exit;
|
|
}
|
|
|
|
// Prüfen, ob die user_id im Admin-Array ist
|
|
if (in_array($_SESSION['user_id'], $admin_ids, true)) {
|
|
$is_admin = "true";
|
|
}
|
|
// Prüfen, ob die user_id im Aktien-Array ist
|
|
if (in_array($_SESSION['user_id'], $aktien_ids, true)) {
|
|
$is_aktien = "true";
|
|
}
|
|
|
|
// Aktuelles Jahr und Monat ermitteln, ggf. aus GET-Parametern
|
|
$year = isset($_GET['year']) ? (int)$_GET['year'] : (int)date('Y');
|
|
$month = isset($_GET['month']) ? (int)$_GET['month'] : (int)date('m');
|
|
|
|
// Monats- und Jahresgrenzen prüfen und anpassen
|
|
if ($month < 1) {
|
|
$month = 12;
|
|
$year--;
|
|
} elseif ($month > 12) {
|
|
$month = 1;
|
|
$year++;
|
|
}
|
|
|
|
// Kategorien aus der Datenbank abrufen
|
|
$categoryStmt = $pdo->query("SELECT category_id, name FROM categories ORDER BY name");
|
|
$categories = $categoryStmt->fetchAll();
|
|
|
|
// Standardmäßig alle Kategorien auswählen, falls keine Auswahl getroffen wurde
|
|
if (array_key_exists('categories', $_GET) && $_GET['categories'] !== []) {
|
|
$selectedCategories = $_GET['categories'];
|
|
} else {
|
|
$selectedCategories = array_column($categories, 'category_id');
|
|
}
|
|
|
|
|
|
// Daten abrufen für den ausgewählten Monat und die ausgewählten Kategorien
|
|
$sql = "
|
|
SELECT
|
|
u.id AS user_id,
|
|
u.username,
|
|
COALESCE(SUM(e.amount), 0) AS gesamtbetrag
|
|
FROM
|
|
users u
|
|
LEFT JOIN
|
|
entries e ON e.user_id = u.id
|
|
AND MONTH(e.date) = ?
|
|
AND YEAR(e.date) = ?
|
|
AND e.category IN (" . implode(',', array_fill(0, count($selectedCategories), '?')) . ")
|
|
GROUP BY
|
|
u.id, u.username;
|
|
";
|
|
|
|
$params = array_merge([$month, $year], $selectedCategories);
|
|
$stmt = $pdo->prepare($sql);
|
|
$stmt->execute($params);
|
|
$entries = $stmt->fetchAll();
|
|
|
|
// Namen der aktuell ausgewählten Kategorien ermitteln (für den Link zum Dashboard)
|
|
$selectedCategoryNames = [];
|
|
foreach ($categories as $category) {
|
|
if (in_array($category['category_id'], $selectedCategories)) {
|
|
$selectedCategoryNames[] = $category['name'];
|
|
}
|
|
}
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=0.8">
|
|
<title>FSCash - Personenreport</title>
|
|
<link rel="stylesheet" href="assets/css/style.css">
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<!-- Navigation -->
|
|
<nav class="nav">
|
|
<button class="hamburger">☰</button>
|
|
<ul class="nav-list">
|
|
<li><a href="dashboard.php">Start</a></li>
|
|
<?php if ($is_aktien === "true") echo '<li><a href="aktien.php">Aktien</a></li>'; ?>
|
|
<?php if ($is_admin === "true") echo '<li><a href="register.php">Neue User</a></li>'; ?>
|
|
<li><a href="rep-month.php">Report Monat</a></li>
|
|
<li><a href="menu5.php" style="display: none;">Menüpunkt 5</a></li>
|
|
</ul>
|
|
<!-- Container für die rechten Buttons -->
|
|
<div class="nav-right">
|
|
<a href="?year=<?= $year ?>&month=<?= $month - 1 ?>" class="nav-button"> < </a>
|
|
<a href="?year=<?= $year ?>&month=<?= $month + 1 ?>" class="nav-button"> > </a>
|
|
<a href="logout.php" class="logout">Logout</a>
|
|
</div>
|
|
</nav>
|
|
|
|
<h2><?= strftime('%B %Y', mktime(0, 0, 0, $month, 1, $year)) ?></h2>
|
|
|
|
<!-- Multiselect für Kategorien -->
|
|
<form method="get" action="rep-person.php" class="category-filter">
|
|
<input type="hidden" name="year" value="<?= $year ?>">
|
|
<input type="hidden" name="month" value="<?= $month ?>">
|
|
<label for="categories">Kategorien:</label>
|
|
|
|
<div class="category-checkbox-list" id="categories_rep_person">
|
|
<?php foreach ($categories as $category): ?>
|
|
<label class="category-checkbox">
|
|
<input
|
|
type="checkbox"
|
|
name="categories[]"
|
|
value="<?= $category['category_id'] ?>"
|
|
<?= in_array($category['category_id'], $selectedCategories) ? 'checked' : '' ?>
|
|
onchange="this.form.submit()"
|
|
>
|
|
<?= htmlspecialchars($category['name']) ?>
|
|
</label><br/>
|
|
<?php endforeach; ?>
|
|
<br/></div>
|
|
|
|
<!-- button type="submit">Filtern</button -->
|
|
</form>
|
|
|
|
<table class="thin">
|
|
<thead>
|
|
<tr>
|
|
<th>Zahler</th>
|
|
<th>Summe</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($entries as $entry): ?>
|
|
<tr>
|
|
<td><?= htmlspecialchars($entry['username'] ?? '') ?></td>
|
|
<td class="align-right">
|
|
<a href="dashboard.php?<?= http_build_query([
|
|
'year' => $year,
|
|
'month' => $month,
|
|
'zahler' => $entry['username'] ?? '',
|
|
'kategorien' => $selectedCategoryNames,
|
|
]) ?>">
|
|
<?= htmlspecialchars(number_format($entry['gesamtbetrag'], 2, ',', '.')) ?>
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
|
|
<script>
|
|
// Hamburger-Menü-Funktion
|
|
document.querySelector('.hamburger').addEventListener('click', function() {
|
|
document.querySelector('.nav-list').classList.toggle('show');
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|