Ergänzt rep-person.php um eine zweite Filtertabelle für Zahlweisen neben der Kategorien-Auswahl; die Summen werden entsprechend beider Filter berechnet. Der Link zum Dashboard gibt die gewählten Zahlweisen als Vorauswahl weiter, analog zur bestehenden Kategorien-Vorauswahl.
197 lines
6.1 KiB
PHP
197 lines
6.1 KiB
PHP
<?php
|
|
require 'config.php';
|
|
require_once 'lib/fscash.php';
|
|
if (!isset($_SESSION['user_id'])) {
|
|
header('Location: index.php');
|
|
exit;
|
|
}
|
|
|
|
// Rollen des angemeldeten Benutzers ermitteln
|
|
$roles = fscash_user_roles((int)$_SESSION['user_id'], $admin_ids, $aktien_ids);
|
|
if ($roles['is_admin']) {
|
|
$is_admin = "true";
|
|
}
|
|
if ($roles['is_aktien']) {
|
|
$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
|
|
['month' => $month, 'year' => $year] = fscash_normalize_month_year($month, $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 = fscash_resolve_selected_categories(
|
|
array_column($categories, 'category_id'),
|
|
$_GET['categories'] ?? null
|
|
);
|
|
|
|
// Zahlweisen aus der Datenbank abrufen
|
|
$paymentMethodStmt = $pdo->query("SELECT payment_method_id, name FROM payment_methods ORDER BY name");
|
|
$paymentMethods = $paymentMethodStmt->fetchAll();
|
|
|
|
// Standardmäßig alle Zahlweisen auswählen, falls keine Auswahl getroffen wurde
|
|
$selectedPaymentMethods = fscash_resolve_selected_payment_methods(
|
|
array_column($paymentMethods, 'payment_method_id'),
|
|
$_GET['payment_methods'] ?? null
|
|
);
|
|
|
|
|
|
// Daten abrufen für den ausgewählten Monat, die ausgewählten Kategorien und Zahlweisen
|
|
$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), '?')) . ")
|
|
AND e.payment_method IN (" . implode(',', array_fill(0, count($selectedPaymentMethods), '?')) . ")
|
|
GROUP BY
|
|
u.id, u.username;
|
|
";
|
|
|
|
$params = array_merge([$month, $year], $selectedCategories, $selectedPaymentMethods);
|
|
$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'];
|
|
}
|
|
}
|
|
|
|
// Namen der aktuell ausgewählten Zahlweisen ermitteln (für den Link zum Dashboard)
|
|
$selectedPaymentMethodNames = [];
|
|
foreach ($paymentMethods as $paymentMethod) {
|
|
if (in_array($paymentMethod['payment_method_id'], $selectedPaymentMethods)) {
|
|
$selectedPaymentMethodNames[] = $paymentMethod['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 und Zahlweisen -->
|
|
<form method="get" action="rep-person.php" class="category-filter">
|
|
<input type="hidden" name="year" value="<?= $year ?>">
|
|
<input type="hidden" name="month" value="<?= $month ?>">
|
|
|
|
<div class="filter-columns">
|
|
<div class="filter-column">
|
|
<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>
|
|
</div>
|
|
|
|
<div class="filter-column">
|
|
<label for="payment_methods">Zahlweisen:</label>
|
|
|
|
<div class="category-checkbox-list" id="payment_methods_rep_person">
|
|
<?php foreach ($paymentMethods as $paymentMethod): ?>
|
|
<label class="category-checkbox">
|
|
<input
|
|
type="checkbox"
|
|
name="payment_methods[]"
|
|
value="<?= $paymentMethod['payment_method_id'] ?>"
|
|
<?= in_array($paymentMethod['payment_method_id'], $selectedPaymentMethods) ? 'checked' : '' ?>
|
|
onchange="this.form.submit()"
|
|
>
|
|
<?= htmlspecialchars($paymentMethod['name']) ?>
|
|
</label><br/>
|
|
<?php endforeach; ?>
|
|
<br/></div>
|
|
</div>
|
|
</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,
|
|
'zahlweisen' => $selectedPaymentMethodNames,
|
|
]) ?>">
|
|
<?= 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>
|