From 4eb622fa7d44509ec7a547d98661a94d072b5fb1 Mon Sep 17 00:00:00 2001 From: fds2610-bot Date: Sat, 23 May 2026 15:23:56 +0200 Subject: [PATCH] Fix: Belegsumme und Bankzuordnung nach Storno korrekt berechnen --- src/Controllers/BookingController.php | 14 ++++++++++++++ src/Models/Beleg.php | 6 +++--- src/Models/Booking.php | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Controllers/BookingController.php b/src/Controllers/BookingController.php index fa1d4e8..a300927 100644 --- a/src/Controllers/BookingController.php +++ b/src/Controllers/BookingController.php @@ -198,6 +198,12 @@ class BookingController extends BaseController $ustSatz = (float)($data['ust_satz'] ?? 0); $brutto = round($netto * (1 + $ustSatz / 100), 2); BankTransaction::linkBeleg($bankTxId, $belegId, $brutto); + } else { + // Falls Beleg bereits verknüpft ist (z.B. nach Storno + Neubuchung), Betrag aktualisieren + $existingBt = BankTransaction::findByBelegId($belegId); + if ($existingBt) { + BankTransaction::linkBeleg((int)$existingBt['id'], $belegId, $totalBrutto); + } } if ($newAssetId !== null) { @@ -308,6 +314,14 @@ class BookingController extends BaseController try { Booking::reverse($id, $reason); $booking = Booking::find($id); + // Bankzuordnung auf neue (stornierte) Buchungssumme setzen + if (!empty($booking['beleg_id'])) { + $existingBt = BankTransaction::findByBelegId((int)$booking['beleg_id']); + if ($existingBt) { + $newSum = Booking::sumBruttoForBeleg((int)$booking['beleg_id']); + BankTransaction::linkBeleg((int)$existingBt['id'], (int)$booking['beleg_id'], $newSum); + } + } View::redirect("/belege/{$booking['beleg_id']}", 'Buchung wurde storniert.'); } catch (\PDOException $e) { error_log('[Steuerkram] PDO-Fehler in BookingController::reverse(): ' . $e->getMessage()); diff --git a/src/Models/Beleg.php b/src/Models/Beleg.php index 1341d6e..6e71924 100644 --- a/src/Models/Beleg.php +++ b/src/Models/Beleg.php @@ -47,7 +47,7 @@ class Beleg $offset = ($page - 1) * $perPage; $sql = 'SELECT b.*, (SELECT SUM(bk.betrag_brutto) FROM bookings bk - WHERE bk.beleg_id = b.id AND bk.is_reversal = 0 AND bk.parent_booking_id IS NULL + WHERE bk.beleg_id = b.id AND bk.is_reversal = 0 AND bk.parent_booking_id IS NULL AND bk.reversed_by IS NULL ) AS betrag_brutto, fy.year as fiscal_year_nr, s.name as supplier_name, @@ -78,7 +78,7 @@ class Beleg 'SELECT b.*, COALESCE( (SELECT SUM(bk.betrag_brutto) FROM bookings bk - WHERE bk.beleg_id = b.id AND bk.is_reversal = 0 AND bk.parent_booking_id IS NULL), + WHERE bk.beleg_id = b.id AND bk.is_reversal = 0 AND bk.parent_booking_id IS NULL AND bk.reversed_by IS NULL), b.betrag_brutto ) AS betrag_brutto, fy.year as fiscal_year_nr, @@ -121,7 +121,7 @@ class Beleg return Database::fetchOne( 'SELECT b.*, (SELECT SUM(bk.betrag_brutto) FROM bookings bk - WHERE bk.beleg_id = b.id AND bk.is_reversal = 0 AND bk.parent_booking_id IS NULL + WHERE bk.beleg_id = b.id AND bk.is_reversal = 0 AND bk.parent_booking_id IS NULL AND bk.reversed_by IS NULL ) AS betrag_brutto, fy.year as fiscal_year_nr, s.name as supplier_name, diff --git a/src/Models/Booking.php b/src/Models/Booking.php index 0f1011f..59683d3 100644 --- a/src/Models/Booking.php +++ b/src/Models/Booking.php @@ -433,7 +433,7 @@ class Booking $row = Database::fetchOne( 'SELECT COALESCE(SUM(betrag_brutto), 0) AS total FROM bookings - WHERE beleg_id = ? AND is_reversal = 0 AND parent_booking_id IS NULL', + WHERE beleg_id = ? AND is_reversal = 0 AND parent_booking_id IS NULL AND reversed_by IS NULL', [$belegId] ); return round((float)($row['total'] ?? 0), 2);