diff --git a/Changes.md b/Changes.md index cf4bde8..0fc1276 100644 --- a/Changes.md +++ b/Changes.md @@ -2,6 +2,13 @@ --- +## 2026-07-27 – Feature: Netto/Brutto-Umschalter in der Buchungsmaske (Issue #137) + +- Beim Erfassen einer Buchung musste bisher immer der Nettobetrag eingegeben werden – lag nur der Bruttobetrag vor (z. B. von einem Kassenbon), führte die manuelle Rückrechnung regelmäßig zu Rundungsdifferenzen. +- **`src/Views/belege/detail.php`:** Das Label „Nettobetrag (€)" wurde durch zwei Umschalt-Buttons „NETTOBETRAG (€)" / „BRUTTOBETRAG (€)" ersetzt (`setBetragModus()`); der jeweils aktive Button ist optisch eingedrückt hervorgehoben und bestimmt, wie der eingegebene Betrag interpretiert wird. Die Live-Anzeige (`updateNettoAnzeige()`) zeigt je nach Modus die jeweils fehlenden Werte (Netto/USt. bzw. USt./Brutto) an. Beim Absenden des Formulars wird ein im Brutto-Modus eingegebener Betrag serverseitig weiterhin als Nettobetrag benötigt – die Umrechnung erfolgt daher unmittelbar vor dem Submit per JavaScript, sodass Backend (`BookingController`, `Models/Booking.php`) unverändert bleibt. +- **`public/static/css/app.css`:** Neue Klasse `.betrag-modus-btn` (inkl. `.active`-Zustand) für den Umschalter. +- **`tests/61_BetragModusToggleTest.php`:** Neuer Test prüft Vorhandensein der Umschalt-Buttons, der zugehörigen JS-Funktionen sowie der Umrechnung vor dem Absenden. + ## 2026-07-27 – Feature: Lieferanten-Typeahead in der Belegliste (Issue #138) - Beim Klick in die Spalte „Lieferant" der Belegliste (Inline-Bearbeitung) gab es bisher nur ein freies Textfeld – Lieferanten konnten dadurch versehentlich mit unterschiedlicher Schreibweise mehrfach angelegt werden. diff --git a/docs/funktionen.md b/docs/funktionen.md index 98e114e..f13cdce 100644 --- a/docs/funktionen.md +++ b/docs/funktionen.md @@ -24,6 +24,7 @@ Vollständige Kontenliste: [kontenrahmen.md](kontenrahmen.md) EÜR-Buchungsmodell (Einnahme/Ausgabe) mit Kategorie- und Zahlungskonto. +- **Netto-/Brutto-Umschalter**: Der Betrag kann in der Buchungsmaske wahlweise als Netto- oder Bruttobetrag eingegeben werden (Umschalt-Buttons oberhalb des Betragsfelds); der jeweils aktive Button bestimmt die Interpretation. Vermeidet manuelle Rundungsdifferenzen bei bekanntem Bruttobetrag. - **Steuerarten** für Auslandsumsätze: Inland, steuerfreie ig. Lieferung (Kz 41), steuerfreie Ausfuhr (Kz 44), ig. Erwerb 19 % (Kz 89/91), ig. Erwerb 7 % (Kz 93/94) - **Bewirtungsausgaben**: automatischer Split 70 %/30 % bei Konten 4650, 4651, 4652 - **Eigenanteil** (30 %) bei Telefon/Internet (Konten 4920/4925): optional zubuchbar diff --git a/public/static/css/app.css b/public/static/css/app.css index cf3c0f3..ddaa19d 100644 --- a/public/static/css/app.css +++ b/public/static/css/app.css @@ -212,6 +212,27 @@ img { max-width: 100%; } /* ── Forms ───────────────────────────────────────────────────── */ .form-group { margin-bottom: 1rem; } +.betrag-modus-btn { + padding: .35rem .7rem; + font-size: .75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: .04em; + border: 1px solid var(--color-border); + background: var(--color-surface); + color: var(--color-muted); + border-radius: var(--radius); + cursor: pointer; + transition: background .15s, color .15s, border-color .15s, box-shadow .15s; +} +.betrag-modus-btn:hover { background: var(--color-bg); } +.betrag-modus-btn.active { + background: var(--color-primary); + color: #fff; + border-color: var(--color-primary); + box-shadow: inset 0 1px 3px rgba(0,0,0,.3); +} + label { display: block; font-size: .8rem; diff --git a/src/Views/belege/detail.php b/src/Views/belege/detail.php index b2c46a0..a4f34d0 100644 --- a/src/Views/belege/detail.php +++ b/src/Views/belege/detail.php @@ -430,7 +430,7 @@ $suppliers = $suppliers ?? []; -