Stückzahl-Feld: Formular, Rechnungsvorschau, PDF
This commit is contained in:
15
app.py
15
app.py
@@ -30,6 +30,7 @@ DEFAULT_VALUES = {
|
|||||||
'arbeitszeit': 0,
|
'arbeitszeit': 0,
|
||||||
'stundenlohn': 25,
|
'stundenlohn': 25,
|
||||||
'gewinnmarge': 20,
|
'gewinnmarge': 20,
|
||||||
|
'stueckzahl': 1,
|
||||||
'rechnungsnummer': '',
|
'rechnungsnummer': '',
|
||||||
'datum': datetime.now().strftime('%Y-%m-%d'),
|
'datum': datetime.now().strftime('%Y-%m-%d'),
|
||||||
'dark_mode': False,
|
'dark_mode': False,
|
||||||
@@ -153,6 +154,10 @@ def invoice_pdf():
|
|||||||
data = request.form
|
data = request.form
|
||||||
config = load_config()
|
config = load_config()
|
||||||
calc = calculate(config)
|
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_brutto = round(gesamt_netto + gesamt_mwst, 2)
|
||||||
|
|
||||||
pdf = FPDF()
|
pdf = FPDF()
|
||||||
pdf.add_page()
|
pdf.add_page()
|
||||||
@@ -176,18 +181,18 @@ def invoice_pdf():
|
|||||||
pdf.cell(0, 8, "Leistungsbeschreibung:", ln=True)
|
pdf.cell(0, 8, "Leistungsbeschreibung:", ln=True)
|
||||||
pdf.set_font("Arial", "", 11)
|
pdf.set_font("Arial", "", 11)
|
||||||
pdf.cell(100, 8, f"3D-Druck: {config.get('projektName', '')}")
|
pdf.cell(100, 8, f"3D-Druck: {config.get('projektName', '')}")
|
||||||
pdf.cell(30, 8, "1", align='R')
|
pdf.cell(30, 8, str(stueckzahl), align='R')
|
||||||
pdf.cell(30, 8, f"{calc['verkaufspreis']:.2f} EUR", align='R')
|
pdf.cell(30, 8, f"{calc['verkaufspreis']:.2f} EUR", align='R')
|
||||||
pdf.cell(30, 8, f"{calc['verkaufspreis']:.2f} EUR", ln=True, align='R')
|
pdf.cell(30, 8, f"{gesamt_netto:.2f} EUR", ln=True, align='R')
|
||||||
pdf.ln(10)
|
pdf.ln(10)
|
||||||
|
|
||||||
pdf.cell(130, 6, "Nettobetrag:")
|
pdf.cell(130, 6, "Nettobetrag:")
|
||||||
pdf.cell(60, 6, f"{calc['verkaufspreis']:.2f} EUR", ln=True, align='R')
|
pdf.cell(60, 6, f"{gesamt_netto:.2f} EUR", ln=True, align='R')
|
||||||
pdf.cell(130, 6, "MwSt. (19%):")
|
pdf.cell(130, 6, "MwSt. (19%):")
|
||||||
pdf.cell(60, 6, f"{calc['mwst']:.2f} EUR", ln=True, align='R')
|
pdf.cell(60, 6, f"{gesamt_mwst:.2f} EUR", ln=True, align='R')
|
||||||
pdf.set_font("Arial", "B", 12)
|
pdf.set_font("Arial", "B", 12)
|
||||||
pdf.cell(130, 8, "GESAMTBETRAG:")
|
pdf.cell(130, 8, "GESAMTBETRAG:")
|
||||||
pdf.cell(60, 8, f"{calc['gesamt_brutto']:.2f} EUR", ln=True, align='R')
|
pdf.cell(60, 8, f"{gesamt_brutto:.2f} EUR", ln=True, align='R')
|
||||||
|
|
||||||
pdf.ln(10)
|
pdf.ln(10)
|
||||||
pdf.set_font("Arial", "", 10)
|
pdf.set_font("Arial", "", 10)
|
||||||
|
|||||||
@@ -115,10 +115,14 @@
|
|||||||
<div class="card mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header"><i class="ti ti-currency-euro me-2"></i>Gewinnmarge</div>
|
<div class="card-header"><i class="ti ti-currency-euro me-2"></i>Gewinnmarge</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="mb-0">
|
<div class="mb-3">
|
||||||
<label class="form-label">Gewinnmarge (%)</label>
|
<label class="form-label">Gewinnmarge (%)</label>
|
||||||
<input type="number" step="0.5" class="form-control" data-var="gewinnmarge" data-type="number" value="{{ config.gewinnmarge }}">
|
<input type="number" step="0.5" class="form-control" data-var="gewinnmarge" data-type="number" value="{{ config.gewinnmarge }}">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="mb-0">
|
||||||
|
<label class="form-label">Stuckzahl</label>
|
||||||
|
<input type="number" step="1" min="1" class="form-control" data-var="stueckzahl" data-type="number" value="{{ config.stueckzahl }}">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -64,18 +64,22 @@
|
|||||||
<div class="card mb-3">
|
<div class="card mb-3">
|
||||||
<div class="card-header"><i class="ti ti-eye me-2"></i>Vorschau</div>
|
<div class="card-header"><i class="ti ti-eye me-2"></i>Vorschau</div>
|
||||||
<div class="card-body p-0">
|
<div class="card-body p-0">
|
||||||
|
{% 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_brutto = (gesamt_netto + gesamt_mwst)|round(2) %}
|
||||||
<div class="p-3" style="font-family:'Courier New',Courier,monospace;font-size:13px;line-height:1.8;white-space:pre;overflow-x:auto;background:var(--tblr-bg-surface);">LEISTUNGSBESCHREIBUNG:
|
<div class="p-3" style="font-family:'Courier New',Courier,monospace;font-size:13px;line-height:1.8;white-space:pre;overflow-x:auto;background:var(--tblr-bg-surface);">LEISTUNGSBESCHREIBUNG:
|
||||||
{{ '\u2500' * 50 }}
|
{{ '\u2500' * 50 }}
|
||||||
Position: 3D-Druck - {{ config.projektName }}
|
Position: 3D-Druck - {{ config.projektName }}
|
||||||
Menge: 1
|
Menge: {{ stueckzahl }}
|
||||||
Einzelpreis: {{ "%.2f"|format(calc.verkaufspreis) }} EUR
|
Einzelpreis: {{ "%.2f"|format(calc.verkaufspreis) }} EUR
|
||||||
Gesamt: {{ "%.2f"|format(calc.verkaufspreis) }} EUR
|
Gesamt: {{ "%.2f"|format(gesamt_netto) }} EUR
|
||||||
|
|
||||||
{{ '\u2500' * 50 }}
|
{{ '\u2500' * 50 }}
|
||||||
Nettobetrag: {{ "%.2f"|format(calc.verkaufspreis) }} EUR
|
Nettobetrag: {{ "%.2f"|format(gesamt_netto) }} EUR
|
||||||
MwSt. (19%): {{ "%.2f"|format(calc.mwst) }} EUR
|
MwSt. (19%): {{ "%.2f"|format(gesamt_mwst) }} EUR
|
||||||
{{ '\u2550' * 50 }}
|
{{ '\u2550' * 50 }}
|
||||||
GESAMTBETRAG: {{ "%.2f"|format(calc.gesamt_brutto) }} EUR
|
GESAMTBETRAG: {{ "%.2f"|format(gesamt_brutto) }} EUR
|
||||||
|
|
||||||
Zahlbar innerhalb von 14 Tagen ohne Abzug.
|
Zahlbar innerhalb von 14 Tagen ohne Abzug.
|
||||||
Vielen Dank fur Ihren Auftrag!</div>
|
Vielen Dank fur Ihren Auftrag!</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user