findAccountId('4980'); $zahlungsId = $this->findAccountId('1800'); if (!$kategorieId || !$zahlungsId) { $this->assert(false, 'Benötigte Konten (4980, 1800) nicht gefunden'); return; } // Beleg anlegen $belegId = Beleg::create([ 'beleg_nr' => 'TEST-' . uniqid(), 'filename' => 'test.pdf', 'storage_path' => 'uploads/test.pdf', 'mime_type' => 'application/pdf', 'file_hash' => sha1('test'), 'beleg_datum' => date('Y-m-d'), 'belegtyp' => 'Eingangsrechnung', 'betrag_brutto' => 119.00, ]); $this->assertGreaterThan(0, $belegId, 'Beleg angelegt (ID > 0)'); // Vor Buchung: booked = 0 $beleg = Beleg::find($belegId); $this->assertEquals(0, (int)($beleg['booked'] ?? 0), 'Vor Buchung: booked = 0'); // Buchung anlegen $buchungId = Booking::create([ 'beleg_id' => $belegId, 'buchungs_datum' => date('Y-m-d'), 'buchungstyp' => 'Ausgabe', 'kategorie_konto_id' => $kategorieId, 'zahlungskonto_id' => $zahlungsId, 'betrag_netto' => 100.00, 'ust_satz' => 19, 'steuerart' => 'normal', 'buchungstext' => 'Test Buchung', ]); $this->assertGreaterThan(0, $buchungId, 'Buchung angelegt (ID > 0)'); // Nach Buchung: booked = 1 $beleg = Beleg::find($belegId); $this->assertEquals(1, (int)($beleg['booked'] ?? 0), 'Nach Buchung: booked = 1 (abgeleitet)'); // Buchung löschen Database::execute('DELETE FROM bookings WHERE id = ?', [$buchungId]); // Nach Löschen der Buchung: booked = 0 $beleg = Beleg::find($belegId); $this->assertEquals(0, (int)($beleg['booked'] ?? 0), 'Nach Löschen der Buchung: booked = 0'); // Belegübersicht: Filter booked=1 enthält den Beleg nicht mehr $result = Beleg::all(['booked' => '1']); $found = false; foreach ($result['rows'] as $row) { if ((int)$row['id'] === $belegId) { $found = true; break; } } $this->assert(!$found, 'Beleg nicht in booked=1-Filter nach Buchungslöschung'); // Filter booked=0 enthält den Beleg $result = Beleg::all(['booked' => '0']); $found = false; foreach ($result['rows'] as $row) { if ((int)$row['id'] === $belegId) { $found = true; break; } } $this->assert($found, 'Beleg erscheint in booked=0-Filter nach Buchungslöschung'); } }