From a5989eb262764c1a07e4ba83e66a8d21945bd2d9 Mon Sep 17 00:00:00 2001 From: fds2610-bot Date: Mon, 12 Oct 2026 21:58:17 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20#136:=20Buchungen=20ohne=20Bargeld-Tool-A?= =?UTF-8?q?bgleich=20erm=C3=B6glichen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neuer Schalter „Ohne Bargeld-Abgleich“ in der Buchungsmaske für Sammelbuchungen und Differenzausgleiche. Solche Buchungen werden nicht gegen das Bargeld-Tool geprüft, ein früherer Status wird gelöscht, und sie erscheinen nicht mehr unter den offenen Vorgängen im Cockpit. Kontoblatt und Buchungsbericht zeigen einen leeren grauen Kreis. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 3 + Changes.md | 8 + README.md | 3 +- docs/buchungen.md | 13 +- docs/cockpit.md | 2 + migrations/031_ohne_bargeld_abgleich.sql | 11 ++ src/Controllers/BuchungenController.php | 7 +- src/Models/Buchung.php | 20 ++- src/Services/Auswertung.php | 7 +- src/Services/Bankabgleich.php | 1 + src/Services/BargeldAbgleich.php | 13 +- src/View.php | 9 +- src/Views/auswertungen/teil-buchungen.php | 2 +- src/Views/buchungen/formular.php | 20 +++ src/Views/buchungen/kontoblatt.php | 6 +- tests/65_OhneBargeldAbgleichTest.php | 194 ++++++++++++++++++++++ tests/e2e/specs/bargeld.spec.js | 43 +++++ 17 files changed, 341 insertions(+), 21 deletions(-) create mode 100644 migrations/031_ohne_bargeld_abgleich.sql create mode 100644 tests/65_OhneBargeldAbgleichTest.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 169f2b3..ea0bc4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/). ### Added +- Buchungsmaske: Schalter „Ohne Bargeld-Abgleich“ für Sammelbuchungen und + Differenzausgleiche; solche Buchungen werden nicht mit dem Bargeld-Tool abgeglichen und + erscheinen nicht mehr unter den offenen Vorgängen im Cockpit (#136) - Depotbuchung erfassen: Bei Kauf und Verkauf rechnet sich aus zwei der drei Felder Betrag, Stück und Kurs automatisch das dritte (Betrag = Stück × Kurs) (#129) - Wertpapiere: Beim Buchen eines Wertpapiergeschäfts (Dialog im Kontoblatt und diff --git a/Changes.md b/Changes.md index 699af5b..0e9c1e6 100644 --- a/Changes.md +++ b/Changes.md @@ -1,5 +1,13 @@ # Änderungen +## Buchen ohne Bargeld-Abgleich (12.10.2026) + +- Anlass (#136): Sammelbuchungen und Differenzausgleiche tragen eine Kategorie, die gegen das Bargeld-Tool geprüft wird, stehen dort aber absichtlich nicht – und wurden deshalb immer wieder als offener Vorgang angemahnt. +- Die Buchungsmaske hat den Schalter „Ohne Bargeld-Abgleich“ (`buchungen.ohne_bargeld_abgleich`, Migration `031_ohne_bargeld_abgleich.sql`). Er erscheint nur, wenn ein Bargeld-Tool eingerichtet ist; sonst trägt die Maske einen gesetzten Wert unsichtbar weiter. +- `BargeldAbgleich::pruefe()` prüft solche Buchungen nicht und löscht einen früheren Status. Sie erscheinen damit weder unter „Bargeld-Tool-Prüfung fehlgeschlagen“ noch unter „im Bargeld-Tool nicht gefunden“. Die Schnellzuordnung im Kontoblatt und die Regelanwendung lassen den Schalter stehen. +- Kontoblatt und Buchungsbericht zeigen in der Spalte „Bar“ einen leeren grauen Kreis mit dem Tooltip „Bewusst ohne Abgleich mit dem Bargeld-Tool“. +- Tests: `tests/65_OhneBargeldAbgleichTest.php`, `tests/e2e/specs/bargeld.spec.js`. + ## 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. diff --git a/README.md b/README.md index be868a5..db9f436 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,8 @@ Haushalt wird beides parallel genutzt. erfasst, sieht beim Zuweisen einer Kategorie sofort, ob die Buchung dort schon steht: grüner Haken, rotes X oder Ausrufezeichen in einer schmalen Spalte des Kontoblatts. Adresse, Zugangsdaten und die abzugleichenden Kategorien stehen unter - *Verwaltung → Bargeld-Tool*. + *Verwaltung → Bargeld-Tool*. Sammelbuchungen und Differenzausgleiche lassen sich in der + Buchungsmaske bewusst ohne Bargeld-Abgleich buchen. Einzelheiten je Modul in `docs/`, die Entwicklung in `Changes.md`. diff --git a/docs/buchungen.md b/docs/buchungen.md index 997fea3..3579e1b 100644 --- a/docs/buchungen.md +++ b/docs/buchungen.md @@ -286,9 +286,9 @@ Einstellungsbereich `bargeld`, der bewusst keinen Reiter im Einstellungsdialog h dafür in `Einstellung::EIGENE_SEITEN` (Test 02 prüft, dass jeder Bereich erreichbar bleibt). **Geprüft wird beim Zuweisen einer Kategorie** – aus der Schnellzuordnung des Kontoblatts -ebenso wie aus der Buchungsmaske. `Services\BargeldAbgleich::pruefe()` verlangt drei Dinge: +ebenso wie aus der Buchungsmaske. `Services\BargeldAbgleich::pruefe()` verlangt vier Dinge: eine Kategorie an der Buchung (keine Umbuchung, keine Splitbuchung), diese Kategorie -vorgemerkt, eine Adresse konfiguriert. Fällt eines weg, wird der Status gelöscht – auch beim +vorgemerkt, die Buchung nicht als „Ohne Bargeld-Abgleich“ markiert, eine Adresse konfiguriert. Fällt eines weg, wird der Status gelöscht – auch beim Umkategorisieren, sonst bliebe ein alter Haken an einer Buchung stehen, die niemand mehr abgleicht. Gesucht wird über `Services\BargeldTool` mit dem Betrag der Buchung, rückwärts ab ihrem Datum: Bargeld wird ausgegeben, bevor der Umsatz auf dem Konto ankommt, nie danach. @@ -300,6 +300,7 @@ Netz. In der schmalen Spalte zwischen Klasse und Betrag steht: | Symbol | Status | Bedeutung | |---|---|---| | ● grau | `NULL` | Die Buchung wird nicht abgeglichen | +| ○ grau | `NULL` | Die Buchung ist bewusst ohne Bargeld-Abgleich gebucht (#136) | | ✓ grün | `gefunden` | Im Bargeld-Tool steht eine Buchung mit demselben Betrag | | ✗ rot | `fehlt` | Dort steht keine | | ! | `fehler` | Der Abruf ist gescheitert | @@ -318,6 +319,14 @@ denselben Bericht mit dem Filter „nicht gefunden“. Der Bericht zeigt Konto, Gegenkonto und Klasse; die Meldung der Gegenstelle steht im Tooltip der Spalte „Bar“. Eine eigene Liste dafür gibt es nicht mehr (#131). +**Ohne Bargeld-Abgleich (#136).** Sammelbuchungen und Differenzausgleiche tragen eine +vorgemerkte Kategorie, stehen aber absichtlich nicht im Bargeld-Tool. Der Schalter **Ohne +Bargeld-Abgleich** in der Buchungsmaske setzt `buchungen.ohne_bargeld_abgleich`; die Buchung +wird dann nicht geprüft, ein früherer Status (`fehlt`, `fehler`) wird beim Speichern +gelöscht, und sie erscheint nicht mehr unter den offenen Vorgängen im Cockpit. Die +Schnellzuordnung lässt den Schalter stehen. Er erscheint nur, wenn eine Adresse hinterlegt +ist; ohne Bargeld-Tool trägt die Maske einen gesetzten Wert unsichtbar weiter. + **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 nach acht Sekunden ab. Null Treffer sind ausdrücklich kein Fehler – ein 404 dagegen schon, diff --git a/docs/cockpit.md b/docs/cockpit.md index f50e068..8a88cc2 100644 --- a/docs/cockpit.md +++ b/docs/cockpit.md @@ -187,6 +187,8 @@ Prüfungen, die gerade nichts melden und daher nicht in der Liste stehen: * **Im Bargeld-Tool nicht gefunden** – Buchungen mit `bargeld_status = 'fehlt'`. Führt in denselben Buchungsbericht mit dem Filter „Bargeld-Tool: nicht gefunden“ (`Cockpit::bargeldBericht()`). + Buchungen mit dem Schalter „Ohne Bargeld-Abgleich“ werden nicht geprüft und erscheinen + deshalb in keinem der beiden Vorgänge (#136). * **Monatsabschluss steht aus** – der Vorschlag aus `Monatsabschluss::naechsterOffener()`, aber nur, wenn dieser Monat wirklich noch offen ist und Buchungen trägt. diff --git a/migrations/031_ohne_bargeld_abgleich.sql b/migrations/031_ohne_bargeld_abgleich.sql new file mode 100644 index 0000000..184f951 --- /dev/null +++ b/migrations/031_ohne_bargeld_abgleich.sql @@ -0,0 +1,11 @@ +-- Bewusst ohne Abgleich mit dem Bargeld-Tool buchen (#136). +-- +-- Sammelbuchungen oder Differenzausgleiche tragen eine Kategorie, die gegen +-- das Bargeld-Tool geprüft wird, stehen dort aber absichtlich nicht. Der +-- Schalter in der Buchungsmaske nimmt solche Buchungen aus dem Abgleich; sie +-- erscheinen danach nicht mehr als offener Vorgang im Cockpit. +-- +-- Idempotent über IF NOT EXISTS. + +ALTER TABLE buchungen + ADD COLUMN IF NOT EXISTS ohne_bargeld_abgleich TINYINT(1) NOT NULL DEFAULT 0 AFTER bewusst_ohne_kategorie; diff --git a/src/Controllers/BuchungenController.php b/src/Controllers/BuchungenController.php index 414f598..9bee795 100644 --- a/src/Controllers/BuchungenController.php +++ b/src/Controllers/BuchungenController.php @@ -257,7 +257,8 @@ class BuchungenController extends BaseController $frisch = Buchung::find((int)$buchung['id']); $bargeldHtml = View::bargeldMarke( $frisch['bargeld_status'] ?? null, - $frisch['bargeld_hinweis'] ?? null + $frisch['bargeld_hinweis'] ?? null, + !empty($frisch['ohne_bargeld_abgleich']) ); } @@ -614,6 +615,9 @@ class BuchungenController extends BaseController 'kategorien' => Kategorie::baumFlach(), 'klassen' => Klasse::alle(), 'konten' => Konto::alle(), + // Der Schalter „Ohne Bargeld-Abgleich“ erscheint nur, wenn es ein + // Bargeld-Tool gibt (#136). + 'bargeld' => BargeldAbgleich::eingerichtet(), ]; if ($fehler !== '') { $daten['flash'] = [['typ' => 'fehler', 'meldung' => $fehler]]; @@ -653,6 +657,7 @@ class BuchungenController extends BaseController 'gegenkonto_id' => $zuordnung['gegenkonto_id'], 'quelle' => 'manuell', 'bewusst_ohne_kategorie' => isset($_POST['bewusst_ohne_kategorie']), + 'ohne_bargeld_abgleich' => isset($_POST['ohne_bargeld_abgleich']), ]; return [$daten, $this->splitzeilen()]; diff --git a/src/Models/Buchung.php b/src/Models/Buchung.php index 2bf8831..1d79c5f 100644 --- a/src/Models/Buchung.php +++ b/src/Models/Buchung.php @@ -106,15 +106,15 @@ class Buchung 'INSERT INTO buchungen (benutzer_id, konto_id, datum, valuta, betrag, empfaenger, iban, bankname, buchungstext, nummer, abgeglichen, kategorie_id, klasse_id, gegenkonto_id, gesplittet, - bewusst_ohne_kategorie, quelle, import_hash) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', + bewusst_ohne_kategorie, ohne_bargeld_abgleich, quelle, import_hash) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [ Mandant::id(), $felder['konto_id'], $felder['datum'], $felder['valuta'], $felder['betrag'], $felder['empfaenger'], $felder['iban'], $felder['bankname'], $felder['buchungstext'], $felder['nummer'], $felder['abgeglichen'], $felder['kategorie_id'], $felder['klasse_id'], $felder['gegenkonto_id'], $felder['gesplittet'], $felder['bewusst_ohne_kategorie'], - $felder['quelle'], $felder['import_hash'], + $felder['ohne_bargeld_abgleich'], $felder['quelle'], $felder['import_hash'], ] ); $id = Database::lastInsertId(); @@ -165,14 +165,15 @@ class Buchung Database::execute( 'UPDATE buchungen SET konto_id = ?, datum = ?, valuta = ?, betrag = ?, empfaenger = ?, buchungstext = ?, nummer = ?, abgeglichen = ?, kategorie_id = ?, klasse_id = ?, - gegenkonto_id = ?, gesplittet = ?, bewusst_ohne_kategorie = ? + gegenkonto_id = ?, gesplittet = ?, bewusst_ohne_kategorie = ?, + ohne_bargeld_abgleich = ? WHERE id = ? AND benutzer_id = ?', [ $felder['konto_id'], $felder['datum'], $felder['valuta'], $felder['betrag'], $felder['empfaenger'], $felder['buchungstext'], $felder['nummer'], $felder['abgeglichen'], $felder['kategorie_id'], $felder['klasse_id'], $felder['gegenkonto_id'], $felder['gesplittet'], $felder['bewusst_ohne_kategorie'], - $id, Mandant::id(), + $felder['ohne_bargeld_abgleich'], $id, Mandant::id(), ] ); @@ -437,7 +438,7 @@ class Buchung $sql = 'SELECT * FROM ( SELECT b.id, b.datum, b.valuta, b.betrag, b.empfaenger, b.buchungstext, b.nummer, b.abgeglichen, b.kategorie_id, b.klasse_id, b.gesplittet, b.quelle, - b.bargeld_status, b.bargeld_hinweis, b.bewusst_ohne_kategorie, + b.bargeld_status, b.bargeld_hinweis, b.bewusst_ohne_kategorie, b.ohne_bargeld_abgleich, b.gegenkonto_id, b.konto_id, 0 AS gegensicht, NULL AS split_id, b.iban, b.bankname FROM buchungen b @@ -445,7 +446,7 @@ class Buchung UNION ALL SELECT b.id, b.datum, b.valuta, -b.betrag, b.empfaenger, b.buchungstext, b.nummer, b.abgeglichen, b.kategorie_id, b.klasse_id, b.gesplittet, b.quelle, - NULL AS bargeld_status, NULL AS bargeld_hinweis, 0 AS bewusst_ohne_kategorie, + NULL AS bargeld_status, NULL AS bargeld_hinweis, 0 AS bewusst_ohne_kategorie, 0 AS ohne_bargeld_abgleich, b.konto_id AS gegenkonto_id, b.konto_id, 1 AS gegensicht, NULL AS split_id, \'\' AS iban, \'\' AS bankname FROM buchungen b @@ -453,7 +454,7 @@ class Buchung UNION ALL SELECT b.id, b.datum, b.valuta, -s.betrag, b.empfaenger, s.notiz, b.nummer, b.abgeglichen, s.kategorie_id, s.klasse_id, 0 AS gesplittet, b.quelle, - NULL AS bargeld_status, NULL AS bargeld_hinweis, 0 AS bewusst_ohne_kategorie, + NULL AS bargeld_status, NULL AS bargeld_hinweis, 0 AS bewusst_ohne_kategorie, 0 AS ohne_bargeld_abgleich, b.konto_id AS gegenkonto_id, b.konto_id, 1 AS gegensicht, s.id AS split_id, \'\' AS iban, \'\' AS bankname FROM buchung_splits s @@ -806,6 +807,9 @@ class Buchung 'gegenkonto_id' => $gegenkonto, 'gesplittet' => $gesplittet ? 1 : 0, 'bewusst_ohne_kategorie' => $bewusstOhne ? 1 : 0, + // Ohne Bargeld-Abgleich (#136): Die Buchung wird nicht gegen das + // Bargeld-Tool geprüft und deshalb auch nicht als offen angemahnt. + 'ohne_bargeld_abgleich' => !empty($daten['ohne_bargeld_abgleich']) ? 1 : 0, 'quelle' => isset(self::QUELLEN[(string)($daten['quelle'] ?? '')]) ? (string)$daten['quelle'] : 'manuell', 'import_hash' => ($daten['import_hash'] ?? null) ?: null, diff --git a/src/Services/Auswertung.php b/src/Services/Auswertung.php index e2c7dbc..ba72ace 100644 --- a/src/Services/Auswertung.php +++ b/src/Services/Auswertung.php @@ -841,6 +841,7 @@ class Auswertung 'betrag' => round((float)$zeile['betrag'], 2), 'bargeld_status' => $zeile['bargeld_status'] ?? null, 'bargeld_hinweis' => $zeile['bargeld_hinweis'] ?? null, + 'ohne_bargeld_abgleich' => !empty($zeile['ohne_bargeld_abgleich']), ]; } @@ -1193,13 +1194,15 @@ class Auswertung $sql = 'SELECT * FROM ( SELECT b.id AS buchung_id, NULL AS split_id, b.datum, b.betrag, b.konto_id, b.kategorie_id, b.klasse_id, b.gegenkonto_id, b.empfaenger, - b.buchungstext AS text, b.bargeld_status, b.bargeld_hinweis + b.buchungstext AS text, b.bargeld_status, b.bargeld_hinweis, + b.ohne_bargeld_abgleich FROM buchungen b WHERE b.benutzer_id = ? AND b.gesplittet = 0 AND b.datum BETWEEN ? AND ? UNION ALL SELECT b.id AS buchung_id, s.id AS split_id, b.datum, s.betrag, b.konto_id, s.kategorie_id, s.klasse_id, s.gegenkonto_id, b.empfaenger, - s.notiz AS text, b.bargeld_status, b.bargeld_hinweis + s.notiz AS text, b.bargeld_status, b.bargeld_hinweis, + b.ohne_bargeld_abgleich FROM buchung_splits s JOIN buchungen b ON b.id = s.buchung_id WHERE b.benutzer_id = ? AND b.gesplittet = 1 AND b.datum BETWEEN ? AND ? diff --git a/src/Services/Bankabgleich.php b/src/Services/Bankabgleich.php index 4a10391..d2f5d45 100644 --- a/src/Services/Bankabgleich.php +++ b/src/Services/Bankabgleich.php @@ -200,6 +200,7 @@ class Bankabgleich 'kategorie_id' => $zuordnung['kategorie_id'], 'klasse_id' => $zuordnung['klasse_id'], 'gegenkonto_id' => $zuordnung['gegenkonto_id'], + 'ohne_bargeld_abgleich' => $buchung['ohne_bargeld_abgleich'] ?? 0, ], $zuordnung['splits'] ); diff --git a/src/Services/BargeldAbgleich.php b/src/Services/BargeldAbgleich.php index f342cfd..1f01f5c 100644 --- a/src/Services/BargeldAbgleich.php +++ b/src/Services/BargeldAbgleich.php @@ -23,9 +23,12 @@ use Finanzmanager\Models\Kategorie; * * 1. Die Buchung trägt eine Kategorie (keine Umbuchung, keine Splitbuchung). * 2. Diese Kategorie ist in `Verwaltung → Bargeld-Tool` vorgemerkt. - * 3. Es ist eine Adresse konfiguriert. + * 3. Die Buchung ist nicht als „Ohne Bargeld-Abgleich“ markiert (#136) – + * Sammelbuchungen und Differenzausgleiche stehen absichtlich nicht im + * Bargeld-Tool und sollen nicht dauerhaft als offen angemahnt werden. + * 4. Es ist eine Adresse konfiguriert. * - * Fällt eine der drei Bedingungen weg, wird der Status gelöscht: Die Buchung + * Fällt eine der Bedingungen weg, wird der Status gelöscht: Die Buchung * hat mit dem Bargeld-Tool nichts zu tun und zeigt im Kontoblatt den grauen * Kreis. Das gilt ausdrücklich auch für eine Umkategorisierung – sonst bliebe * ein alter Haken an einer Buchung stehen, die niemand mehr abgleicht. @@ -141,7 +144,11 @@ class BargeldAbgleich /** @param array $buchung */ private static function istZuPruefen(array $buchung): bool { - if ((int)($buchung['gesplittet'] ?? 0) === 1 || !empty($buchung['gegenkonto_id'])) { + if ( + (int)($buchung['gesplittet'] ?? 0) === 1 + || !empty($buchung['gegenkonto_id']) + || !empty($buchung['ohne_bargeld_abgleich']) + ) { return false; } diff --git a/src/View.php b/src/View.php index 63fb638..0ad0be6 100644 --- a/src/View.php +++ b/src/View.php @@ -135,6 +135,8 @@ class View * Das Symbol der Abgleichspalte im Kontoblatt. Vier Zustände, in dieser * Reihenfolge zu lesen: gefunden, nicht gefunden, Abruf gescheitert – und * der graue Kreis für alles, was mit dem Bargeld-Tool nichts zu tun hat. + * Eine Buchung, die bewusst ohne Bargeld-Abgleich gebucht ist (#136), + * zeigt einen leeren grauen Kreis: nicht geprüft, aber absichtlich. * * Die Zeichen stehen als Text und nicht als Grafik da: Sie erben damit * Schriftgröße und – beim Ausrufezeichen ausdrücklich gewünscht – die @@ -144,15 +146,18 @@ class View * Schnellzuordnung (kontoblatt.js) dasselbe Symbol braucht, ohne die Seite * neu zu laden. */ - public static function bargeldMarke(?string $status, ?string $hinweis): string + public static function bargeldMarke(?string $status, ?string $hinweis, bool $ohneAbgleich = false): string { $hinweis = trim((string)$hinweis); - [$zeichen, $klasse, $standardtitel] = match ($status) { + [$zeichen, $klasse, $standardtitel] = match (true) { + $ohneAbgleich && $status === null => ['○', 'neutral', 'Bewusst ohne Abgleich mit dem Bargeld-Tool'], + default => match ($status) { 'gefunden' => ['✓', 'gefunden', 'Im Bargeld-Tool gefunden'], 'fehlt' => ['✗', 'fehlt', 'Im Bargeld-Tool nicht gefunden'], 'fehler' => ['!', 'fehler', 'Der Abruf beim Bargeld-Tool ist gescheitert'], default => ['●', 'neutral', 'Wird nicht mit dem Bargeld-Tool abgeglichen'], + }, }; return ' + diff --git a/src/Views/buchungen/formular.php b/src/Views/buchungen/formular.php index 7916b18..e69ecab 100644 --- a/src/Views/buchungen/formular.php +++ b/src/Views/buchungen/formular.php @@ -11,12 +11,14 @@ use Finanzmanager\View; /** @var list> $kategorien */ /** @var list> $klassen */ /** @var list> $konten */ +/** @var bool $bargeld Ist ein Bargeld-Tool eingerichtet? */ /** @var string $csrfToken */ $neu = $buchung === null; $ziel = $neu ? '/konten/' . (int)$konto['id'] . '/buchung' : '/buchungen/' . (int)$buchung['id']; $betrag = $neu ? 0.0 : (float)$buchung['betrag']; $eingaben = $eingaben ?? null; +$bargeld = $bargeld ?? false; // Die Art bestimmt nur noch die Richtung. Ob die Buchung eine Umbuchung ist, // steht im Feld Kategorie / Gegenkonto. @@ -39,6 +41,7 @@ $buchungstextWert = (string)($buchung['buchungstext'] ?? ''); $nummerWert = (string)($buchung['nummer'] ?? ''); $abgeglichenWert = !empty($buchung['abgeglichen']); $ohneKategorieWert = !empty($buchung['bewusst_ohne_kategorie']); +$ohneBargeldWert = !empty($buchung['ohne_bargeld_abgleich']); if ($eingaben !== null) { $art = ($eingaben['art'] ?? '') === 'einnahme' ? 'einnahme' : 'ausgabe'; @@ -51,6 +54,7 @@ if ($eingaben !== null) { $nummerWert = (string)($eingaben['nummer'] ?? ''); $abgeglichenWert = isset($eingaben['abgeglichen']); $ohneKategorieWert = isset($eingaben['bewusst_ohne_kategorie']); + $ohneBargeldWert = isset($eingaben['ohne_bargeld_abgleich']); } $eigenesKonto = (int)$konto['id']; @@ -206,6 +210,22 @@ include __DIR__ . '/../layout/kopf.php'; + + +
+ +
+ + + +