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();
|
$customers = Customer::all();
|
||||||
$settings = Setting::get();
|
$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 = new View();
|
||||||
$view->render('layout/base.php', [
|
$view->render('layout/base.php', [
|
||||||
'pageTitle' => 'Neue Rechnung',
|
'pageTitle' => 'Neue Rechnung',
|
||||||
'content' => $this->renderView('invoices/form', [
|
'content' => $this->renderView('invoices/form', [
|
||||||
'invoice' => [
|
'invoice' => $invoiceDefaults,
|
||||||
'rechnungs_datum' => date('Y-m-d'),
|
|
||||||
'leistungszeitraum_von' => date('Y-m-01'),
|
|
||||||
'leistungszeitraum_bis' => date('Y-m-t'),
|
|
||||||
],
|
|
||||||
'lines' => [],
|
'lines' => [],
|
||||||
'customers' => $customers,
|
'customers' => $customers,
|
||||||
'errors' => [],
|
'errors' => [],
|
||||||
|
|
|
||||||
|
|
@ -149,4 +149,10 @@ function updatePaymentDays(sel) {
|
||||||
const days = opt.dataset.payment;
|
const days = opt.dataset.payment;
|
||||||
if (days) document.getElementById('payment_days').value = days;
|
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>
|
</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