Finanzmanager/tests/45_BuchungHerkunftTest.php
fds2610-bot 2223ab4e06 Fix n.n.: Kontoblatt zeigt IBAN und Bank der Gegenseite im Verwendungszweck-Tooltip
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-27 15:46:51 +02:00

136 lines
5.2 KiB
PHP

<?php
declare(strict_types=1);
use Finanzmanager\Models\Bankinstitut;
use Finanzmanager\Models\Bankumsatz;
use Finanzmanager\Models\Bankzugang;
use Finanzmanager\Models\Buchung;
use Finanzmanager\Models\Konto;
/**
* IBAN und Bank der Gegenseite: Der Bankabruf löst die Bankleitzahl bzw. BIC
* der Gegenseite schon beim Schreiben des Umsatzes gegen das Institutsverzeichnis
* auf (Models\Bankinstitut); beim Übernehmen wandert beides auf die Buchung, wo
* das Kontoblatt es im Tooltip über dem Verwendungszweck zeigt.
*/
class BuchungHerkunftTest extends TestCase
{
protected string $testName = 'Test 45: IBAN und Bank der Gegenseite';
private int $giro = 0;
private int $zugang = 0;
public function run(): void
{
$this->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');
}
}