diff --git a/invoice_logic.py b/invoice_logic.py index 16b7d26..bf6eb6f 100644 --- a/invoice_logic.py +++ b/invoice_logic.py @@ -84,23 +84,26 @@ BUYER_ENDPOINT_SCHEMES = { def resolve_buyer_endpoint(recipient_email, recipient_scheme, leitweg_id): """Ermittelt die effektive elektronische Adresse des Kaeufers (BT-49) samt Schema (BT-49-1). - Regeln (in dieser Reihenfolge): - 1. Steht im BT-49-Feld eine Adresse mit '@', ist es immer eine E-Mail -> Schema 'EM' - (unabhaengig vom Dropdown, damit ein falsch gewaehltes Schema nicht durchschlaegt). - 2. Steht dort eine Adresse ohne '@' (z.B. GLN), wird das gewaehlte Schema uebernommen. - 3. Ist das Feld leer, aber eine Leitweg-ID (BT-10) vorhanden, wird die Leitweg-ID als BT-49 - mit Schema '0204' verwendet - so muss die Leitweg-ID nur einmal (in BT-10) eingegeben werden. - 4. Ist beides leer, bleibt die Adresse leer (Schema unveraendert). - Gibt (adresse, schema) zurueck.""" + Zuerst wird der Wert bestimmt: das BT-49-Feld hat Vorrang; ist es leer, wird die Leitweg-ID + (BT-10) genommen (so muss sie nur einmal eingegeben werden). Dann das Schema: + 1. Enthaelt der Wert ein '@', ist es immer eine E-Mail -> Schema 'EM' (egal aus welchem Feld + er stammt und unabhaengig vom Dropdown - ein falsch gewaehltes Schema schlaegt nicht durch). + 2. Stammt der Wert aus der Leitweg-ID (BT-49-Feld war leer) -> Schema '0204'. + 3. Sonst (Wert direkt in BT-49 eingetragen, ohne '@', z.B. GLN) -> das gewaehlte Schema. + Ist beides leer, bleibt die Adresse leer (Schema unveraendert). Gibt (adresse, schema) zurueck.""" email = str(recipient_email or "").strip() if email: - if "@" in email: - return email, "EM" - return email, recipient_scheme - leitweg = str(leitweg_id or "").strip() - if leitweg: - return leitweg, "0204" - return "", recipient_scheme + value, from_leitweg = email, False + else: + value, from_leitweg = str(leitweg_id or "").strip(), True + + if not value: + return "", recipient_scheme + if "@" in value: + return value, "EM" + if from_leitweg: + return value, "0204" + return value, recipient_scheme # Fester Hinweistext fuer Vorkasse. Vorkasse ist eine Zahlungs*bedingung* (BT-20), kein # Zahlungs*mittel* - das Zahlungsmittel bleibt die Ueberweisung. Der Text wird daher zu den diff --git a/main.py b/main.py index e4f8564..fa12271 100644 --- a/main.py +++ b/main.py @@ -348,14 +348,18 @@ with col2: ) r_endpoint_scheme = r_endpoint_scheme_label.split(" - ")[0] - # Sichtbar machen, was tatsächlich als BT-49 exportiert wird - vor allem wenn es - # aus der Leitweg-ID (BT-10) abgeleitet wird, damit das leere Feld nicht "offen" wirkt. + # Sichtbar machen, was tatsächlich in BEIDE Felder (BT-49 + BT-49-1) exportiert wird - + # vor allem, wenn die Adresse aus der Leitweg-ID (BT-10) abgeleitet wird und das + # Feld BT-49 daher leer bleibt (sonst könnte man es für "noch offen" halten). _bt49_preview, _bt49_scheme_preview = resolve_buyer_endpoint(r_email, r_endpoint_scheme, leitweg_id) if _bt49_preview and not str(r_email).strip(): - st.success(f"➡️ BT-49 wird automatisch aus der Leitweg-ID übernommen: " - f"**{_bt49_preview}** (Schema **{_bt49_scheme_preview}**) – hier nichts nötig.") + st.success(f"➡️ Wird automatisch aus der Leitweg-ID (BT-10) übernommen – die beiden " + f"Felder oben können leer bleiben:\n\n" + f"- **Elektronische Adresse (BT-49):** {_bt49_preview}\n" + f"- **Adress-Schema (BT-49-1):** {_bt49_scheme_preview}") elif _bt49_preview: - st.caption(f"Export als BT-49: **{_bt49_preview}** · Schema **{_bt49_scheme_preview}**") + st.info(f"➡️ Export → **Elektronische Adresse (BT-49):** {_bt49_preview} · " + f"**Adress-Schema (BT-49-1):** {_bt49_scheme_preview}") r_street = st.text_input("Straße (BT-50)", value=data.get("recipient_street", "")) r_zip = st.text_input("PLZ (BT-53)", value=data.get("recipient_zip", ""))