diff --git a/extensions/directus-extension-skrift-neuauftrag/dist/index.js b/extensions/directus-extension-skrift-neuauftrag/dist/index.js index ab06ea3..84cb5e6 100644 --- a/extensions/directus-extension-skrift-neuauftrag/dist/index.js +++ b/extensions/directus-extension-skrift-neuauftrag/dist/index.js @@ -154,10 +154,15 @@ const NeuAuftrag = defineComponent({ if (d.envelopeSenderScale) neu.envelopeSenderScale = d.envelopeSenderScale; if (d.adressModus) neu.adressModus = d.adressModus; if (Array.isArray(d.rows) && d.rows.length) { - neu.rows = d.rows.map((r) => ({ - free_text: String(r.free_text || ''), - placeholders: (r.placeholders && typeof r.placeholders === 'object') ? { ...r.placeholders } : {}, - })); + neu.rows = d.rows.map((r) => { + const row = { + free_text: String(r.free_text || ''), + placeholders: (r.placeholders && typeof r.placeholders === 'object') ? { ...r.placeholders } : {}, + }; + // Einzelfelder (Vorname, Nachname, Straße …) mitübernehmen, wenn vorhanden. + for (const [key] of FELDER) if (r[key] != null) row[key] = String(r[key]); + return row; + }); } neu.previewSession = null; neu.msg = 'Aus Auftrag übernommen – anpassen, dann Vorschau/Anlegen.'; diff --git a/extensions/directus-extension-skrift-produktion/dist/index.js b/extensions/directus-extension-skrift-produktion/dist/index.js index 1c477c7..1bb0067 100644 --- a/extensions/directus-extension-skrift-produktion/dist/index.js +++ b/extensions/directus-extension-skrift-produktion/dist/index.js @@ -692,9 +692,10 @@ const Board = defineComponent({ // ── Muster: manueller Druck ── // Namensteile der Anfrage (Adresse hat Vorrang vor dem freien Namensfeld). - function musterNamen() { - const a = manuell.req?.address && typeof manuell.req.address === 'object' ? manuell.req.address : {}; - const name = manuell.req?.name || ''; + function musterNamen(req) { + const q = req || manuell.req; + const a = q?.address && typeof q.address === 'object' ? q.address : {}; + const name = q?.name || ''; const teile = name.split(' '); return { anrede: a.salutation || a.anrede || '', @@ -772,6 +773,27 @@ const Board = defineComponent({ await laden(); } catch (e) { manuell.err = e?.response?.data?.detail || e?.response?.data?.error || e?.message || 'Fehlgeschlagen.'; manuell.msg = ''; } } + // Musteranfrage → manueller Druck: Adresse als Einzelfelder übernehmen (die + // Platzhalter [[Vorname]]/[[Nachname]]/[[Ort]] … ziehen sich daraus). Der + // Betreiber schreibt/wählt den Text dann selbst im manuellen Druck. + function musterUebernehmen(req) { + const n = musterNamen(req); + // „Straße Hausnr." best effort trennen (führende Straße, hintere Nummer). + const roh = String(n.strasse || '').trim(); + const m = roh.match(/^(.*?)[\s,]+(\d+\s*[a-zA-Z]?)$/); + const row = { + first_name: n.vor, last_name: n.nach, + street: m ? m[1].trim() : roh, house_no: m ? m[2].trim() : '', + zip: n.plz, city: n.ort, country: n.land, + }; + try { + localStorage.setItem('skrift_neuauftrag_uebernahme', JSON.stringify({ + product: req.product || '', adressModus: 'felder', rows: [row], + })); + const base = window.location.pathname.split('/admin/')[0] + '/admin/'; + window.location.href = base + 'skrift-neuauftrag'; + } catch (e) { flash('Übernahme fehlgeschlagen.'); } + } // ── Empfänger-Drawer (mit Dokument-Vorschau je Zeile) ── // Zerlegt einen Dateinamen in Brief-Nummer und Seite: @@ -1088,7 +1110,8 @@ const Board = defineComponent({ const nachricht = req.message ? subdued(req.message, 'margin:0 0 10px;white-space:pre-wrap;') : null; const aktionen = h('div', { style: 'display:flex;gap:8px;flex-wrap:wrap;' }, [ // Muster (Druckprodukt) → manueller Druck; individuelles Angebot → kein Druck. - istMuster ? btn('🖨 Muster drucken', () => openMuster(req), 'primary') : null, + istMuster ? btn('✍ In manuellen Druck', () => musterUebernehmen(req), 'primary') : null, + istMuster ? btn('🖨 Direkt drucken', () => openMuster(req)) : null, btn('👤 Details', () => openReqInfo(req)), ]); return h('div', { key: 'r' + req.id, style: CARD + `margin-bottom:14px;border-left:4px solid ${istMuster ? FARBE_MUSTER : FARBE_ANGEBOT};` }, [kopf, meta, nachricht, aktionen]);