Finanzmanager/tests/49_UmsatzHerkunftNachtragenTest.php
fds2610-bot 5d39293328 Fix n.n.: Bekannte Umsätze bekommen IBAN und Bank der Gegenseite nachgetragen
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-29 11:48:13 +02:00

119 lines
4.7 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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');
}
}