+ */
+function fscash_resolve_selected_payment_methods(array $allPaymentMethodIds, $requestedPaymentMethodIds): array
+{
+ if (is_array($requestedPaymentMethodIds) && $requestedPaymentMethodIds !== []) {
+ return $requestedPaymentMethodIds;
+ }
+
+ return $allPaymentMethodIds;
+}
+
/**
* Extrahiert den aktuellen Kurs aus einer Alpha-Vantage GLOBAL_QUOTE-Antwort.
*
diff --git a/html/rep-person.php b/html/rep-person.php
index d775e05..f65f9f1 100644
--- a/html/rep-person.php
+++ b/html/rep-person.php
@@ -32,8 +32,18 @@ $selectedCategories = fscash_resolve_selected_categories(
$_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();
-// Daten abrufen für den ausgewählten Monat und die ausgewählten Kategorien
+// 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,
@@ -46,11 +56,12 @@ 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);
+$params = array_merge([$month, $year], $selectedCategories, $selectedPaymentMethods);
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$entries = $stmt->fetchAll();
@@ -62,6 +73,14 @@ foreach ($categories as $category) {
$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'];
+ }
+}
?>
@@ -93,10 +112,13 @@ foreach ($categories as $category) {
= strftime('%B %Y', mktime(0, 0, 0, $month, 1, $year)) ?>
-
+
@@ -130,10 +173,11 @@ foreach ($categories as $category) {
= htmlspecialchars($entry['username'] ?? '') ?> |
= htmlspecialchars(number_format($entry['gesamtbetrag'], 2, ',', '.')) ?>
diff --git a/tests/FscashTest.php b/tests/FscashTest.php
index 6e1c530..164fb9f 100644
--- a/tests/FscashTest.php
+++ b/tests/FscashTest.php
@@ -187,6 +187,32 @@ final class FscashTest extends TestCase
);
}
+ // --- fscash_resolve_selected_payment_methods --------------------------
+
+ public function testResolveSelectedPaymentMethodsMitAuswahl(): void
+ {
+ $this->assertSame(
+ [2, 3],
+ fscash_resolve_selected_payment_methods([1, 2, 3, 4], [2, 3])
+ );
+ }
+
+ public function testResolveSelectedPaymentMethodsOhneAuswahlLiefertAlle(): void
+ {
+ $this->assertSame(
+ [1, 2, 3, 4],
+ fscash_resolve_selected_payment_methods([1, 2, 3, 4], null)
+ );
+ }
+
+ public function testResolveSelectedPaymentMethodsBeiLeeremArrayLiefertAlle(): void
+ {
+ $this->assertSame(
+ [1, 2, 3, 4],
+ fscash_resolve_selected_payment_methods([1, 2, 3, 4], [])
+ );
+ }
+
// --- fscash_extract_quote_price --------------------------------------
public function testExtractQuotePriceLiestPreisAus(): void
|