From e1c262c36931801caa5f2744b9bb4ea709f343ca Mon Sep 17 00:00:00 2001 From: fds2610-bot Date: Thu, 4 Jun 2026 16:17:50 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20Buchungsvorlagen-Modal=20=E2=80=93=20Gru?= =?UTF-8?q?ppenunabh=C3=A4ngiges=20Feldrendering=20und=20Komma=20als=20Dez?= =?UTF-8?q?imaltrenner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/static/js/app.js | 7 +- src/Services/VorlageBuchungsService.php | 2 +- src/Views/buchungsvorlagen/modal.php | 165 ++++++++++++------------ src/version.txt | 2 +- 4 files changed, 89 insertions(+), 87 deletions(-) diff --git a/public/static/js/app.js b/public/static/js/app.js index cb668b8..6cd6f03 100644 --- a/public/static/js/app.js +++ b/public/static/js/app.js @@ -524,17 +524,18 @@ document.addEventListener('input', function(e) { if (!inp.matches('#vorlage-modal .vorlage-netto, #vorlage-modal .vorlage-brutto')) return; const row = inp.closest('.vorlage-ust-row'); if (!row) return; + const pDec = v => parseFloat(String(v).replace(',', '.')) || 0; const satz = parseFloat(row.dataset.ustSatz) / 100; const netto = row.querySelector('.vorlage-netto'); const brutto = row.querySelector('.vorlage-brutto'); const ust = row.querySelector('.vorlage-ust'); const ustAnzeige = row.querySelector('.vorlage-ust-anzeige'); if (inp.classList.contains('vorlage-netto')) { - const n = parseFloat(netto.value) || 0; + const n = pDec(netto.value); brutto.value = (n * (1 + satz)).toFixed(2); ust.value = (n * satz).toFixed(2); } else { - const b = parseFloat(brutto.value) || 0; + const b = pDec(brutto.value); const n = b / (1 + satz); netto.value = n.toFixed(2); ust.value = (b - n).toFixed(2); @@ -547,7 +548,7 @@ function vorlageUpdateBruttoGesamt() { const modal = document.getElementById('vorlage-modal'); if (!modal) return; const bruttoFelder = modal.querySelectorAll('.vorlage-brutto'); - const summe = Array.from(bruttoFelder).reduce((s, el) => s + (parseFloat(el.value) || 0), 0); + const summe = Array.from(bruttoFelder).reduce((s, el) => s + (parseFloat(String(el.value).replace(',', '.')) || 0), 0); const anzeige = modal.querySelector('[data-feldname="brutto_gesamt"]'); if (anzeige) anzeige.textContent = summe.toFixed(2).replace('.', ',') + ' €'; } diff --git a/src/Services/VorlageBuchungsService.php b/src/Services/VorlageBuchungsService.php index ad69907..446464b 100644 --- a/src/Services/VorlageBuchungsService.php +++ b/src/Services/VorlageBuchungsService.php @@ -58,7 +58,7 @@ class VorlageBuchungsService continue; } foreach ($regel['buchungen'] as $buchung) { - $betrag = round((float)($inputDaten[$buchung['betrag_ref']] ?? 0), 2); + $betrag = round((float)str_replace(',', '.', (string)($inputDaten[$buchung['betrag_ref']] ?? 0)), 2); if ($betrag == 0.0) { continue; } diff --git a/src/Views/buchungsvorlagen/modal.php b/src/Views/buchungsvorlagen/modal.php index 79e5ea7..9b55cff 100644 --- a/src/Views/buchungsvorlagen/modal.php +++ b/src/Views/buchungsvorlagen/modal.php @@ -2,10 +2,14 @@ declare(strict_types=1); $h = fn($v) => htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); -// Felder nach Gruppen aufteilen -$gruppe1 = array_filter($felder, fn($f) => $f['gruppe_nr'] == 1); -$gruppe2 = array_filter($felder, fn($f) => $f['gruppe_nr'] == 2); -$gruppe3 = array_filter($felder, fn($f) => $f['gruppe_nr'] == 3); +// Felder nach Gruppe_nr sortiert gruppieren (dynamisch, unabhängig von festen Nummern) +$gruppenFelder = []; +foreach ($felder as $feld) { + $gruppenFelder[(int)$feld['gruppe_nr']][] = $feld; +} +ksort($gruppenFelder); + +$gruppenLabel = [1 => 'Belegdaten', 2 => 'Beträge', 3 => 'Zahlung']; // Vorbelegen: Vorlage-Standard-Lieferant hat Vorrang vor Beleg-Lieferant $standardLieferant = trim($vorlage['standard_lieferant'] ?? ''); @@ -44,19 +48,83 @@ if (!$defaultKontoId && !empty($zahlungskonten)) { - - + $felderInGruppe): ?>
-
Belegdaten
- - +
+ +
+ + + + + + + + + + + + + +
SteuerNetto (€)Brutto (€)USt (€)
+ + + + + + + + + + + + + 0,00 + + + + +
+ + +
+
0,00 €
- +
- +
- + -
- - - - -
-
Beträge
- - - - - - - - - - - - - - - - - - - - - +
SteuerNetto (€)Brutto (€)USt (€)
- - - - - 0,00 - -
+
- - - - -
-
Zahlung
- - -
- - -
- - -
- + diff --git a/src/version.txt b/src/version.txt index 4be5dc2..4d21510 100644 --- a/src/version.txt +++ b/src/version.txt @@ -1 +1 @@ -1-260601 +1-260604