119 lines
4.7 KiB
PHP
119 lines
4.7 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
use Finanzmanager\Database;
|
||
use Finanzmanager\Models\Bankumsatz;
|
||
use Finanzmanager\Models\Bankzugang;
|
||
use Finanzmanager\Models\Buchung;
|
||
use Finanzmanager\Models\Konto;
|
||
|
||
/**
|
||
* IBAN und Bank der Gegenseite werden beim erneuten Abruf nachgetragen – auch
|
||
* wenn der Umsatz schon bekannt ist und deshalb nicht neu angelegt wird.
|
||
*/
|
||
class UmsatzHerkunftNachtragenTest extends TestCase
|
||
{
|
||
protected string $testName = 'Test 49: Herkunft eines bekannten Umsatzes nachtragen';
|
||
|
||
private int $giro = 0;
|
||
private int $zugang = 0;
|
||
private int $bankkonto = 0;
|
||
|
||
public function run(): void
|
||
{
|
||
$this->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<string,mixed> */
|
||
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');
|
||
}
|
||
}
|