Produktions-Modul, überarbeitete Preislogik und WordPress-Preisrechner
Directus - Neues Modul „Produktion": Board mit Neu/Warteschlange/Im Druck/ Kuvertierung/Versandfertig/Versendet/Archiv, zentraler Suche, Druck-Popup (Maschine, Template, Maße, Nummernbereich, Direktdruck vs. Warteschlange) und Empfängerliste mit Vorschau von Schriftstück und Kuvert. - Interface-Plugins: Auftragsdateien, Drucken, Testdruck, Empfängersuche. - Mailer-Hook für Auftrags- und Statusmails inkl. Signatur und AGB-Anhang. - Auftrag: Empfängerzeilen inline, Produktionsstatus (inkl. storniert), Versanddatum, Brief-/Kuvert-Indikatoren, Insights-Dashboard. - Absender aller Mails ist Skrift (Projektname + email_settings); die Angebotsanfrage nennt jetzt das angefragte Produkt. Preislogik - Eine gemeinsame Multiplikator-Formel; Normalpreis-Menge je Produkt (products.norm_qty). Alte B2B/B2C-Fallback-Felder entfernt. - Mengenrabatt-Staffel (ab X Stück Y %) in den Preis-Einstellungen. - Preis pro Stück ohne einmalige Kosten (unit_net_total). - Einzelversand rechnet Kuvert und Beschriftung nicht mehr doppelt. - Fehlerhafte Grundpreis-Formel legt die Preisauskunft nicht mehr lahm. - Briefnummern 1-basiert: Dateiname entspricht der Briefnummer. app.skrift.de - Direktlinks für Muster, Unterschriftenservice und Follow-ups; Muster als eigene Seite, Kontaktprodukte direkt im Anfrageformular. - Mehrere Adressen in den Stammdaten plus Adressauswahl im Konfigurator. - Verbotene Zeichen werden bei der Eingabe entfernt und gemeldet. - Zeilenüberlauf als Fehlerkasten vor „Weiter"; Mengenfeld leerbar, Standardmenge 100; Checkout-Checkboxen im Kartenstil. Produktion - skrift-agent: Poll-Modell je Maschine, Maß-Übersteuerung, Nummernfilter und automatischer Übergang in die Kuvertierung. WordPress - Neues Plugin „Skrift Preisrechner": Shortcodes inkl./exkl. MwSt, stündlicher Abgleich der Preisdaten in WordPress und ein sicherer Formel-Interpreter, damit Formeländerungen automatisch greifen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -54,9 +54,12 @@ function buildDocuments(order, entries) {
|
||||
|
||||
entries.forEach((entry, i) => {
|
||||
const placeholders = placeholdersOf(entry);
|
||||
// Dateinummer = Briefnummer (1-basiert), damit letter_001.svg zu
|
||||
// Briefnummer 1 gehört. Vorschau nummeriert identisch (siehe skrift-orders).
|
||||
const nr = Number(entry.letter_number) || (i + 1);
|
||||
|
||||
documents.push({
|
||||
index: i,
|
||||
index: nr,
|
||||
type: 'letter',
|
||||
text: order.text_template || '',
|
||||
format: letterFormat,
|
||||
@@ -66,7 +69,7 @@ function buildDocuments(order, entries) {
|
||||
|
||||
if (wantsEnvelope) {
|
||||
documents.push({
|
||||
index: i,
|
||||
index: nr,
|
||||
type: 'envelope',
|
||||
envelopeType,
|
||||
text: envelopeType === 'recipient' ? addressText(entry) : (order.text_template || ''),
|
||||
@@ -123,6 +126,10 @@ async function generateFromDirectus(req, res, next) {
|
||||
envelopeBeschriftung: wantsEnvelope ? order.envelope_labeling : null,
|
||||
directusOrderId: orderId,
|
||||
customerEmail: order.customer_email,
|
||||
// Vorschau-Session → gezeigte Dokumente 1:1 übernehmen.
|
||||
previewSession: order.preview_session || null,
|
||||
// Eingegebener Brieftext → als brieftext.txt im Ausgabeordner ablegen.
|
||||
rawText: order.text_template || null,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user