In „Depotbuchung erfassen“ ergibt sich bei Kauf und Verkauf aus zwei der drei Felder Betrag, Stück und Kurs das dritte (Betrag = Stück × Kurs). Der ausgerechnete Wert ist hervorgehoben und zieht nach, wenn sich die anderen Felder ändern. Serverseitig rechnet Depotbuchung::dritterWert() dieselbe Regel für den Weg ohne JavaScript. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
52 lines
2.1 KiB
PHP
52 lines
2.1 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
use Finanzmanager\Models\Depotbuchung;
|
||
|
||
/**
|
||
* Fix #129: Bei Kauf und Verkauf ergibt sich aus zwei der drei Angaben Stück,
|
||
* Kurs und Betrag die dritte – Betrag = Stück × Kurs. Die Maske rechnet im
|
||
* Browser, der Server dieselbe Regel für den Weg ohne JavaScript.
|
||
*/
|
||
class DepotbuchungDritterWertTest extends TestCase
|
||
{
|
||
protected string $testName = 'Test 63: Depotbuchung – dritten Wert aus Stück, Kurs und Betrag';
|
||
|
||
public function run(): void
|
||
{
|
||
$werte = Depotbuchung::dritterWert('kauf', 12.0, 45.67, 0.0);
|
||
$this->assertEquals(548.04, $werte['betrag'], 'Kauf: Betrag = Stück × Kurs');
|
||
$this->assertEquals(12.0, $werte['stueck'], 'Kauf: Stück bleibt');
|
||
$this->assertEquals(45.67, $werte['kurs'], 'Kauf: Kurs bleibt');
|
||
|
||
$werte = Depotbuchung::dritterWert('verkauf', 8.0, 0.0, 1000.0);
|
||
$this->assertEquals(125.0, $werte['kurs'], 'Verkauf: Kurs = Betrag / Stück');
|
||
|
||
$werte = Depotbuchung::dritterWert('kauf', 0.0, 3.0, 100.0);
|
||
$this->assertEquals(33.333333, $werte['stueck'], 'Kauf: Stück = Betrag / Kurs, sechs Nachkommastellen');
|
||
|
||
$werte = Depotbuchung::dritterWert('kauf', 10.0, 20.0, 150.0);
|
||
$this->assertEquals(
|
||
['stueck' => 10.0, 'kurs' => 20.0, 'betrag' => 150.0],
|
||
$werte,
|
||
'Alle drei angegeben: nichts wird überschrieben'
|
||
);
|
||
|
||
$werte = Depotbuchung::dritterWert('kauf', 0.0, 0.0, 150.0);
|
||
$this->assertEquals(
|
||
['stueck' => 0.0, 'kurs' => 0.0, 'betrag' => 150.0],
|
||
$werte,
|
||
'Nur eine Angabe: nichts zu rechnen'
|
||
);
|
||
|
||
$werte = Depotbuchung::dritterWert('dividende', 0.0, 2.0, 50.0);
|
||
$this->assertEquals(0.0, $werte['stueck'], 'Dividende: keine Stückzahl aus Betrag und Kurs');
|
||
|
||
$werte = Depotbuchung::dritterWert('einlage', 5.0, 0.0, 500.0);
|
||
$this->assertEquals(0.0, $werte['kurs'], 'Einlieferung: kein Kurs aus Betrag und Stück');
|
||
|
||
$werte = Depotbuchung::dritterWert('einlage', 5.0, 10.0, 0.0);
|
||
$this->assertEquals(50.0, $werte['betrag'], 'Einlieferung: Betrag aus Stück × Kurs wie bisher');
|
||
}
|
||
}
|