From c6d5babb41cf28dfdb599e5da2e0be7e4cd4a547 Mon Sep 17 00:00:00 2001
From: fds2610-bot
Date: Mon, 12 Oct 2026 21:51:41 +0200
Subject: [PATCH] =?UTF-8?q?Fix=20#131:=20Offene=20Vorg=C3=A4nge=20des=20Ba?=
=?UTF-8?q?rgeld-Tools=20im=20Buchungsbericht?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Die offenen Vorgänge „im Bargeld-Tool nicht gefunden“ und „Bargeld-Tool-
Prüfung fehlgeschlagen“ führen in den Buchungsbericht mit dem Filter
„Bargeld-Tool“ – dort steht die Spalte Kategorie/Gegenkonto mit. Die
eigene Liste unter /verwaltung/bargeld/fehler entfällt.
Co-Authored-By: Claude Opus 5.5
---
CHANGELOG.md | 4 ++
Changes.md | 8 +++
docs/buchungen.md | 11 +--
docs/cockpit.md | 11 +--
public/index.php | 1 -
src/Controllers/VerwaltungController.php | 21 ------
src/Models/Buchung.php | 22 ------
src/Services/Cockpit.php | 21 +++++-
src/Views/auswertungen/teil-buchungen.php | 10 +++
src/Views/verwaltung/bargeld_fehler.php | 69 ------------------
tests/15_CockpitTest.php | 23 +++---
tests/34_BargeldAbgleichTest.php | 86 ++++++++++++++++-------
tests/e2e/specs/bargeld.spec.js | 12 ++++
13 files changed, 132 insertions(+), 167 deletions(-)
delete mode 100644 src/Views/verwaltung/bargeld_fehler.php
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b25996c..169f2b3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -31,6 +31,10 @@ Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/).
### Fixed
+- Offene Vorgänge: „Im Bargeld-Tool nicht gefunden“ und „Bargeld-Tool-Prüfung fehlgeschlagen“
+ führen jetzt in den Buchungsbericht mit dem passenden Filter „Bargeld-Tool“ – dort steht die
+ Spalte Kategorie (bzw. das Gegenkonto) mit; die eigene Liste unter
+ `/verwaltung/bargeld/fehler` entfällt (#131)
- Anmeldeseite: Die Marke zeigt wie die Seitenleiste nach dem Anmelden das Coinstack-Symbol
und den fetten, zweifarbigen Schriftzug „Finanzmanager“ statt einer grauen Statusmarke (#130)
- Buchungsmaske: Eine falsche Splitsumme zeigte zwar die Fehlermeldung, riss aber über die
diff --git a/Changes.md b/Changes.md
index 2cc3e11..699af5b 100644
--- a/Changes.md
+++ b/Changes.md
@@ -1,5 +1,13 @@
# Änderungen
+## Offene Vorgänge des Bargeld-Tools im Buchungsbericht (12.10.2026)
+
+- Anlass (#131): Der Liste „Im Bargeld-Tool nicht gefunden“, aufgerufen aus *Offene Vorgänge* im Cockpit, fehlte die Spalte Kategorie/Gegenkonto. Gewünscht war statt einer eigenen Liste ein Filter im Buchungsbericht.
+- Den Filter „Bargeld-Tool“ hat der Buchungsbericht schon; die beiden offenen Vorgänge „Bargeld-Tool-Prüfung fehlgeschlagen“ und „im Bargeld-Tool nicht gefunden“ führen jetzt dorthin (`Cockpit::bargeldBericht()`): gesamter Zeitraum, Umbuchungen eingeschlossen, Filter „Abruf gescheitert“ bzw. „nicht gefunden“. Der Bericht zeigt Konto, Kategorie bzw. Gegenkonto in eckigen Klammern und Klasse; die Meldung der Gegenstelle steht im Tooltip der Spalte „Bar“.
+- Ist einer dieser beiden Filter gesetzt, erklärt der Hinweis unter dem Bericht den Status und dass eine erneute Zuordnung der Kategorie die Prüfung erneut anstößt – der Text der bisherigen Liste.
+- Entfernt: die Seite `/verwaltung/bargeld/fehler` (`VerwaltungController::bargeldFehler()`, `Views/verwaltung/bargeld_fehler.php`) und `Buchung::mitBargeldFehler()`.
+- Tests: `tests/34_BargeldAbgleichTest.php`, `tests/15_CockpitTest.php`, `tests/e2e/specs/bargeld.spec.js`.
+
## Anmeldeseite: Marke wie in der Seitenleiste (12.10.2026)
- Anlass (#130): Icon und Schrift des Logos auf der Anmeldeseite wichen von der Marke im angemeldeten Zustand ab.
diff --git a/docs/buchungen.md b/docs/buchungen.md
index 30323fa..997fea3 100644
--- a/docs/buchungen.md
+++ b/docs/buchungen.md
@@ -311,11 +311,12 @@ Adresse hinterlegt, entfällt die Spalte ganz; sie zeigte sonst in jeder Zeile d
grauen Kreis.
Buchungen mit dem Status `fehler` zählen im Cockpit als offener Vorgang „Bargeld-Tool-Prüfung
-fehlgeschlagen“ (siehe `docs/cockpit.md`) – ein Klick führt auf
-`/verwaltung/bargeld/fehler`, die kontoübergreifende Liste dieser Buchungen
-(`Buchung::mitBargeldFehler()`). Buchungen mit dem Status `fehlt` zählen als eigener offener
-Vorgang „im Bargeld-Tool nicht gefunden“ und führen auf dieselbe Seite mit `?status=fehlt`
-(`Buchung::mitBargeldFehler('fehlt')`).
+fehlgeschlagen“ (siehe `docs/cockpit.md`) – ein Klick führt in den Buchungsbericht über den
+gesamten Zeitraum, gefiltert auf „Bargeld-Tool: Abruf gescheitert“. Buchungen mit dem Status
+`fehlt` zählen als eigener offener Vorgang „im Bargeld-Tool nicht gefunden“ und führen in
+denselben Bericht mit dem Filter „nicht gefunden“. Der Bericht zeigt Konto, Kategorie bzw.
+Gegenkonto und Klasse; die Meldung der Gegenstelle steht im Tooltip der Spalte „Bar“. Eine
+eigene Liste dafür gibt es nicht mehr (#131).
**Ein Fehlschlag ist ein Ergebnis, kein Abbruch.** Weder ein abgeschaltetes Bargeld-Tool
noch ein Netzfehler darf verhindern, dass die Kategorie gespeichert wird; der Abruf bricht
diff --git a/docs/cockpit.md b/docs/cockpit.md
index a3e11fd..f50e068 100644
--- a/docs/cockpit.md
+++ b/docs/cockpit.md
@@ -181,11 +181,12 @@ Prüfungen, die gerade nichts melden und daher nicht in der Liste stehen:
* **nicht abgeglichen** – Buchungen aktiver Konten bis heute ohne Abgleich-Kennzeichen.
* **Bargeld-Tool-Prüfung fehlgeschlagen** – Buchungen mit `bargeld_status = 'fehler'`, also
einem gescheiterten Abruf beim Bargeld-Tool (siehe `docs/buchungen.md`), nicht zu
- verwechseln mit „im Bargeld-Tool nicht gefunden“. Führt auf
- `/verwaltung/bargeld/fehler`, die Liste dieser Buchungen kontoübergreifend
- (`Buchung::mitBargeldFehler()`), denn die Prüfung hängt an der Kategorie, nicht am Konto.
-* **Im Bargeld-Tool nicht gefunden** – Buchungen mit `bargeld_status = 'fehlt'`. Führt auf
- `/verwaltung/bargeld/fehler?status=fehlt` (`Buchung::mitBargeldFehler('fehlt')`).
+ verwechseln mit „im Bargeld-Tool nicht gefunden“. Führt in den Buchungsbericht über den
+ gesamten Zeitraum mit dem Filter „Bargeld-Tool: Abruf gescheitert“ – kontoübergreifend,
+ denn die Prüfung hängt an der Kategorie, nicht am Konto, und samt Spalte Kategorie (#131).
+* **Im Bargeld-Tool nicht gefunden** – Buchungen mit `bargeld_status = 'fehlt'`. Führt in
+ denselben Buchungsbericht mit dem Filter „Bargeld-Tool: nicht gefunden“
+ (`Cockpit::bargeldBericht()`).
* **Monatsabschluss steht aus** – der Vorschlag aus `Monatsabschluss::naechsterOffener()`,
aber nur, wenn dieser Monat wirklich noch offen ist und Buchungen trägt.
diff --git a/public/index.php b/public/index.php
index c5f09f9..e6da554 100644
--- a/public/index.php
+++ b/public/index.php
@@ -139,7 +139,6 @@ $router->post('/verwaltung/kontengruppen/{id}/loeschen',
$router->get('/verwaltung/bargeld', fn() => (new VerwaltungController())->bargeld());
$router->post('/verwaltung/bargeld', fn() => (new VerwaltungController())->bargeldSpeichern());
$router->post('/verwaltung/bargeld/test', fn() => (new VerwaltungController())->bargeldTest());
-$router->get('/verwaltung/bargeld/fehler', fn() => (new VerwaltungController())->bargeldFehler());
// Das Bankleitzahlen-Verzeichnis: nachschlagen und die Institutsliste einlesen.
$router->get('/verwaltung/bankinstitute', fn() => (new BankinstituteController())->index());
diff --git a/src/Controllers/VerwaltungController.php b/src/Controllers/VerwaltungController.php
index 537181f..b75961a 100644
--- a/src/Controllers/VerwaltungController.php
+++ b/src/Controllers/VerwaltungController.php
@@ -6,7 +6,6 @@ namespace Finanzmanager\Controllers;
use Finanzmanager\Models\Adresse;
use Finanzmanager\Models\Bankinstitut;
-use Finanzmanager\Models\Buchung;
use Finanzmanager\Models\Einstellung;
use Finanzmanager\Models\Erinnerung;
use Finanzmanager\Models\Kategorie;
@@ -278,26 +277,6 @@ class VerwaltungController extends BaseController
View::redirect('/verwaltung/bargeld', $ergebnis['meldung'], $ergebnis['erfolg'] ? 'erfolg' : 'fehler');
}
- /**
- * Alle Buchungen, an denen die Bargeld-Tool-Prüfung zuletzt einen Fehler
- * festgestellt hat – der Weg, den die Kachel „Offene Vorgänge“ des
- * Cockpit anbietet, sobald es solche Buchungen gibt.
- */
- public function bargeldFehler(): void
- {
- $this->verlangeAnmeldung();
-
- $fehlt = ($_GET['status'] ?? '') === 'fehlt';
-
- $this->render('verwaltung/bargeld_fehler.php', [
- 'titel' => $fehlt
- ? 'Bargeld-Tool: nicht gefundene Buchungen'
- : 'Bargeld-Tool: fehlgeschlagene Prüfungen',
- 'fehlt' => $fehlt,
- 'buchungen' => Buchung::mitBargeldFehler($fehlt ? 'fehlt' : 'fehler'),
- ]);
- }
-
/** Die gesamte Datenbank als Download. */
public function sicherungHerunterladen(): void
{
diff --git a/src/Models/Buchung.php b/src/Models/Buchung.php
index 9f82ef1..2bf8831 100644
--- a/src/Models/Buchung.php
+++ b/src/Models/Buchung.php
@@ -510,28 +510,6 @@ class Buchung
return $zeilen;
}
- /**
- * Alle Buchungen, an denen die Bargeld-Tool-Prüfung zuletzt einen Fehler
- * ('fehler') oder keinen Treffer ('fehlt') ergeben hat – kontoübergreifend, denn die Prüfung hängt an der
- * Kategorie der Buchung, nicht an ihrem Konto. Der Status 'fehler' steht
- * für einen gescheiterten Abruf (siehe Services\BargeldAbgleich::FEHLER),
- * 'fehlt' für eine im Bargeld-Tool nicht gefundene Buchung.
- *
- * @return list>
- */
- public static function mitBargeldFehler(string $status = 'fehler'): array
- {
- return Database::fetchAll(
- 'SELECT b.id, b.datum, b.betrag, b.empfaenger, b.buchungstext,
- b.bargeld_hinweis, b.bargeld_geprueft_am, b.konto_id, k.name AS konto_name
- FROM buchungen b
- JOIN konten k ON k.id = b.konto_id
- WHERE b.benutzer_id = ? AND b.bargeld_status = ?
- ORDER BY b.datum DESC, b.id DESC',
- [Mandant::id(), $status === 'fehlt' ? 'fehlt' : 'fehler']
- );
- }
-
/**
* Salden aller Konten in einem Rutsch: Anfangssaldo plus Buchungen, plus die
* Gegenseiten fremder Umbuchungen. Ohne Stichtag zählt alles (erwarteter
diff --git a/src/Services/Cockpit.php b/src/Services/Cockpit.php
index a70fcfb..62c3984 100644
--- a/src/Services/Cockpit.php
+++ b/src/Services/Cockpit.php
@@ -301,7 +301,7 @@ class Cockpit
'schluessel' => 'bargeld_fehler',
'text' => 'Bargeld-Tool-Prüfung fehlgeschlagen',
'anzahl' => $bargeldFehler,
- 'pfad' => '/verwaltung/bargeld/fehler',
+ 'pfad' => self::bargeldBericht(BargeldAbgleich::FEHLER),
];
}
@@ -317,7 +317,7 @@ class Cockpit
'schluessel' => 'bargeld_fehlt',
'text' => 'im Bargeld-Tool nicht gefunden',
'anzahl' => $bargeldFehlt,
- 'pfad' => '/verwaltung/bargeld/fehler?status=fehlt',
+ 'pfad' => self::bargeldBericht(BargeldAbgleich::FEHLT),
];
}
@@ -370,4 +370,21 @@ class Cockpit
return $vorgaenge;
}
+
+ /**
+ * Der Buchungsbericht über den gesamten Zeitraum, gefiltert auf einen
+ * Status des Bargeld-Tools – mit Kategorie bzw. Gegenkonto in eckigen
+ * Klammern (#131). Umbuchungen zählen mit, damit die Liste genau die
+ * Buchungen zeigt, die der offene Vorgang zählt.
+ */
+ private static function bargeldBericht(string $status): string
+ {
+ return '/auswertungen/bericht?' . http_build_query([
+ 'typ' => 'buchungsbericht',
+ 'zeitraum' => 'alles',
+ 'umbuchungen' => '1',
+ 'bargeld' => $status,
+ 'angepasst' => '1',
+ ]);
+ }
}
diff --git a/src/Views/auswertungen/teil-buchungen.php b/src/Views/auswertungen/teil-buchungen.php
index 014c32f..0fbf683 100644
--- a/src/Views/auswertungen/teil-buchungen.php
+++ b/src/Views/auswertungen/teil-buchungen.php
@@ -89,4 +89,14 @@ use Finanzmanager\View;
dem Summenbericht überein.
Der Empfänger führt in die Buchungsmaske.
+
+
+ Zu diesen Buchungen wurde im Bargeld-Tool keine Ausgabe mit demselben Betrag gefunden.
+
+ Bei diesen Buchungen ist der letzte Abruf beim Bargeld-Tool gescheitert – ein
+ Abrufproblem, keine Aussage darüber, ob die Buchung dort steht.
+
+ Die Meldung steht am Symbol in der Spalte „Bar“; eine erneute Zuordnung der Kategorie
+ in der Buchungsmaske oder im Kontoblatt stößt die Prüfung erneut an.
+
diff --git a/src/Views/verwaltung/bargeld_fehler.php b/src/Views/verwaltung/bargeld_fehler.php
deleted file mode 100644
index 7161533..0000000
--- a/src/Views/verwaltung/bargeld_fehler.php
+++ /dev/null
@@ -1,69 +0,0 @@
-> $buchungen
- */
-
-include __DIR__ . '/../layout/kopf.php';
-?>
-
-
-
-
-
- Zu diesen Buchungen wurde im Bargeld-Tool keine Ausgabe mit demselben Betrag
- gefunden. Eine erneute Zuordnung der Kategorie in der Buchungsmaske oder im
- Kontoblatt stößt die Prüfung erneut an.
-
- Bei diesen Buchungen ist der letzte Abruf beim Bargeld-Tool gescheitert – ein
- Abrufproblem, keine Aussage darüber, ob die Buchung dort steht. Eine erneute
- Zuordnung der Kategorie in der Buchungsmaske oder im Kontoblatt stößt die
- Prüfung erneut an.
-
-
-
-
- = $fehlt ? 'Keine nicht gefundenen Buchungen.' : 'Keine offenen Fehler.' ?>
-
-
-
-
- | Datum |
- Konto |
- Empfänger / Buchungstext |
- Betrag |
- Meldung |
-
-
-
-
-
- | = View::h(View::datum($buchung['datum'])) ?> |
-
-
- = View::h($buchung['konto_name']) ?>
-
- |
-
- = View::h($buchung['empfaenger'] !== '' ? $buchung['empfaenger'] : $buchung['buchungstext']) ?>
- |
-
- = View::betrag($buchung['betrag']) ?>
- |
- = View::h($buchung['bargeld_hinweis'] ?? '') ?> |
-
-
-
-
-
-
-
diff --git a/tests/15_CockpitTest.php b/tests/15_CockpitTest.php
index 3c51727..06d76f2 100644
--- a/tests/15_CockpitTest.php
+++ b/tests/15_CockpitTest.php
@@ -301,19 +301,9 @@ class CockpitTest extends TestCase
$this->assertNotEmpty($eintrag, 'Der offene Vorgang erscheint jetzt');
$this->assertEquals(1, $eintrag['anzahl'], 'Genau die eine betroffene Buchung wird gezählt');
$this->assertEquals(
- '/verwaltung/bargeld/fehler',
+ '/auswertungen/bericht?typ=buchungsbericht&zeitraum=alles&umbuchungen=1&bargeld=fehler&angepasst=1',
$eintrag['pfad'],
- 'Der Weg führt zur Liste der fehlgeschlagenen Prüfungen'
- );
-
- $liste = Buchung::mitBargeldFehler();
- $this->assertEquals(1, count($liste), 'Die Liste enthält genau diese Buchung');
- $this->assertEquals($id, $liste[0]['id'], 'Es ist dieselbe Buchung');
- $this->assertEquals('Cockpitgiro', $liste[0]['konto_name'], 'Der Kontoname kommt mit');
- $this->assertEquals(
- 'Kasse nicht erreichbar.',
- $liste[0]['bargeld_hinweis'],
- 'Die Meldung der Gegenstelle steht dabei'
+ 'Der Weg führt in den Buchungsbericht, gefiltert auf fehlgeschlagene Prüfungen (#131)'
);
// Ein Status ungleich 'fehler' (z. B. 'gefunden') zählt nicht mit.
@@ -321,13 +311,16 @@ class CockpitTest extends TestCase
$ohne = $schluessel(Cockpit::offeneVorgaenge(self::HEUTE));
$this->assert(!isset($ohne['bargeld_fehler']), 'Ein gefundener Treffer ist kein offener Vorgang mehr');
- // Nicht gefunden: eigener Vorgang mit eigener Liste.
+ // Nicht gefunden: eigener Vorgang mit eigenem Filter im Buchungsbericht.
Database::execute("UPDATE buchungen SET bargeld_status = 'fehlt' WHERE id = ?", [$id]);
$fehlt = $schluessel(Cockpit::offeneVorgaenge(self::HEUTE));
$this->assertEquals(1, $fehlt['bargeld_fehlt'] ?? 0, 'Eine im Bargeld-Tool nicht gefundene Buchung ist ein offener Vorgang');
$this->assert(!isset($fehlt['bargeld_fehler']), 'Nicht gefunden zählt nicht als gescheiterter Abruf');
- $this->assertEquals(1, count(Buchung::mitBargeldFehler('fehlt')), 'Die Liste „nicht gefunden“ enthält die Buchung');
- $this->assertEquals(0, count(Buchung::mitBargeldFehler()), 'Die Fehlerliste enthält sie nicht');
+ $pfade = array_column(Cockpit::offeneVorgaenge(self::HEUTE), 'pfad', 'schluessel');
+ $this->assert(
+ str_contains($pfade['bargeld_fehlt'] ?? '', 'typ=buchungsbericht') && str_contains($pfade['bargeld_fehlt'] ?? '', 'bargeld=fehlt'),
+ 'Der Weg führt in den Buchungsbericht, gefiltert auf „nicht gefunden“ (#131)'
+ );
Database::execute("UPDATE buchungen SET bargeld_status = 'fehler' WHERE id = ?", [$id]);
}
diff --git a/tests/34_BargeldAbgleichTest.php b/tests/34_BargeldAbgleichTest.php
index e67a589..e452b72 100644
--- a/tests/34_BargeldAbgleichTest.php
+++ b/tests/34_BargeldAbgleichTest.php
@@ -7,8 +7,10 @@ use Finanzmanager\Models\Buchung;
use Finanzmanager\Models\Einstellung;
use Finanzmanager\Models\Kategorie;
use Finanzmanager\Models\Konto;
+use Finanzmanager\Services\Auswertung;
use Finanzmanager\Services\BargeldAbgleich;
use Finanzmanager\Services\BargeldTool;
+use Finanzmanager\Services\Cockpit;
use Finanzmanager\Services\Crypto;
/**
@@ -52,7 +54,7 @@ class BargeldAbgleichTest extends TestCase
$this->kontoblattFuehrtDenStatusMit();
$this->kontoblattZeigtDieViervierSymbole();
$this->konfigurationsseiteZeigtDieAuswahl();
- $this->fehlerlisteZeigtDieBuchungen();
+ $this->buchungsberichtFiltertNachBargeldStatus();
}
protected function tearDown(): void
@@ -512,42 +514,72 @@ class BargeldAbgleichTest extends TestCase
}
/**
- * Die Liste unter „Verwaltung → Bargeld-Tool → fehlgeschlagene Prüfungen“,
- * das Ziel der Kachel „Offene Vorgänge“ im Cockpit. Buchung::mitBargeldFehler()
- * ist kontoübergreifend – geprüft am Datenmodell, nicht am Kontoblatt.
+ * Statt einer eigenen Liste führt der offene Vorgang des Cockpit in den
+ * Buchungsbericht, gefiltert auf den Status des Bargeld-Tools (#131).
+ * Dort steht – anders als in der früheren Liste – die Kategorie dabei.
*/
- private function fehlerlisteZeigtDieBuchungen(): void
+ private function buchungsberichtFiltertNachBargeldStatus(): void
{
- $id = $this->buchung(-27.30, '2026-06-01');
- Buchung::zuordnen($id, $this->bargeldKategorie, null);
+ Einstellung::set('bargeld_url', 'https://bargeld.example.org', 'bargeld');
+
+ $fehler = $this->buchung(-27.30, '2026-06-01');
+ Buchung::zuordnen($fehler, $this->bargeldKategorie, null);
+ $fehlt = $this->buchung(-8.40, '2026-06-02');
+ Buchung::zuordnen($fehlt, $this->bargeldKategorie, null);
Database::execute(
"UPDATE buchungen SET bargeld_status = 'fehler', bargeld_hinweis = 'Kasse steht still.' WHERE id = ?",
- [$id]
+ [$fehler]
+ );
+ Database::execute(
+ "UPDATE buchungen SET bargeld_status = 'fehlt', bargeld_hinweis = 'Kein Treffer.' WHERE id = ?",
+ [$fehlt]
);
- $liste = Buchung::mitBargeldFehler();
- $treffer = null;
- foreach ($liste as $zeile) {
- if ((int)$zeile['id'] === $id) {
- $treffer = $zeile;
- }
+ $pfade = array_column(Cockpit::offeneVorgaenge('2026-06-30'), 'pfad', 'schluessel');
+ foreach (['bargeld_fehler' => 'fehler', 'bargeld_fehlt' => 'fehlt'] as $schluessel => $status) {
+ $this->assertNotEmpty($pfade[$schluessel] ?? '', "Der offene Vorgang $schluessel erscheint");
+ parse_str((string)parse_url($pfade[$schluessel] ?? '', PHP_URL_QUERY), $query);
+ $this->assertEquals(
+ '/auswertungen/bericht',
+ parse_url($pfade[$schluessel] ?? '', PHP_URL_PATH),
+ "Der Vorgang $schluessel führt in die Auswertung"
+ );
+ $this->assertEquals('buchungsbericht', $query['typ'] ?? '', "Der Vorgang $schluessel öffnet den Buchungsbericht");
+ $this->assertEquals('alles', $query['zeitraum'] ?? '', 'Über den gesamten Zeitraum');
+ $this->assertEquals($status, $query['bargeld'] ?? '', "Gefiltert auf den Status $status");
+
+ $bericht = Auswertung::bericht(Auswertung::normalisiere($query), '2026-06-30');
+ $buchungen = array_merge(...array_column($bericht['gruppen'], 'buchungen'));
+ $ids = array_column($buchungen, 'buchung_id');
+ $this->assert(
+ in_array($status === 'fehler' ? $fehler : $fehlt, $ids, true),
+ "Der Bericht enthält die Buchung mit Status $status"
+ );
+ $this->assert(
+ !in_array($status === 'fehler' ? $fehlt : $fehler, $ids, true),
+ 'Die Buchung mit dem anderen Status fehlt'
+ );
+ $this->assertEquals(
+ ['Bargeld Haushalt'],
+ array_values(array_unique(array_column($buchungen, 'kategorie'))),
+ 'Die Kategorie steht an jeder Buchung'
+ );
+
+ $html = $this->rendere('auswertungen/teil-buchungen.php', ['bericht' => $bericht]);
+ $this->assert(str_contains($html, 'Kategorie | '), 'Die Spalte Kategorie steht im Bericht');
+ $this->assert(str_contains($html, 'Bargeld Haushalt'), 'Die Kategorie der Buchung steht im Bericht');
+ $this->assert(str_contains($html, 'Bargeld Giro'), 'Das Konto steht im Bericht');
+ $this->assert(
+ str_contains($html, $status === 'fehler' ? 'Kasse steht still.' : 'Kein Treffer.'),
+ 'Die Meldung der Gegenstelle steht am Symbol'
+ );
+ $this->assert(str_contains($html, 'stößt die Prüfung erneut an'), 'Der Hinweis zur erneuten Prüfung steht dabei');
}
- $this->assertNotEmpty($treffer, 'Die Buchung mit Status „fehler“ steht in der Liste');
- $this->assertEquals('Bargeld Giro', $treffer['konto_name'], 'Der Kontoname kommt mit – die Liste ist kontoübergreifend');
- $this->assertEquals('Kasse steht still.', $treffer['bargeld_hinweis'], 'Die Meldung steht dabei');
- $html = $this->rendere('verwaltung/bargeld_fehler.php', ['buchungen' => $liste]);
-
- $this->assert(str_contains($html, 'Bargeld Giro'), 'Der Kontoname steht in der Liste');
- $this->assert(str_contains($html, 'Bargeldabhebung'), 'Der Empfänger steht in der Liste');
- $this->assert(str_contains($html, 'Kasse steht still.'), 'Die Meldung der Gegenstelle steht dabei');
$this->assert(
- str_contains($html, '/konten/' . $this->konto),
- 'Der Kontoname führt ins Kontoblatt'
+ !is_file(dirname(__DIR__) . '/src/Views/verwaltung/bargeld_fehler.php'),
+ 'Die frühere eigene Liste ist entfernt'
);
-
- $leer = $this->rendere('verwaltung/bargeld_fehler.php', ['buchungen' => []]);
- $this->assert(str_contains($leer, 'Keine offenen Fehler.'), 'Eine leere Liste sagt das ausdrücklich');
}
/** @param list> $zeilen */
diff --git a/tests/e2e/specs/bargeld.spec.js b/tests/e2e/specs/bargeld.spec.js
index 1fe6f26..a2d118b 100644
--- a/tests/e2e/specs/bargeld.spec.js
+++ b/tests/e2e/specs/bargeld.spec.js
@@ -183,5 +183,17 @@ test.describe('Bargeld-Tool', () => {
const danach = page.locator('tr', { hasText: empfaenger })
await expect(danach).toContainText(KATEGORIE)
await expect(danach.locator('td.bargeldspalte .bargeld-fehler')).toBeVisible()
+
+ // Der offene Vorgang im Cockpit führt in den Buchungsbericht, gefiltert
+ // auf fehlgeschlagene Prüfungen – samt Kategorie (#131).
+ await page.goto('/')
+ await page.locator('.vorgangsliste a', { hasText: 'Bargeld-Tool-Prüfung fehlgeschlagen' }).click()
+ await expect(page).toHaveURL(/\/auswertungen\/bericht\?.*typ=buchungsbericht/)
+ await expect(page.locator('select[name="bargeld"]')).toHaveValue('fehler')
+ await expect(page.locator('table.buchungsgruppen thead')).toContainText('Kategorie')
+ const imBericht = page.locator('table.buchungsgruppen tr', { hasText: empfaenger })
+ await expect(imBericht).toContainText(KATEGORIE)
+ await expect(imBericht).toContainText(GIRO)
+ await expect(imBericht.locator('td.bargeldspalte .bargeld-fehler')).toBeVisible()
})
})