From aa5a0d960f1eca8e9ff7b814957aec4d6512ebd1 Mon Sep 17 00:00:00 2001 From: s4luorth Date: Fri, 18 Sep 2026 12:59:56 +0200 Subject: [PATCH] Konfigurator: Freitext-Adresse nur bei Adressmodus 'freitext' senden Bei strukturierter Standardadresse wurde der Umschlag trotzdem mit dem Freitext beschriftet, wenn im Freitextfeld noch Reste eines frueheren Moduswechsels standen: das Backend (addressText) bevorzugt free_text. free_text wird jetzt zentral in mitPlatzhaltern() normalisiert und in Vorschau, Textpruefung und Bestellung identisch mitgeschickt. Co-Authored-By: Claude Opus 4.8 --- src/routes/Configurator.tsx | 39 +++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/routes/Configurator.tsx b/src/routes/Configurator.tsx index 4fdde24..e473973 100644 --- a/src/routes/Configurator.tsx +++ b/src/routes/Configurator.tsx @@ -799,11 +799,17 @@ export default function Configurator({ vorwahlProdukt }: { vorwahlProdukt?: stri * Platzhalter explizit auf (Standard-Platzhalter aus der Adresse via standardWert, * eigene aus e.placeholders). So wird je Empfänger sicher ersetzt – unabhängig * davon, wie das Backend die Adressfelder interpretiert. + * + * Zusätzlich wird der Freitext nur bei Adressmodus „freitext" mitgeschickt. + * Bei strukturierter Adresse muss free_text leer sein, sonst bevorzugt das + * Backend (addressText) den Freitext und beschriftet den Umschlag falsch – + * auch wenn im Freitextfeld nur Reste von einem früheren Moduswechsel stehen. */ const mitPlatzhaltern = (e: Entry): Entry => { const used = [...new Set([...genutztePlatzhalter, ...genutztePlatzhalterUmschlag])]; return { ...e, + free_text: adressModus === 'freitext' ? e.free_text : '', placeholders: { ...Object.fromEntries(used.map((p) => [p, standardWert(e, p)])), ...e.placeholders, @@ -999,7 +1005,7 @@ export default function Configurator({ vorwahlProdukt }: { vorwahlProdukt?: stri realistic: realistisch, envelope_labeling: needsEnvelope ? labeling : 'keine', envelope_text: umschlagText, - entries: entries.slice(0, 3), + entries: entries.slice(0, 3).map(mitPlatzhaltern), }); setPreviewDocs(ergebnis.docs); setPreviewVerbleibend(ergebnis.remaining); @@ -1098,20 +1104,23 @@ export default function Configurator({ vorwahlProdukt }: { vorwahlProdukt?: stri street: lieferung.street, zip: lieferung.zip, city: lieferung.city, country: lieferung.country, } : null, - entries: entries.map((e) => ({ - salutation: e.salutation, - first_name: e.first_name, - last_name: e.last_name, - street: e.street, - house_no: e.house_no, - zip: e.zip, - city: e.city, - country: e.country, - free_text: adressModus === 'freitext' ? e.free_text : '', - placeholders: mitPlatzhaltern(e).placeholders, - // Abweichender Text nur, wenn wirklich gesetzt (sonst greift der Standardtext). - text: (e.text && e.text.trim()) ? e.text : undefined, - })), + entries: entries.map((e) => { + const n = mitPlatzhaltern(e); // free_text-Normalisierung + Platzhalter + return { + salutation: e.salutation, + first_name: e.first_name, + last_name: e.last_name, + street: e.street, + house_no: e.house_no, + zip: e.zip, + city: e.city, + country: e.country, + free_text: n.free_text, + placeholders: n.placeholders, + // Abweichender Text nur, wenn wirklich gesetzt (sonst greift der Standardtext). + text: (e.text && e.text.trim()) ? e.text : undefined, + }; + }), }); // Auftrag ist abgesendet – der zwischengespeicherte Entwurf wird verworfen. try { localStorage.removeItem(ENTWURF_KEY); } catch { /* egal */ }