Portiere PHP-Cronjobs auf Spring-Tasks und ergänze Legacy-Tests

Migriert die weiterhin benötigten Zeitaufgaben einschließlich SOAP-Importen, Betriebsstatus und Wiederanlaufkontrolle. Aktiviert 115 native Spring-Tasks im Docker-Image ohne Cron-Daemon oder PHP und dokumentiert die entfallenen HHA-Aufrufe. Ergänzt PHP-/UI-Testwerkzeuge und aktualisiert den Projektstand auf Version 0.2.0.
This commit is contained in:
Sven committed 2026-10-27 09:53:23 +01:00
1 parent 781a2b82dc
commit 9de2358480
57 files changed
+3251 -7

No files matched your search

@@ -0,0 +1,95 @@
<?php
final class InvoiceDiscountTest extends LegacyTestCase
{
private function rows(array $rows, float $selfDiscount = 0, ?float $original = null): FixtureRows
{
$GLOBALS['db']->expect('getOne', 'SELECT jbprc_price FROM jobprice WHERE jb_id = 123 AND mt_sort = 13', $selfDiscount);
$result = new FixtureRows($rows);
$GLOBALS['db']->expect('query', "SELECT trs_discount, trs_price, trs_srv_name FROM tourservice WHERE jb_id = '123'", $result);
if ($original !== null) {
$GLOBALS['db']->expect('getOne', 'SELECT jbprc_remark FROM jobprice WHERE jb_id = 123 AND mt_sort = 13', $original);
}
return $result;
}
private function row(string $name, float $price, float $discount = 0): array
{
return ['trs_srv_name' => $name, 'trs_price' => $price, 'trs_discount' => $discount];
}
private function item(int $index): array
{
[$table, $row] = FixtureState::$writes[$index];
self::assertSame('phoenix_log.b2b_objects', $table);
$fields = [];
for ($i = 0; $i < count($row); $i += 2) {
$fields[$row[$i]] = $row[$i + 1];
}
self::assertSame(300, $fields['bo_type']);
self::assertSame(123, $fields['bo_ext_id0']);
self::assertSame(7, $fields['bo_ext_id1']);
return json_decode($fields['bo_obj_data'], true, 512, JSON_THROW_ON_ERROR);
}
public function testNoDiscountProducesNoTextOrBiItems(): void
{
$rows = $this->rows([$this->row('Fixpreis', 100)]);
self::assertSame('', checkDiscountStr(123, 0, 100, 0));
self::assertSame([], FixtureState::$writes);
self::assertTrue($rows->freed);
}
public function testDiscountTextAndBiItemUseSameAmounts(): void
{
FixtureState::$parameters[7]['INV_PRINT_DISCOUNT'] = '1';
$this->rows([$this->row('Fixpreis', 90, 10)]);
self::assertSame("\nRabatt 10,00% auf 90,00 EUR = -9,00 EUR", checkDiscountStr(123, 0, 90, 0));
self::assertCount(1, FixtureState::$writes);
self::assertSame(['c', '0.1', 's', 'Rabatt', 'p', '90', 't', '-9'], $this->item(0));
}
public function testHiddenDiscountDoesNotCreateBiItem(): void
{
FixtureState::$parameters[7]['INV_PRINT_DISCOUNT'] = '0';
$this->rows([$this->row('Fixpreis', 90, 10)]);
self::assertSame('', checkDiscountStr(123, 0, 90, 0));
self::assertSame([], FixtureState::$writes);
}
public function testFuelMarkupExcludesServicePrice(): void
{
FixtureState::$parameters[7]['MASK_MARKUP_MODE'] = '1';
$this->rows([$this->row('Fixpreis', 110), $this->row('Servicepreis', 12)]);
self::assertSame("\nTreibstoffzuschlag 10,00% auf 100,00 EUR = 10,00 EUR", checkDiscountStr(123, 10, 110, 12));
self::assertCount(1, FixtureState::$writes);
self::assertSame(['c', '0.1', 's', 'Treibstoffzuschlag', 'p', '100', 't', '10'], $this->item(0));
}
public function testSelfEntryDiscountUsesStoredOriginalAmount(): void
{
$this->rows([$this->row('Fixpreis', 90), $this->row('Servicepreis', 12)], 10, 100);
self::assertSame("\nSelbsterfasserrabatt 10,00% auf 100,00 EUR = -10,00 EUR", checkDiscountStr(123, 0, 90, 12));
self::assertCount(1, FixtureState::$writes);
self::assertSame(['c', '0.1', 's', 'Selbsterfasserrabatt', 'p', '100', 't', '-10'], $this->item(0));
}
public function testMarkupThenSelfEntryDiscountKeepTextAndBiOrder(): void
{
FixtureState::$parameters[7]['MASK_MARKUP_MODE'] = '1';
$this->rows([$this->row('Fixpreis', 99)], 10, 110);
self::assertSame("\nTreibstoffzuschlag 10,00% auf 100,00 EUR = 10,00 EUR\nSelbsterfasserrabatt 10,00% auf 110,00 EUR = -11,00 EUR",
checkDiscountStr(123, 10, 99, 0));
self::assertCount(2, FixtureState::$writes);
self::assertSame(['c', '0.1', 's', 'Treibstoffzuschlag', 'p', '100', 't', '10'], $this->item(0));
self::assertSame(['c', '0.1', 's', 'Selbsterfasserrabatt', 'p', '110', 't', '-11'], $this->item(1));
}
public function testLegacyEuroByteIsPreserved(): void
{
FixtureState::$parameters[7] = ['MASK_MARKUP_MODE' => '1', 'INV_USE_EURO_SIGN' => '1'];
$this->rows([$this->row('Fixpreis', 110)]);
self::assertSame("\nTreibstoffzuschlag 10,00% auf 100,00 " . chr(128) . ' = 10,00 ' . chr(128),
checkDiscountStr(123, 10, 110, 0));
}
}