mandantAnlegen(); $this->giro = Konto::anlegen([ 'name' => 'Nachtragsgiro', 'kontoart' => 'bank', 'anfangssaldo' => 0, 'aktiv' => 1, ]); $this->zugang = Bankzugang::anlegen([ 'name' => 'Nachtragsbank', 'bankname' => 'Nachtragsbank AG', 'blz' => '20041111', 'fints_url' => 'https://banking.example.org/fints', 'benutzerkennung' => 'testkunde', 'pin' => 'geheim1234', 'abrufzeitraum' => 'letzter_abruf', 'aktiv' => 1, ]); $this->bankkonto = (int)Bankzugang::findeOderLegeKontoAn( $this->zugang, 'DE53200411110847626900', '847626900', 'Girokonto' )['id']; Bankzugang::ordneKontoZu($this->bankkonto, $this->giro); $this->bekannterUmsatzBekommtHerkunft(); $this->vorhandeneAngabenBleiben(); $this->verbundeneBuchungBekommtHerkunft(); $this->verbindenMitErfasstenBuchungUebertraegt(); } /** @return array */ private function daten(string $zweck, string $iban = '', string $bank = ''): array { return [ 'zugang_id' => $this->zugang, 'konto_id' => $this->giro, 'bank_konto_id' => $this->bankkonto, 'extern_id' => Bankumsatz::externId($this->bankkonto, '2026-09-04', 0.01, $zweck), 'buchungstag' => '2026-09-04', 'wertstellung' => '2026-09-04', 'betrag' => 0.01, 'empfaenger' => 'Testabsender', 'verwendungszweck' => $zweck, 'gegen_iban' => $iban, 'gegen_bankname' => $bank, ]; } private function bekannterUmsatzBekommtHerkunft(): void { $id = Bankumsatz::anlegen($this->daten('Cent eins')); $this->assertNotEmpty($id, 'Umsatz ohne Herkunft angelegt'); $zweiter = Bankumsatz::anlegen($this->daten('Cent eins', 'de89370400440532013000', 'Testbank')); $this->assertNull($zweiter, 'Zweiter Abruf legt keinen neuen Umsatz an'); $umsatz = Bankumsatz::find((int)$id); $this->assertEquals('DE89370400440532013000', $umsatz['gegen_iban'], 'IBAN nachgetragen'); $this->assertEquals('Testbank', $umsatz['gegen_bankname'], 'Bank nachgetragen'); } private function vorhandeneAngabenBleiben(): void { $id = Bankumsatz::anlegen($this->daten('Cent zwei', 'DE02120300000000202051', 'Erste Bank')); Bankumsatz::anlegen($this->daten('Cent zwei', 'DE89370400440532013000', 'Andere Bank')); $umsatz = Bankumsatz::find((int)$id); $this->assertEquals('DE02120300000000202051', $umsatz['gegen_iban'], 'Vorhandene IBAN bleibt'); $this->assertEquals('Erste Bank', $umsatz['gegen_bankname'], 'Vorhandene Bank bleibt'); } private function verbundeneBuchungBekommtHerkunft(): void { $id = (int)Bankumsatz::anlegen($this->daten('Cent drei')); $buchungId = Bankumsatz::uebernehmen($id, []); $vorher = Buchung::find($buchungId); $this->assertEquals('', (string)$vorher['iban'], 'Buchung zunächst ohne IBAN'); Bankumsatz::anlegen($this->daten('Cent drei', 'DE89370400440532013000', 'Testbank')); $buchung = Buchung::find($buchungId); $this->assertEquals('DE89370400440532013000', $buchung['iban'], 'IBAN in der Buchung'); $this->assertEquals('Testbank', $buchung['bankname'], 'Bank in der Buchung'); } private function verbindenMitErfasstenBuchungUebertraegt(): void { $buchungId = Buchung::anlegen([ 'konto_id' => $this->giro, 'datum' => '2026-09-04', 'betrag' => 0.01, 'empfaenger' => 'Von Hand', 'buchungstext' => 'Cent vier', ]); $id = (int)Bankumsatz::anlegen($this->daten('Cent vier', 'DE02120300000000202051', 'Handbank')); Bankumsatz::verbinden($id, $buchungId); $buchung = Buchung::find($buchungId); $this->assertEquals('DE02120300000000202051', $buchung['iban'], 'Verbinden überträgt die IBAN'); $this->assertEquals('Handbank', $buchung['bankname'], 'Verbinden überträgt die Bank'); } }