Fix n.n.: Buchungstext bei regelmäßigen Buchungen

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
fds2610-bot 2026-10-01 09:08:51 +02:00
parent 1a464b5b17
commit ecab07e5da
3 changed files with 22 additions and 1 deletions

View file

@ -1,5 +1,9 @@
# Änderungen # Änderungen
## Buchungstext bei regelmäßigen Buchungen (01.10.2026)
- Das Feld „Buchungstext“ fehlte im Formular für neue regelmäßige Buchungen und war in der Liste nur ein verstecktes Feld. Jetzt beim Anlegen vorhanden und in der Liste unter dem Namen bearbeitbar (`termine/index.php`).
## Fälligkeit folgt der Buchung (01.10.2026) ## Fälligkeit folgt der Buchung (01.10.2026)
- Eine per Fälligkeitslauf oder „Buchen“ erzeugte Buchung merkt sich jetzt ihre regelmäßige Buchung und den Soll-Termin (`buchungen.regelmaessige_id`, `faelligkeit`, Migration 023). Wird sie gelöscht, rückt die Fälligkeit auf diesen Termin zurück, eine ausgelaufene Reihe wird wieder aktiv, `zuletzt_am` folgt der jüngsten verbleibenden Buchung (`RegelmaessigeBuchung::terminWiederOeffnen()`). Bereits vorhandene Buchungen sind nicht verknüpft; bei ihnen bleibt es beim bisherigen Verhalten. - Eine per Fälligkeitslauf oder „Buchen“ erzeugte Buchung merkt sich jetzt ihre regelmäßige Buchung und den Soll-Termin (`buchungen.regelmaessige_id`, `faelligkeit`, Migration 023). Wird sie gelöscht, rückt die Fälligkeit auf diesen Termin zurück, eine ausgelaufene Reihe wird wieder aktiv, `zuletzt_am` folgt der jüngsten verbleibenden Buchung (`RegelmaessigeBuchung::terminWiederOeffnen()`). Bereits vorhandene Buchungen sind nicht verknüpft; bei ihnen bleibt es beim bisherigen Verhalten.

View file

@ -102,7 +102,8 @@ include __DIR__ . '/../layout/kopf.php';
<input type="hidden" form="<?= $f ?>" name="csrf_token" value="<?= View::h($csrfToken) ?>"> <input type="hidden" form="<?= $f ?>" name="csrf_token" value="<?= View::h($csrfToken) ?>">
<input type="text" form="<?= $f ?>" name="name" value="<?= View::h($reihe['name']) ?>" required> <input type="text" form="<?= $f ?>" name="name" value="<?= View::h($reihe['name']) ?>" required>
<input type="hidden" form="<?= $f ?>" name="empfaenger" value="<?= View::h($reihe['empfaenger']) ?>"> <input type="hidden" form="<?= $f ?>" name="empfaenger" value="<?= View::h($reihe['empfaenger']) ?>">
<input type="hidden" form="<?= $f ?>" name="buchungstext" value="<?= View::h($reihe['buchungstext'] ?? '') ?>"> <input type="text" form="<?= $f ?>" name="buchungstext" placeholder="Buchungstext"
value="<?= View::h($reihe['buchungstext'] ?? '') ?>">
<input type="hidden" form="<?= $f ?>" name="kategorie_id" value="<?= View::h((string)$reihe['kategorie_id']) ?>"> <input type="hidden" form="<?= $f ?>" name="kategorie_id" value="<?= View::h((string)$reihe['kategorie_id']) ?>">
<input type="hidden" form="<?= $f ?>" name="klasse_id" value="<?= View::h((string)$reihe['klasse_id']) ?>"> <input type="hidden" form="<?= $f ?>" name="klasse_id" value="<?= View::h((string)$reihe['klasse_id']) ?>">
<input type="hidden" form="<?= $f ?>" name="gegenkonto_id" value="<?= View::h((string)$reihe['gegenkonto_id']) ?>"> <input type="hidden" form="<?= $f ?>" name="gegenkonto_id" value="<?= View::h((string)$reihe['gegenkonto_id']) ?>">
@ -188,6 +189,9 @@ include __DIR__ . '/../layout/kopf.php';
<label for="neu_empfaenger">Empfänger</label> <label for="neu_empfaenger">Empfänger</label>
<input type="text" id="neu_empfaenger" name="empfaenger"> <input type="text" id="neu_empfaenger" name="empfaenger">
<label for="neu_buchungstext">Buchungstext</label>
<input type="text" id="neu_buchungstext" name="buchungstext">
<label for="neu_kategorie">Kategorie</label> <label for="neu_kategorie">Kategorie</label>
<select id="neu_kategorie" name="kategorie_id"> <select id="neu_kategorie" name="kategorie_id">
<option value="">– keine –</option> <option value="">– keine –</option>

View file

@ -28,6 +28,7 @@ class RegelmaessigeLoeschenTest extends TestCase
$this->aeltereVonZweienGeloescht(); $this->aeltereVonZweienGeloescht();
$this->beendeteReiheWirdAktiv(); $this->beendeteReiheWirdAktiv();
$this->manuelleBuchungBleibtUnberuehrt(); $this->manuelleBuchungBleibtUnberuehrt();
$this->buchungstextWirdUebernommen();
} }
private function reihe(string $name, string $beginn, ?string $ende = null): int private function reihe(string $name, string $beginn, ?string $ende = null): int
@ -96,4 +97,16 @@ class RegelmaessigeLoeschenTest extends TestCase
$this->assertEquals($vorher, $this->faelligkeit($id), 'Eine freie Buchung ändert keine Fälligkeit'); $this->assertEquals($vorher, $this->faelligkeit($id), 'Eine freie Buchung ändert keine Fälligkeit');
} }
private function buchungstextWirdUebernommen(): void
{
$id = RegelmaessigeBuchung::anlegen([
'name' => 'Mit Text', 'konto_id' => $this->giro, 'betrag' => -10, 'buchungstext' => 'Miete Oktober',
'intervall' => 'monatlich', 'beginn' => '2026-10-01', 'aktiv' => 1,
]);
$this->assertEquals('Miete Oktober', (string)RegelmaessigeBuchung::find($id)['buchungstext'], 'Der Buchungstext wird gespeichert');
$buchung = RegelmaessigeBuchung::buchen($id);
$this->assertEquals('Miete Oktober', (string)Buchung::find($buchung)['buchungstext'], 'Und in die Buchung übernommen');
}
} }