Postkarten-Format (nur manueller Druck): Text links, Adresse rechts

- bootstrap: render_formats a6_postkarte + dinlang_postkarte (kind 'postkarte'),
  passende formats-Einträge (active=false → nicht in der App, nur manueller Druck),
  kind-Dropdown um 'postkarte' erweitert.
- skrift-orders: Vorschau erkennt Postkarten (render_formats.kind) und baut EIN
  Dokument mit Text + Absender + Empfänger (Marker [[pk_abs]]/[[pk_adr]]).
- neuauftrag: Postkarten-Formate erkannt; Absenderfeld direkt (unabhängig von
  Kuverts), Kuvert-Optionen ausgeblendet, Hinweis aufs Kartenlayout.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorth
2026-09-11 13:58:28 +02:00
parent 08fe21a158
commit 6ccd4f3c53
3 changed files with 60 additions and 14 deletions

View File

@@ -678,6 +678,10 @@ const handler = (router, { services, getSchema, logger }) => {
const briefFormat = LETTER_FORMAT[body.format] || body.format || 'a4';
// A4 → DIN Lang, A6 → C6
const umschlagFormat = briefFormat === 'a4' ? 'din_lang' : 'c6';
// Postkarte (Text links, Adresse rechts, ein SVG) – Erkennung über render_formats.kind.
const istPk = (await svc('render_formats').readByQuery({
filter: { key: { _eq: briefFormat } }, limit: 1, fields: ['kind'],
}))?.[0]?.kind === 'postkarte';
const platzhalterVon = (e, i) => ({
Anrede: clean(e.salutation || ''),
@@ -717,6 +721,22 @@ const handler = (router, { services, getSchema, logger }) => {
const nr = i + 1;
// Abweichender Text je Schriftstück (#5) hat Vorrang; sonst der Standardtext.
const briefText = (e.text && String(e.text).trim()) ? String(e.text) : String(body.text);
// Postkarte: EIN Dokument mit Text + Absender + Empfänger (Marker-getrennt).
if (istPk) {
const sender = clean(String(body.envelope_sender || '')).trim();
const recip = adressBlock(e);
let combined = String(clean(briefText) || '');
if (sender) combined += `[[pk_abs]]${sender}`;
if (recip) combined += `[[pk_adr]]${recip}`;
letters.push({
index: nr, type: 'postcard', text: combined, format: briefFormat, font,
realisticHandwriting: realistisch, placeholders: platzhalterVon(e, i),
fontScale: fsLetter, senderScale: Number(body.envelope_sender_scale) || 1,
});
return;
}
// Kein Schriftstück, wenn kein Text da ist (reiner Kuvert-Druck).
if (String(briefText).trim()) {
letters.push({