diff --git a/app.py b/app.py index f586255..19a16eb 100644 --- a/app.py +++ b/app.py @@ -31,6 +31,7 @@ DEFAULT_VALUES = { 'stundenlohn': 25, 'gewinnmarge': 20, 'stueckzahl': 1, + 'mwst_ausweisen': False, 'rechnungsnummer': '', 'datum': datetime.now().strftime('%Y-%m-%d'), 'dark_mode': False, @@ -89,7 +90,8 @@ def calculate(data): gesamtkosten_netto = materialkosten + stromkosten + abschreibung + arbeitskosten gewinn = gesamtkosten_netto * (float(data.get('gewinnmarge', 0)) / 100) verkaufspreis = gesamtkosten_netto + gewinn - mwst = verkaufspreis * 0.19 + mwst_ausweisen = str(data.get('mwst_ausweisen', '')).lower() in ('true', '1', 'yes') + mwst = verkaufspreis * 0.19 if mwst_ausweisen else 0 gesamt_brutto = verkaufspreis + mwst material_preis_pro_kg = float(data.get('materialPreisProKg', 0)) @@ -103,6 +105,7 @@ def calculate(data): 'gewinn': round(gewinn, 2), 'verkaufspreis': round(verkaufspreis, 2), 'mwst': round(mwst, 2), + 'mwst_ausweisen': mwst_ausweisen, 'gesamt_brutto': round(gesamt_brutto, 2), 'druckzeit_stunden': round(druckzeit_stunden, 2), 'material_kg': round(material_kg, 3), @@ -169,7 +172,7 @@ def invoice_pdf(): calc = calculate(config) stueckzahl = int(config.get('stueckzahl', 1)) gesamt_netto = round(calc['verkaufspreis'] * stueckzahl, 2) - gesamt_mwst = round(gesamt_netto * 0.19, 2) + gesamt_mwst = round(gesamt_netto * 0.19, 2) if calc.get('mwst_ausweisen') else 0 gesamt_brutto = round(gesamt_netto + gesamt_mwst, 2) pdf = FPDF() @@ -201,10 +204,14 @@ def invoice_pdf(): pdf.cell(130, 6, "Nettobetrag:") pdf.cell(60, 6, f"{gesamt_netto:.2f} EUR", ln=True, align='R') - pdf.cell(130, 6, "MwSt. (19%):") - pdf.cell(60, 6, f"{gesamt_mwst:.2f} EUR", ln=True, align='R') + if calc.get('mwst_ausweisen'): + pdf.cell(130, 6, "MwSt. (19%):") + pdf.cell(60, 6, f"{gesamt_mwst:.2f} EUR", ln=True, align='R') pdf.set_font("Arial", "B", 12) - pdf.cell(130, 8, "GESAMTBETRAG:") + if calc.get('mwst_ausweisen'): + pdf.cell(130, 8, "GESAMTBETRAG (brutto):") + else: + pdf.cell(130, 8, "GESAMTBETRAG:") pdf.cell(60, 8, f"{gesamt_brutto:.2f} EUR", ln=True, align='R') pdf.ln(10) @@ -240,9 +247,10 @@ def export(): f"Gesamtkosten: {calc['gesamtkosten_netto']:.2f} EUR", f"Gewinn: {calc['gewinn']:.2f} EUR", f"Verkaufspreis (netto): {calc['verkaufspreis']:.2f} EUR", - f"MwSt. (19%): {calc['mwst']:.2f} EUR", - f"GESAMTPREIS (brutto): {calc['gesamt_brutto']:.2f} EUR", ] + if calc.get('mwst_ausweisen'): + lines.append(f"MwSt. (19%): {calc['mwst']:.2f} EUR") + lines.append(f"GESAMTPREIS: {calc['gesamt_brutto']:.2f} EUR") text = '\n'.join(lines) return send_file( diff --git a/static/script.js b/static/script.js index 93860ca..58b0ff6 100644 --- a/static/script.js +++ b/static/script.js @@ -17,6 +17,7 @@ function getFormData() { const type = el.dataset.type || 'text'; let val = el.value; if (type === 'number') val = parseFloat(val) || 0; + else if (type === 'checkbox') val = el.checked; data[key] = val; }); data.dark_mode = document.documentElement.getAttribute('data-bs-theme') === 'dark'; @@ -52,10 +53,12 @@ function renderResult(calc) { `Gewinn (${((document.querySelector('[data-var="gewinnmarge"]')?.value) || 20)}%): ${String(calc.gewinn.toFixed(2)).padStart(10)} EUR`, `${'\u2500'.repeat(40)}`, `Verkaufspreis (netto): ${String(calc.verkaufspreis.toFixed(2)).padStart(10)} EUR`, - `MwSt. (19%): ${String(calc.mwst.toFixed(2)).padStart(10)} EUR`, - `${'\u2550'.repeat(40)}`, - `GESAMT (brutto): ${String(calc.gesamt_brutto.toFixed(2)).padStart(10)} EUR`, ]; + if (calc.mwst_ausweisen) { + lines.push(`MwSt. (19%): ${String(calc.mwst.toFixed(2)).padStart(10)} EUR`); + } + lines.push(`${'\u2550'.repeat(40)}`); + lines.push(`GESAMT: ${String(calc.gesamt_brutto.toFixed(2)).padStart(10)} EUR`); document.getElementById('result-text').textContent = lines.join('\n'); const details = [ diff --git a/templates/invoice.html b/templates/invoice.html index 8ad5e72..0fc7d5e 100644 --- a/templates/invoice.html +++ b/templates/invoice.html @@ -71,7 +71,7 @@
{% set stueckzahl = config.stueckzahl|default(1)|int %} {% set gesamt_netto = (calc.verkaufspreis * stueckzahl)|round(2) %} - {% set gesamt_mwst = (gesamt_netto * 0.19)|round(2) %} + {% set gesamt_mwst = (gesamt_netto * 0.19)|round(2) if calc.mwst_ausweisen else 0 %} {% set gesamt_brutto = (gesamt_netto + gesamt_mwst)|round(2) %}
LEISTUNGSBESCHREIBUNG: {{ '\u2500' * 50 }} @@ -82,9 +82,9 @@ Gesamt: {{ "%.2f"|format(gesamt_netto) }} EUR {{ '\u2500' * 50 }} Nettobetrag: {{ "%.2f"|format(gesamt_netto) }} EUR -MwSt. (19%): {{ "%.2f"|format(gesamt_mwst) }} EUR -{{ '\u2550' * 50 }} -GESAMTBETRAG: {{ "%.2f"|format(gesamt_brutto) }} EUR +{% if calc.mwst_ausweisen %}MwSt. (19%): {{ "%.2f"|format(gesamt_mwst) }} EUR +{% endif %}{{ '\u2550' * 50 }} +GESAMTBETRAG{% if calc.mwst_ausweisen %} (brutto){% endif %}: {{ "%.2f"|format(gesamt_brutto) }} EUR Zahlbar innerhalb von 14 Tagen ohne Abzug. Vielen Dank fur Ihren Auftrag!
diff --git a/templates/settings.html b/templates/settings.html index e1d1dec..c850efd 100644 --- a/templates/settings.html +++ b/templates/settings.html @@ -75,13 +75,19 @@
-
Gewinnmarge
+
Gewinnmarge & Steuer
+
+ +