From 82ffb6092591ee287580d30dc575a5f393ba3d28 Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Thu, 27 Aug 2026 23:05:31 +0200 Subject: [PATCH] changes to the rechnung --- Website/modules/emailservice/email.py | 40 +++++++++++++++------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/Website/modules/emailservice/email.py b/Website/modules/emailservice/email.py index f341c86..217cd5f 100644 --- a/Website/modules/emailservice/email.py +++ b/Website/modules/emailservice/email.py @@ -358,13 +358,9 @@ def generate_invoice_fpdf( date: str, software_name: str, output_path: str, - invoice_number: str = "RE-2026-08-001", # Fortlaufende Rechnungsnummer - delivery_date: str = "Entspricht Rechnungsdatum", - issuer_name: str = "Invario GmbH", - issuer_address: str = "Musterstraße 1\n12345 Musterstadt", - issuer_tax_id: str = "USt-IdNr.: DE123456789" + invoice_number: str = "RE-2026-08-001" ): - """Erstellt eine rechtssichere Rechnung inkl. aller Pflichtangaben mittels FPDF2.""" + """Erstellt eine rechtssichere Rechnung inkl. SELLER_INFO Daten mittels FPDF2.""" # 1. Beträge berechnen (Annahme: übergebener Preis ist Brutto) try: @@ -378,12 +374,12 @@ def generate_invoice_fpdf( pdf = FPDF() pdf.add_page() - # 2. Kopfzeile: Aussteller-Informationen (Rechtsbündig) + # 2. Kopfzeile: Aussteller-Informationen aus SELLER_INFO (Rechtsbündig) pdf.set_font("Helvetica", size=9) - pdf.cell(0, 5, f"{issuer_name}", new_x="LMARGIN", new_y="NEXT", align="R") - for line in issuer_address.split('\n'): - pdf.cell(0, 5, line, new_x="LMARGIN", new_y="NEXT", align="R") - pdf.cell(0, 5, issuer_tax_id, new_x="LMARGIN", new_y="NEXT", align="R") + pdf.cell(0, 5, f"{SELLER_INFO['company_name']} - {SELLER_INFO['sub_title']}", new_x="LMARGIN", new_y="NEXT", align="R") + pdf.cell(0, 5, SELLER_INFO['street'], new_x="LMARGIN", new_y="NEXT", align="R") + pdf.cell(0, 5, SELLER_INFO['zip_city'], new_x="LMARGIN", new_y="NEXT", align="R") + pdf.cell(0, 5, f"St.-Nr.: {SELLER_INFO['tax_number']} | USt-IdNr.: {SELLER_INFO['vat_id']}", new_x="LMARGIN", new_y="NEXT", align="R") pdf.ln(10) # 3. Empfänger-Informationen (Linksbündig) @@ -396,9 +392,9 @@ def generate_invoice_fpdf( pdf.set_font("Helvetica", style="B", size=16) pdf.cell(0, 10, "Rechnung", new_x="LMARGIN", new_y="NEXT") pdf.set_font("Helvetica", size=10) - pdf.cell(0, 5, f"Rechnungsnummer: {invoice_number}", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 5, f"Rechnungsnummer: {invoice_number} (Fortlaufend)", new_x="LMARGIN", new_y="NEXT") pdf.cell(0, 5, f"Rechnungsdatum: {date}", new_x="LMARGIN", new_y="NEXT") - pdf.cell(0, 5, f"Liefer-/Leistungszeitpunkt: {delivery_date}", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 5, "Liefer-/Leistungszeitraum: Entspricht Rechnungsdatum", new_x="LMARGIN", new_y="NEXT") pdf.ln(10) # 5. Positionen (Tabellenkopf) @@ -424,7 +420,6 @@ def generate_invoice_fpdf( pdf.cell(35, 8, "zzgl. 19% USt.:", align="R") pdf.cell(35, 8, f"{mwst:.2f} EUR", new_x="LMARGIN", new_y="NEXT", align="R") - # Skonto / Minderungen (als Platzhalter bei 0) pdf.cell(35, 8, "Abzüglich Skonto:", align="R") pdf.cell(35, 8, "0.00 EUR", new_x="LMARGIN", new_y="NEXT", align="R") @@ -432,12 +427,21 @@ def generate_invoice_fpdf( pdf.cell(35, 10, "Gesamtbetrag (Brutto):", align="R") pdf.cell(35, 10, f"{brutto:.2f} EUR", new_x="LMARGIN", new_y="NEXT", align="R") - # 7. Zahlungsbedingungen / Footer + # 7. Zahlungsbedingungen, Bankverbindung & Footer pdf.set_left_margin(10) # Rand zurücksetzen pdf.ln(10) pdf.set_font("Helvetica", size=10) - pdf.cell(0, 5, "Bitte überweisen Sie den fälligen Betrag innerhalb von 14 Tagen ohne Abzüge auf das unten", new_x="LMARGIN", new_y="NEXT") - pdf.cell(0, 5, "angegebene Konto. Es wurde keine Minderung im Voraus vereinbart.", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 5, "Bitte überweisen Sie den fälligen Bruttobetrag innerhalb von 14 Tagen unter Angabe der", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 5, f"Rechnungsnummer ({invoice_number}) auf unser unten angegebenes Bankkonto. Es wurde kein Skonto vereinbart.", new_x="LMARGIN", new_y="NEXT") + pdf.ln(5) + + # Bankinformationen Block aus SELLER_INFO + pdf.set_font("Helvetica", style="B", size=10) + pdf.cell(0, 5, "Bankverbindung für Ihre Überweisung:", new_x="LMARGIN", new_y="NEXT") + pdf.set_font("Helvetica", size=10) + pdf.cell(0, 5, f"Bankinstitut: {SELLER_INFO['bank_name']}", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 5, f"IBAN: {SELLER_INFO['iban']}", new_x="LMARGIN", new_y="NEXT") + pdf.cell(0, 5, f"BIC: {SELLER_INFO['bic']}", new_x="LMARGIN", new_y="NEXT") # Speichern pdf.output(output_path) @@ -472,7 +476,7 @@ def send_accreditation_email( output_path=contract_pdf_path ) - # 1b. Rechnung dynamisch mit FPDF erzeugen inkl. Pflichtangaben + # 1b. Rechnung dynamisch mit FPDF erzeugen inkl. SELLER_INFO generated_invoice_path = None if not invoice_path: invoice_filename = f"Rechnung_Invario_{safe_school_name}.pdf"