Fix: Belegsumme und Bankzuordnung nach Storno korrekt berechnen

This commit is contained in:
fds2610-bot 2026-05-23 15:23:56 +02:00
parent be469f1cb2
commit 4eb622fa7d
3 changed files with 18 additions and 4 deletions

View file

@ -198,6 +198,12 @@ class BookingController extends BaseController
$ustSatz = (float)($data['ust_satz'] ?? 0); $ustSatz = (float)($data['ust_satz'] ?? 0);
$brutto = round($netto * (1 + $ustSatz / 100), 2); $brutto = round($netto * (1 + $ustSatz / 100), 2);
BankTransaction::linkBeleg($bankTxId, $belegId, $brutto); 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) { if ($newAssetId !== null) {
@ -308,6 +314,14 @@ class BookingController extends BaseController
try { try {
Booking::reverse($id, $reason); Booking::reverse($id, $reason);
$booking = Booking::find($id); $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.'); View::redirect("/belege/{$booking['beleg_id']}", 'Buchung wurde storniert.');
} catch (\PDOException $e) { } catch (\PDOException $e) {
error_log('[Steuerkram] PDO-Fehler in BookingController::reverse(): ' . $e->getMessage()); error_log('[Steuerkram] PDO-Fehler in BookingController::reverse(): ' . $e->getMessage());

View file

@ -47,7 +47,7 @@ class Beleg
$offset = ($page - 1) * $perPage; $offset = ($page - 1) * $perPage;
$sql = 'SELECT b.*, $sql = 'SELECT b.*,
(SELECT SUM(bk.betrag_brutto) FROM bookings bk (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, ) AS betrag_brutto,
fy.year as fiscal_year_nr, fy.year as fiscal_year_nr,
s.name as supplier_name, s.name as supplier_name,
@ -78,7 +78,7 @@ class Beleg
'SELECT b.*, 'SELECT b.*,
COALESCE( COALESCE(
(SELECT SUM(bk.betrag_brutto) FROM bookings bk (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 b.betrag_brutto
) AS betrag_brutto, ) AS betrag_brutto,
fy.year as fiscal_year_nr, fy.year as fiscal_year_nr,
@ -121,7 +121,7 @@ class Beleg
return Database::fetchOne( return Database::fetchOne(
'SELECT b.*, 'SELECT b.*,
(SELECT SUM(bk.betrag_brutto) FROM bookings bk (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, ) AS betrag_brutto,
fy.year as fiscal_year_nr, fy.year as fiscal_year_nr,
s.name as supplier_name, s.name as supplier_name,

View file

@ -433,7 +433,7 @@ class Booking
$row = Database::fetchOne( $row = Database::fetchOne(
'SELECT COALESCE(SUM(betrag_brutto), 0) AS total 'SELECT COALESCE(SUM(betrag_brutto), 0) AS total
FROM bookings 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] [$belegId]
); );
return round((float)($row['total'] ?? 0), 2); return round((float)($row['total'] ?? 0), 2);