FSCash/html/rep-person.php

142 lines
4.1 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
// $selectedCategories = isset($_GET['categories']) ? $_GET['categories'] : array_column($categories, 'category_id');
if (array_key_exists('categories', $_GET) && $_GET['categories'] !== []) {
$selectedCategories = $_GET['categories'];
}
// 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();
?>
<!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"> &lt; </a>
<a href="?year=<?= $year ?>&month=<?= $month + 1 ?>" class="nav-button"> &gt; </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"><?= htmlspecialchars(number_format($entry['gesamtbetrag'], 2, ',', '.')) ?></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>