Fix #53: Zahlungsziel wird aus Kundendatensatz vorbelegt beim Erstellen einer Rechnung
This commit is contained in:
parent
6b1cecf465
commit
063962f2e3
3 changed files with 85 additions and 5 deletions
|
|
@ -40,15 +40,26 @@ class InvoiceController
|
|||
$customers = Customer::all();
|
||||
$settings = Setting::get();
|
||||
|
||||
$invoiceDefaults = [
|
||||
'rechnungs_datum' => date('Y-m-d'),
|
||||
'leistungszeitraum_von' => date('Y-m-01'),
|
||||
'leistungszeitraum_bis' => date('Y-m-t'),
|
||||
];
|
||||
|
||||
$preCustomerId = (int)($_GET['customer_id'] ?? 0);
|
||||
if ($preCustomerId > 0) {
|
||||
$customer = Customer::find($preCustomerId);
|
||||
if ($customer) {
|
||||
$invoiceDefaults['customer_id'] = $preCustomerId;
|
||||
$invoiceDefaults['payment_days'] = $customer['payment_days'];
|
||||
}
|
||||
}
|
||||
|
||||
$view = new View();
|
||||
$view->render('layout/base.php', [
|
||||
'pageTitle' => 'Neue Rechnung',
|
||||
'content' => $this->renderView('invoices/form', [
|
||||
'invoice' => [
|
||||
'rechnungs_datum' => date('Y-m-d'),
|
||||
'leistungszeitraum_von' => date('Y-m-01'),
|
||||
'leistungszeitraum_bis' => date('Y-m-t'),
|
||||
],
|
||||
'invoice' => $invoiceDefaults,
|
||||
'lines' => [],
|
||||
'customers' => $customers,
|
||||
'errors' => [],
|
||||
|
|
|
|||
|
|
@ -149,4 +149,10 @@ function updatePaymentDays(sel) {
|
|||
const days = opt.dataset.payment;
|
||||
if (days) document.getElementById('payment_days').value = days;
|
||||
}
|
||||
<?php if (!$isEdit): ?>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const sel = document.getElementById('customer_id');
|
||||
if (sel && sel.value) updatePaymentDays(sel);
|
||||
});
|
||||
<?php endif; ?>
|
||||
</script>
|
||||
|
|
|
|||
63
tests/22_RechnungZahlungszielTest.php
Normal file
63
tests/22_RechnungZahlungszielTest.php
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Steuerkram\Models\Customer;
|
||||
use Steuerkram\Models\Setting;
|
||||
|
||||
class RechnungZahlungszielTest extends TestCase
|
||||
{
|
||||
protected string $testName = 'Test 22: Rechnung – Zahlungsziel aus Kundendatensatz';
|
||||
|
||||
public function run(): void
|
||||
{
|
||||
$customerId = Customer::create([
|
||||
'nachname' => 'ZahlungszielTestKunde',
|
||||
'strasse' => 'Musterstr. 1',
|
||||
'plz' => '12345',
|
||||
'ort' => 'Musterstadt',
|
||||
'land' => 'DE',
|
||||
'payment_days' => 30,
|
||||
]);
|
||||
|
||||
$customer = Customer::find($customerId);
|
||||
$this->assert($customer !== false, 'Kunde wurde angelegt');
|
||||
$this->assertEquals(30, (int)$customer['payment_days'], 'Kundendatensatz enthält payment_days=30');
|
||||
|
||||
// Simuliere Controller-Logik: customer_id per GET → payment_days vorbelegen
|
||||
$preCustomerId = $customerId;
|
||||
$invoiceDefaults = [
|
||||
'rechnungs_datum' => date('Y-m-d'),
|
||||
'leistungszeitraum_von' => date('Y-m-01'),
|
||||
'leistungszeitraum_bis' => date('Y-m-t'),
|
||||
];
|
||||
if ($preCustomerId > 0) {
|
||||
$c = Customer::find($preCustomerId);
|
||||
if ($c) {
|
||||
$invoiceDefaults['customer_id'] = $preCustomerId;
|
||||
$invoiceDefaults['payment_days'] = $c['payment_days'];
|
||||
}
|
||||
}
|
||||
|
||||
$this->assertEquals($customerId, $invoiceDefaults['customer_id'], 'customer_id in Rechnungsdefaults gesetzt');
|
||||
$this->assertEquals(30, (int)$invoiceDefaults['payment_days'], 'payment_days aus Kundendaten vorbelegt');
|
||||
|
||||
// Ohne vorausgewählten Kunden bleibt payment_days ungesetzt
|
||||
$defaultsOhneKunde = [
|
||||
'rechnungs_datum' => date('Y-m-d'),
|
||||
];
|
||||
$this->assert(!isset($defaultsOhneKunde['payment_days']), 'payment_days ohne Kunden nicht gesetzt');
|
||||
|
||||
// Anderer Kunde mit abweichendem Zahlungsziel
|
||||
$customer2Id = Customer::create([
|
||||
'nachname' => 'ZahlungszielTestKunde2',
|
||||
'strasse' => 'Testgasse 2',
|
||||
'plz' => '54321',
|
||||
'ort' => 'Testdorf',
|
||||
'land' => 'DE',
|
||||
'payment_days' => 7,
|
||||
]);
|
||||
$c2 = Customer::find($customer2Id);
|
||||
$this->assertEquals(7, (int)$c2['payment_days'], 'Zweiter Kunde hat payment_days=7');
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue