mandantAnlegen(); $this->giro = Konto::anlegen([ 'name' => 'Herkunftsgiro', 'kontoart' => 'bank', 'anfangssaldo' => 0, 'aktiv' => 1, ]); $this->zugang = Bankzugang::anlegen([ 'name' => 'Herkunftsbank', 'bankname' => 'Herkunftsbank AG', 'blz' => '12030000', 'fints_url' => 'https://banking.example.org/fints', 'benutzerkennung' => 'testkunde', 'pin' => 'geheim1234', 'abrufzeitraum' => 'letzter_abruf', 'aktiv' => 1, ]); $this->findeNachBicUndBlz(); $this->uebernehmenTraegtHerkunftEin(); $this->ohneGegenseiteBleibtLeer(); } private function findeNachBicUndBlz(): void { Bankinstitut::ersetze([[ 'nr' => 1, 'blz' => '12030000', 'bic' => 'BYLADEM1001', 'institut' => 'Deutsche Kreditbank Testinstitut', 'ort' => 'Berlin', 'rechenzentrum' => '', 'organisation' => '', 'hbci_adresse' => '', 'hbci_version' => '', 'pintan_url' => '', 'pintan_version' => '', 'stand' => null, ]]); $nachBic = Bankinstitut::findeNachBic('BYLADEM1001'); $this->assertNotEmpty($nachBic, 'Die BIC findet das Institut'); $this->assertEquals('Deutsche Kreditbank Testinstitut', $nachBic['institut'], 'Mit dem richtigen Namen'); $this->assertEquals( 'Deutsche Kreditbank Testinstitut', Bankinstitut::findeNachBicOderBlz('12030000')['institut'] ?? '', 'Eine reine Ziffernfolge gilt als Bankleitzahl' ); $this->assertEquals( 'Deutsche Kreditbank Testinstitut', Bankinstitut::findeNachBicOderBlz('BYLADEM1001')['institut'] ?? '', 'Buchstaben am Anfang gelten als BIC' ); $this->assertNull(Bankinstitut::findeNachBicOderBlz(''), 'Ohne Angabe gibt es keinen Treffer'); $this->assertNull(Bankinstitut::findeNachBic('XXXXXXXX'), 'Eine unbekannte BIC bleibt ohne Treffer'); Bankinstitut::leeren(); } private function uebernehmenTraegtHerkunftEin(): void { $umsatzId = Bankumsatz::anlegen([ 'zugang_id' => $this->zugang, 'konto_id' => $this->giro, 'extern_id' => 'test-herkunft-1', 'buchungstag' => '2026-09-07', 'wertstellung' => '2026-09-07', 'betrag' => -5000.00, 'empfaenger' => 'Felix David Schepmann', 'verwendungszweck' => 'Privatentnahme', 'gegen_iban' => 'de36120300001010903027', 'gegen_bankname' => 'Deutsche Kreditbank Testinstitut', ]); $this->assertNotEmpty($umsatzId, 'Der Umsatz wurde angelegt'); $umsatz = Bankumsatz::find((int)$umsatzId); $this->assertEquals( 'DE36120300001010903027', $umsatz['gegen_iban'], 'Die IBAN steht in Großbuchstaben im Umsatz' ); $buchungId = Bankumsatz::uebernehmen((int)$umsatzId, []); $buchung = Buchung::find($buchungId); $this->assertEquals('DE36120300001010903027', $buchung['iban'], 'Die IBAN steht auf der Buchung'); $this->assertEquals( 'Deutsche Kreditbank Testinstitut', $buchung['bankname'], 'Und der aufgelöste Bankname daneben' ); $zeilen = Buchung::kontoblatt($this->giro); $gefunden = null; foreach ($zeilen as $zeile) { if ((int)$zeile['id'] === $buchungId) { $gefunden = $zeile; } } $this->assertNotEmpty($gefunden, 'Die Buchung steht im Kontoblatt'); $this->assertEquals('DE36120300001010903027', $gefunden['iban'], 'Mit IBAN im Kontoblatt'); $this->assertEquals( 'Deutsche Kreditbank Testinstitut', $gefunden['bankname'], 'Und Bankname im Kontoblatt' ); } private function ohneGegenseiteBleibtLeer(): void { $buchungId = Buchung::anlegen([ 'konto_id' => $this->giro, 'datum' => '2026-09-08', 'betrag' => -12.00, 'empfaenger' => 'Kiosk', 'quelle' => 'manuell', ]); $buchung = Buchung::find($buchungId); $this->assertEquals('', $buchung['iban'], 'Ohne Bankabruf bleibt die IBAN leer'); $this->assertEquals('', $buchung['bankname'], 'Und der Bankname auch'); } }