diff --git a/invoice_logic.py b/invoice_logic.py index 99b6e47..b00d886 100644 --- a/invoice_logic.py +++ b/invoice_logic.py @@ -458,14 +458,36 @@ def sanitize_filename_part(value): return s.strip("-_") -def build_export_basename(invoice_number, recipient_name, invoice_date): - """Dateiname-Basis fuer die Exporte: '__'. - Leere Teile werden weggelassen (kein '__'); ist alles leer, bleibt 'Rechnung'.""" - date_norm = parse_to_strict_xml_date(invoice_date) or str(invoice_date or "").strip() +# Maximale Laenge des Empfaengernamens im Dateinamen - lange Kundennamen wuerden ihn sonst +# unhandlich machen. +EXPORT_RECIPIENT_MAX_LEN = 15 + +# Bearbeiter-Kopfzeile hat die Form ' / ', z.B. 'Ulrika Grossmann / 5634'. +_BEARBEITER_NUMBER_PATTERN = re.compile(r"/\s*([A-Za-z0-9][A-Za-z0-9\-.]*)\s*$") + + +def extract_bearbeiter_number(bearbeiter): + """Holt die Nummer hinter dem Bearbeiternamen ('Ulrika Grossmann / 5634' -> '5634'). + Steht im Feld nur eine Zahl, wird diese direkt genommen; ein Name ohne Nummer ergibt "", + damit kein Personenname im Dateinamen landet.""" + s = str(bearbeiter or "").strip() + if not s: + return "" + m = _BEARBEITER_NUMBER_PATTERN.search(s) + if m: + return m.group(1) + return s if s.isdigit() else "" + + +def build_export_basename(invoice_number, recipient_name, bearbeiter): + """Dateiname-Basis fuer die Exporte: '__'. + Der Empfaenger wird auf EXPORT_RECIPIENT_MAX_LEN Zeichen gekuerzt. Leere Teile werden + weggelassen (kein '__'); ist alles leer, bleibt 'Rechnung'.""" + recipient = sanitize_filename_part(recipient_name)[:EXPORT_RECIPIENT_MAX_LEN].strip("-_") parts = [ sanitize_filename_part(invoice_number), - sanitize_filename_part(recipient_name), - sanitize_filename_part(date_norm), + recipient, + sanitize_filename_part(extract_bearbeiter_number(bearbeiter)), ] base = "_".join(p for p in parts if p) return base or "Rechnung" diff --git a/main.py b/main.py index 0af8fc5..79f5e3b 100644 --- a/main.py +++ b/main.py @@ -602,8 +602,9 @@ with col2: "fehlt. Eine echte E-Mail-Adresse des Empfängers ist deutlich besser " "(sonst bemängeln strenge Validatoren PEPPOL-EN16931-R010).") - # Dateiname: __ (dateisicher aufbereitet). - export_basename = build_export_basename(inv_num, r_name, inv_date) + # Dateiname: __ + # (dateisicher aufbereitet). + export_basename = build_export_basename(inv_num, r_name, bearbeiter) # Ein-Klick-Export: die Exportdatei wird vorab erzeugt und direkt in den Download-Button # gelegt - ein Klick startet also sofort den Download, ohne separaten Zwischen-Button.