diff --git a/src/Views/belege/detail.php b/src/Views/belege/detail.php index afc9d49..45962db 100644 --- a/src/Views/belege/detail.php +++ b/src/Views/belege/detail.php @@ -333,7 +333,7 @@ $suppliers = $suppliers ?? [];
- @@ -416,10 +416,12 @@ $suppliers = $suppliers ?? [];
- + class="" + oninput="updateNettoAnzeige()"> +

@@ -506,6 +508,7 @@ document.addEventListener('DOMContentLoaded', function() { if (checked) filterKategorieKonten(checked.value); updateSteuerartVisibility(); updateEigenanteilState(); + updateNettoAnzeige(); // Leeres Lieferantenfeld fokussieren wenn kein KI-Block aktiv const sup = document.getElementById('supplier-persistent-input'); @@ -526,6 +529,26 @@ function updateSteuerartVisibility() { } updateEigenanteilState(); } + +function updateNettoAnzeige() { + const nettoEl = document.getElementById('betrag_netto_input'); + const ustEl = document.getElementById('ust_satz_select'); + const anzeige = document.getElementById('ust_brutto_anzeige'); + if (!nettoEl || !ustEl || !anzeige) return; + + const netto = parseFloat(nettoEl.value); + if (isNaN(netto) || nettoEl.value === '') { + anzeige.textContent = ''; + return; + } + + const ustSatz = parseFloat(ustEl.value) || 0; + const ust = Math.round(netto * ustSatz / 100 * 100) / 100; + const brutto = Math.round((netto + ust) * 100) / 100; + + const fmt = v => v.toLocaleString('de-DE', {minimumFractionDigits: 2, maximumFractionDigits: 2}) + ' €'; + anzeige.innerHTML = 'USt. ' + fmt(ust) + '  ·  Brutto ' + fmt(brutto); +} @@ -554,7 +577,7 @@ function _applyKiVorschlag(v) { _selectById(zhlEl2, v.zahlungskonto_id); if (zhlEl2) transferKontoNr(zhlEl2); const netEl = document.querySelector('input[name="betrag_netto"]'); - if (netEl && v.betrag_netto) netEl.value = v.betrag_netto; + if (netEl && v.betrag_netto) { netEl.value = v.betrag_netto; updateNettoAnzeige(); } const txtEl = document.querySelector('input[name="buchungstext"]'); if (txtEl && v.buchungstext) txtEl.value = v.buchungstext; diff --git a/tests/14_UstBruttoAnzeigeTest.php b/tests/14_UstBruttoAnzeigeTest.php new file mode 100644 index 0000000..d793b5b --- /dev/null +++ b/tests/14_UstBruttoAnzeigeTest.php @@ -0,0 +1,57 @@ +assert( + $content !== false, + 'View-Datei belege/detail.php ist lesbar' + ); + + $this->assert( + str_contains($content, 'id="betrag_netto_input"'), + 'Nettobetrag-Input hat id="betrag_netto_input"' + ); + + $this->assert( + str_contains($content, 'id="ust_brutto_anzeige"'), + 'Anzeigebereich id="ust_brutto_anzeige" vorhanden' + ); + + $this->assert( + str_contains($content, 'oninput="updateNettoAnzeige()"'), + 'Nettobetrag-Input ruft updateNettoAnzeige() bei Eingabe auf' + ); + + $this->assert( + str_contains($content, 'function updateNettoAnzeige()'), + 'JavaScript-Funktion updateNettoAnzeige() ist definiert' + ); + + $this->assert( + str_contains($content, 'updateNettoAnzeige();updateNettoAnzeige()') === false + && str_contains($content, 'updateNettoAnzeige()'), + 'updateNettoAnzeige() wird an mehreren Stellen aufgerufen' + ); + + // Prüfe dass USt-Satz-Änderung auch updateNettoAnzeige aufruft + $this->assert( + str_contains($content, 'updateSteuerartVisibility();updateNettoAnzeige()'), + 'USt-Satz-Änderung löst auch updateNettoAnzeige() aus' + ); + } +}