Postkarten-Layout: Text links, Absender+Empfänger rechts, Briefmarkenfeld frei
All checks were successful
Build & Deploy / deploy (push) Successful in 13s

Neues render_format-kind 'postkarte'. generatePostcardSVG setzt den Text auf die
linke Kartenhälfte, Absender (klein, oben) und Empfänger (Anschriftzone unten) auf
die rechte Hälfte; oben rechts bleibt das Briefmarkenfeld frei. Ein SVG je Karte
(ein Plotter-Durchlauf), geschrieben als letter_NNN.svg.

- page-layout: kind je Format mitführen + getFormatKind().
- svg-generator: generatePostcardSVG (Body/Absender/Empfänger über Marker
  [[pk_abs]]/[[pk_adr]] getrennt, damit alle Teile scriptalisiert werden).
- order-/preview-/directus-controller: type 'postcard' dispatchen, Marker in der
  Scriptalisierung erhalten, Postkarten-Dokument aus render_format-kind bauen.
- directus-service: kind aus render_formats mitladen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorth
2026-09-11 13:58:06 +02:00
parent bf3352d82c
commit 8030d3d0ec
6 changed files with 164 additions and 4 deletions

View File

@@ -12,6 +12,7 @@
const { runGeneration } = require('./order-controller');
const directus = require('../../services/directus-service');
const { countLetterPages } = require('../../lib/svg-generator');
const { getFormatKind } = require('../../lib/page-layout');
const { replacePlaceholders } = require('../../services/placeholder-service');
// Directus-Formatschlüssel → Backend-Formate
@@ -55,6 +56,9 @@ function buildDocuments(order, entries) {
// Datei-Produkte (z. B. Unterschriftenservice): das „Schriftstück" ist das vom
// Kunden hochgeladene Dokument – es wird NICHT generiert. Kuverts hingegen schon.
const istDatei = order.product?.input_mode === 'datei';
// Postkarte: Text links, Absender+Empfänger rechts, Briefmarkenfeld frei – ein SVG
// je Karte (kein separater Umschlag). Erkennung über die render_format-Art.
const istPostkarte = getFormatKind(letterFormat) === 'postkarte';
// Kuvert-only-Produkt: es wird KEIN Schriftstück generiert, nur die (adressierten)
// Kuverts. Etwaige hochgeladene PDF-Briefe liegen als source_files am Auftrag.
const istKuvertOnly = order.product?.type === 'envelope';
@@ -80,6 +84,21 @@ function buildDocuments(order, entries) {
// Abweichender Text je Schriftstück hat Vorrang; sonst Standardtext.
const briefText = (entry.text && String(entry.text).trim()) ? entry.text : (order.text_template || '');
// Postkarte: EIN Dokument mit Text + Absender + Empfänger (über Marker getrennt).
if (istPostkarte) {
const recip = addressText(entry);
const sender = order.envelope_sender ? String(order.envelope_sender).trim() : '';
let combined = String(briefText || '');
if (sender) combined += `[[pk_abs]]${sender}`;
if (recip) combined += `[[pk_adr]]${recip}`;
documents.push({
index: nr, type: 'postcard', text: combined, format: letterFormat, font,
placeholders, fontScale: fontScaleLetter, realisticHandwriting: realistisch,
});
return;
}
// Kein Schriftstück erzeugen, wenn kein Text hinterlegt ist (z. B. „nur Kuverts drucken").
if (!istDatei && !istKuvertOnly && String(briefText).trim()) {
documents.push({