fix: Final-Review A14 – Beispielbetrag ersetzt, Vorzeichen-Hinweis Neuer Betrag, Laufzeit max 1200, Mermaid
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -179,7 +179,7 @@ sequenceDiagram
|
||||
IM->>IM: _find_or_create_account(bank, iban)
|
||||
IM->>DB: INSERT Statement(status="draft")
|
||||
|
||||
opt Saldo pruefbar (PDF immer; CSV nur VR: balance_checkable=True)
|
||||
opt Saldo pruefbar (PDF immer, CSV nur VR: balance_checkable=True)
|
||||
IM->>VA: balance_difference(parsed)
|
||||
Note right of IM: Differenz != 0 -> Statement.status="error", Abbruch
|
||||
end
|
||||
|
||||
@@ -40,7 +40,16 @@
|
||||
var form = select.closest('form');
|
||||
var art = select.value;
|
||||
var mitWert = Object.prototype.hasOwnProperty.call(WERT_LABEL, art);
|
||||
sperren(feld(form, 'value'), !mitWert);
|
||||
var wert = feld(form, 'value');
|
||||
sperren(wert, !mitWert);
|
||||
if (art === 'set') {
|
||||
// Vorzeichenfalle: Ausgaben sind negativ (wie Fixposten-Beträge).
|
||||
wert.placeholder = '-250,00';
|
||||
wert.title = 'Neuer Betrag mit Vorzeichen (Ausgabe negativ)';
|
||||
if (wert.value === '0') { wert.value = ''; }
|
||||
} else {
|
||||
wert.removeAttribute('placeholder');
|
||||
}
|
||||
beschriften(form, 'value-label', mitWert ? WERT_LABEL[art] : 'Wert');
|
||||
sperren(feld(form, 'start_date'), art === 'ende');
|
||||
beschriften(form, 'bis-label', art === 'ende' ? 'Endet am' : 'Gültig bis');
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
<label>Name <input type="text" name="name" value="{{ l.name }}" required></label>
|
||||
<label>Darlehenssumme <input type="text" name="principal" data-type="amount" value="{{ l.principal|eur }}" required></label>
|
||||
<label>Zins p.a. (%) <input type="text" name="annual_rate_pct" data-type="amount" value="{{ l.annual_rate_pct|eur }}" required></label>
|
||||
<label>Laufzeit (Monate) <input type="number" name="term_months" data-type="int" min="1" value="{{ l.term_months }}" required></label>
|
||||
<label>Laufzeit (Monate) <input type="number" name="term_months" data-type="int" min="1" max="1200" value="{{ l.term_months }}" required></label>
|
||||
<label>Auszahlungsdatum <input type="date" name="payout_date" value="{{ l.payout_date.isoformat() }}" required></label>
|
||||
<label>Tilgungsart
|
||||
<select name="repayment_type" data-type="str">
|
||||
@@ -254,7 +254,7 @@
|
||||
<label>Name <input type="text" name="name" required></label>
|
||||
<label>Darlehenssumme <input type="text" name="principal" data-type="amount" placeholder="10000,00" required></label>
|
||||
<label>Zins p.a. (%) <input type="text" name="annual_rate_pct" data-type="amount" placeholder="4,5" required></label>
|
||||
<label>Laufzeit (Monate) <input type="number" name="term_months" data-type="int" min="1" required></label>
|
||||
<label>Laufzeit (Monate) <input type="number" name="term_months" data-type="int" min="1" max="1200" required></label>
|
||||
<label>Auszahlungsdatum <input type="date" name="payout_date" required></label>
|
||||
<label>Tilgungsart
|
||||
<select name="repayment_type" data-type="str">
|
||||
|
||||
@@ -75,6 +75,16 @@ test('Neuer Betrag: Ziel-Typ fest auf Posten, Kategorie gesperrt', { skip: !JSDO
|
||||
assert.equal(typ.querySelector('option[value="category"]').disabled, false);
|
||||
});
|
||||
|
||||
test('Neuer Betrag: Vorzeichen-Hinweis als Platzhalter und Tooltip', { skip: !JSDOM }, () => {
|
||||
const { w, a } = load();
|
||||
art(w, a, 'set');
|
||||
assert.equal(f(a, 'value').placeholder, '-250,00');
|
||||
assert.ok(f(a, 'value').title.includes('Vorzeichen'));
|
||||
art(w, a, 'percent');
|
||||
assert.equal(f(a, 'value').placeholder, '');
|
||||
assert.equal(f(a, 'value').hasAttribute('title'), false);
|
||||
});
|
||||
|
||||
test('Ende: Gültig ab und Wert gesperrt, Label Endet am', { skip: !JSDOM }, () => {
|
||||
const { w, a } = load();
|
||||
art(w, a, 'ende');
|
||||
|
||||
@@ -705,3 +705,13 @@ def test_szenario_eintraege_zeitraum_und_wiederkehrend(client, db):
|
||||
assert f'hx-delete="/api/scenarios/{sc.id}/recurring/' in r
|
||||
assert "Kat-Anzeige" in r and "Zahlung-E" in r
|
||||
assert 'id="sri-row-' in r and 'id="sri-edit-' in r
|
||||
|
||||
|
||||
def test_planung_laufzeit_felder_haben_max_1200(client, db):
|
||||
client.post("/login", data={"username": "admin", "password": "geheim"})
|
||||
db.add(Loan(name="MaxL", principal=Decimal("1000.00"),
|
||||
annual_rate_pct=Decimal("4.50"), term_months=12,
|
||||
payout_date=date(2026, 8, 1), repayment_type="annuity"))
|
||||
db.commit()
|
||||
r = client.get("/planung").text
|
||||
assert r.count('max="1200"') >= 2
|
||||
|
||||
Reference in New Issue
Block a user