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->>IM: _find_or_create_account(bank, iban)
|
||||||
IM->>DB: INSERT Statement(status="draft")
|
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)
|
IM->>VA: balance_difference(parsed)
|
||||||
Note right of IM: Differenz != 0 -> Statement.status="error", Abbruch
|
Note right of IM: Differenz != 0 -> Statement.status="error", Abbruch
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -40,7 +40,16 @@
|
|||||||
var form = select.closest('form');
|
var form = select.closest('form');
|
||||||
var art = select.value;
|
var art = select.value;
|
||||||
var mitWert = Object.prototype.hasOwnProperty.call(WERT_LABEL, art);
|
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');
|
beschriften(form, 'value-label', mitWert ? WERT_LABEL[art] : 'Wert');
|
||||||
sperren(feld(form, 'start_date'), art === 'ende');
|
sperren(feld(form, 'start_date'), art === 'ende');
|
||||||
beschriften(form, 'bis-label', art === 'ende' ? 'Endet am' : 'Gültig bis');
|
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>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>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>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>Auszahlungsdatum <input type="date" name="payout_date" value="{{ l.payout_date.isoformat() }}" required></label>
|
||||||
<label>Tilgungsart
|
<label>Tilgungsart
|
||||||
<select name="repayment_type" data-type="str">
|
<select name="repayment_type" data-type="str">
|
||||||
@@ -254,7 +254,7 @@
|
|||||||
<label>Name <input type="text" name="name" required></label>
|
<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>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>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>Auszahlungsdatum <input type="date" name="payout_date" required></label>
|
||||||
<label>Tilgungsart
|
<label>Tilgungsart
|
||||||
<select name="repayment_type" data-type="str">
|
<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);
|
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 }, () => {
|
test('Ende: Gültig ab und Wert gesperrt, Label Endet am', { skip: !JSDOM }, () => {
|
||||||
const { w, a } = load();
|
const { w, a } = load();
|
||||||
art(w, a, 'ende');
|
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 f'hx-delete="/api/scenarios/{sc.id}/recurring/' in r
|
||||||
assert "Kat-Anzeige" in r and "Zahlung-E" in r
|
assert "Kat-Anzeige" in r and "Zahlung-E" in r
|
||||||
assert 'id="sri-row-' in r and 'id="sri-edit-' 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