136 lines
5.2 KiB
PHP
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');
|
|
}
|
|
}
|