Commit Graph

90 Commits

Author SHA1 Message Date
s4luorth
bf59ab3f80 Uebersicht: Empfaenger/Suche-Fix, Sammelauftrag = eine Zeile; Board-Kacheln; Neuauftrag-Karten
Uebersicht (Mitarbeiter):
- Empfaenger laden jetzt zuverlaessig (schlanke Felder, Suchliste lazy) -> behebt "-" ueberall + kaputtes Suchfeld
- Sammelauftrag (Charge) = EINE normale Zeile wie jeder Auftrag (erster/letzter Empfaenger, aggregierter Ablauf); Unterelemente nur optional aufklappbar
- Charge-Status schaltet den ganzen Sammelauftrag auf einmal um (Batch-Patch)
- grosse Zahlen-Kacheln hier entfernt (gehoeren ins Produktionsboard)

Produktionsboard:
- Charge-Zusammenfassung zeigt die grossen Kacheln (Schriftstuecke/Kuverts/Format/Versand)

Neuauftrag:
- klare weisse Bereichs-Karten mit sichtbarem Rahmen + Section-Kopf mit Trennlinie/Akzent, Felder mit dezenter Fuellung, kraeftigere Labels

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 12:17:54 +02:00
s4luorth
0bd046b192 Mitarbeiter-Uebersicht & Board: Blau statt Lila, Rahmen, Chargen-Zusammenfassung
- Uebersicht: nur Status im_druck/kuvertieren/versandfertig (eingegangen/versendet raus)
- Uebersicht: Versandart + Versanddatum nur lesbar (nicht vom Mitarbeiter aenderbar), Status bleibt editierbar
- Uebersicht: Chargen-Zusammenfassung mit grossen Kacheln (Schriftstuecke/Kuverts/Format/Versand) + aggregiertem Ablauf; Ablauf nicht mehr pro Mitglied
- Board: Farbe zurueck auf Blau #1E50A5, Lupen-Emoji entfernt, Rahmen auf Kacheln/Druckstrip/Lieferbox

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 12:01:50 +02:00
s4luorth
f784137f13 Uebersicht: Ablauf-Strip je Auftrag
Neue Spalte "Ablauf": Druck Schriftstueck -> Druck Kuvert -> Kuvertieren ->
Frankieren -> Versand. Je Schritt: erledigt (gruen, Haken), offen (amber),
nicht noetig (grau, x) - abgeleitet aus brief/kuvert_gedruckt, Status,
needs_envelope, frankiert. Ersetzt die Spalten Aufgabe + Stand. Erster/letzter
Empfaenger bleibt fuehrende Spalte.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 11:33:24 +02:00
s4luorth
4ff125bece Neuauftrag: Design angeglichen (Felder, Icons, Theme)
Umrandete, theme-sichere Eingabefelder (sieht aus wie ein Feld, Dark-Mode ok),
Section-Koepfe mit Material-Icons statt Emoji, konsistente Buttons (Primaer
gefuellt / Sekundaer Umriss), getoente Bereiche mit Haarlinie. Primaerfarbe ueber
Theme-Variable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 11:30:18 +02:00
s4luorth
ecd6da398c Manueller Auftrag: Neukundenzwang + Mails-Checkbox
- Neue E-Mail im Neuauftrag -> Pruefung; unbekannt => Stammdaten (Vor-/Nachname
  oder Firma + Adresse) werden erzwungen und beim Anlegen am Kundenkonto
  gespeichert (statt leerem Auto-Konto).
- Checkbox "Mails an Kunden senden" je manuellem Auftrag; orders.mails_senden
  (Default true). Mailer unterdrueckt Kunden-Mails bei mails_senden=false.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 11:28:08 +02:00
s4luorth
6a6b09d49d Uebersicht: Sidebar Suche/Uebersicht, API-Gruppierung, Versanddatum, 3-Uhr-Mail
uebersicht:
- Secondary-Sidebar: "Uebersicht" + "Suche". Suche wie frueher (Empfaenger
  suchen -> Schriftstueckart -> In Warteschlange, fuer Nachdruck).
- API-Auftraege als aufklappbare Charge-Gruppe (Kopf mit Summen: Schriftstuecke,
  Kuverts, Format, Versand). Versandfertig unterteilt: schnellstmoeglich / Datum.
- Versanddatum je Auftrag editierbar (leer = schnellstmoeglich).

bootstrap: orders.versanddatum (date).
produktion: Charge-Kopf zeigt Summen (Schriftstuecke/Kuverts/Format/Versand).
mailer: 03:00-Mail listet zusaetzlich "heute zu versenden" (faelliges Versanddatum).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 11:21:49 +02:00
s4luorth
d2559de22c Uebersicht: Empfaenger als Hauptinfo, Status-getrennte Tabellen, Aufgabe, Versand-Toggle
- Empfaenger (erster/letzter) ist die fuehrende Spalte; Ladefehler behoben
  (order _in statt Relationsfilter). Auftrag/Kunde sekundaer.
- Je Status eine eigene Tabelle (Im Druck / Kuvertierung / Versandfertig /
  Eingegangen).
- Neue Spalte "Aufgabe" (kuvertieren/frankieren/Versandart aus Status abgeleitet).
- Versandart pro Auftrag umschaltbar (Sammel/Einzel).
- Maschinen-Panel zaehlt nur WARTENDE Jobs (nicht "im Druck").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 11:08:29 +02:00
s4luorth
1eb3b14a13 Board strukturiert + neue Mitarbeiter-Uebersicht (A)
produktion:
- Karte in klaren Bloecken: getoenter Kopf (Identitaet + Status), Specs als
  beschriftete Kacheln, Druckstatus-Leiste (Brief/Kuvert getrennt), beschriftete
  Notiz, strukturiertes "Weiteres" mit beschrifteten Feldern. Kein linker
  Farbrand mehr. Groessere Schrift. Suche aus dem Board entfernt.

Neue Extension skrift-uebersicht (Modul, read-only fuer Mitarbeiter):
- Kompakte Tabelle: Auftrag/Name, erster+letzter Empfaenger, Format, faellig,
  Druck Brief/Kuvert getrennt, eingeplant, Status. Suche/Filter.
- Maschinen-Panel: "Format einlegen -> starten" (setzt current_format).

access: Staff sieht jetzt nur noch skrift-uebersicht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 10:53:22 +02:00
s4luorth
a01da17221 Auftragsname (Zusatz) + Signatur-Abstand-Feld im Neuauftrag
- orders.order_name (optionaler Auftragsname); im Neuauftrag setzbar, auf der
  Board-Karte als Eyebrow ueber dem Namen angezeigt; in manual-order gespeichert.
- Neuauftrag: Signatur-Feld "Abstand (mm)" (leer = Standard halber Zeilenabstand),
  via signature_offsets.spacing durchgereicht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 10:36:12 +02:00
s4luorth
c6f73c2d34 Board: Karte neu gedacht (Name fuehrt) + echte Icons statt Emoji
Auftragskarte: Kunden-/Empfaengername als Hero, Anzahl Schriftstuecke gross,
Status als klarer farbiger Pill (Icon + Dropdown), Druckfortschritt als eigene
Zeile (was/wann gedruckt), Bestellnummer klein in der Subzeile. Linker Rand
faerbt nach Status. Emoji durch Directus v-icon (Material Symbols) ersetzt in
Navigation, Karten, Buttons, Charge-/Angebotskarten, Bulk-Leiste, Bestand.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 10:15:36 +02:00
s4luorth
3185081d0e Produktions-Board: einheitliches Design (ruhigere, klarere Optik)
Gemeinsames Token-/Helfer-System (Card 12px, ruhige Pills, klarer Primaer-
Button, groessere Felder). Auftragskarte neu: grosse Auftragsnummer, ruhige
Eckdaten-Zeile statt Chip-Wand, Status-Pills nur wo sie Bedeutung tragen,
Versandadresse als Block. Angebots-/Musterkarte mit zitierter Nachricht.
Navigation mit Pillen-Zaehlern. Reiner Optik-Refactor, keine Logikaenderung.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 09:52:29 +02:00
s4luorth
2b4dd482f3 Staff-Rolle: Modulleiste auf Produktion + Neuer Auftrag beschränken
Directus 11 kennt keine rollenbasierte Modulleiste -> neue Hook-Extension
skrift-access filtert settings.read fuer Nicht-Admins auf die beiden Module
skrift-produktion und skrift-neuauftrag. Admins unveraendert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 08:58:10 +02:00
s4luorth
f8f219a3fa Bestandspflege: Material je Standort, Auto-Abbuchung beim Druck
Datenmodell (bootstrap):
- Collections standorte (seed Skrift/Signascript), inventory (Papier/Kuvert/
  Briefmarke je Standort, initiale Zeilen) und inventory_log.
- directus_users.produktionsstandort (m2o standorte; USER_FIELDS-Relation wird
  jetzt angelegt); orders.frankiert + porto_klasse; jobs.inventory_done.

Neue Hook-Extension skrift-inventory:
- Bucht beim Job-Status 'printed' automatisch ab (am Kunden-Standort, +10 %):
  Brief->Papier (phys. Format), Kuvert->Kuvert + Briefmarke (nur wenn frankiert;
  Inland Standard / Ausland International, bzw. porto_klasse). Idempotent.

produktion: neuer Tab 'Bestand' - je Standort, Unterschreitung rot
('nachbestellen'), manuelles Zubuchen + Mindestbestand/Bestand editierbar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 08:34:27 +02:00
s4luorth
79d6b4f64b Board: Suche entlaggt, Order-Sprung, Versandadresse, Motiv-Hinweis; Mail: tägliche Statusübersicht
produktion:
- Empfängersuche entlaggt (uncontrolled Input + 250ms-Debounce + vorab
  kleingeschriebenes Haystack) - kein Full-Rerender je Tastendruck mehr.
- "Auftrag öffnen"-Link je Karte (-> Directus-Order, neuer Tab).
- Sammelversand: Lieferadresse direkt auf der Karte (abweichende Order-
  Lieferadresse -> Kunden-Liefer-/Rechnungsadresse als Fallback).
- Postkarten-Motiv wird als Badge hervorgehoben.

mailer:
- API-Einzelzusammenfassung entfernt; stattdessen taegliche Gesamtuebersicht
  um 03:00 ueber ALLE Auftraege inkl. Mengen je Produktionsstatus.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-01 07:50:21 +02:00
s4luorth
bbbc637a81 C4-Kuvert NUR im Neuauftrag-Formular waehlbar
- neuauftrag: neues Dropdown "Kuvertformat" (Automatisch/DIN Lang/C6/C4 quer),
  envelope_format an Preview + manual-order durchgereicht.
- orders /preview: honoriert body.envelope_format (statt hart A4->DIN/A6->C6),
  ENVELOPE_TPL/ENV_LABEL um c4 (Template-Aufloesung, kein Selektor).
- produktion: C4-Option + Absenderfeld im Muster-Popup wieder entfernt
  (C4 gibt es ausschliesslich im Neuauftrag).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-30 12:07:07 +02:00
s4luorth
30f39af361 C4-Drucktemplate anlegen + Textmengencheck ohne Limit
- format_templates: kuvert_c4_v1 (+ A5/DIN-lang) werden per Nachruest-Schritt
  auch auf bestehenden Installationen angelegt (nur wenn Key fehlt); neue
  Templates tragen default_format (auto-Zuordnung im manuellen Druck).
- orders /preview: check:true umgeht Kennung + Kontingent (Textmengencheck),
  liefert aber die SVGs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-30 11:50:37 +02:00
s4luorth
e57c4aa8af C4-Kuvert im manuellen Druck (Absender-Freitext, quer)
- render_formats c4 (324x229, umschlag) + format_template kuvert_c4_v1 (quer)
  + envelope_format-Dropdown um c4 erweitert.
- produktion: Kuvert-Format-Dropdown im manuellen Druck um C4 (quer) + neues
  Absender-Freitextfeld (max. 5 Zeilen); Empfaenger weiter aus der Tabelle.
  ENVELOPE_TPL/ENV_LABEL um c4.
- orders /manual-print: envelope_format c4 gemappt, envelope_sender an das
  Backend (metadata.envelopeSender) durchgereicht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-30 11:31:39 +02:00
s4luorth
a785e72059 render_formats: A6-Greifrand lange Seite, A5 + DIN-lang, show_check
- Feld margin_bottom_mm (unterer Greifrand) + show_check (Textmengencheck).
- a6l: Greifrand von rechts nach unten (margin_right_mm=null loescht Altwert,
  margin_bottom_mm=14); a6p: margin_right_mm=14 (lange Seite rechts).
- Neue render_formats a5p, a5l, dinlang_karte (kind brief) + format_templates
  a5_v1, a5l_v1, dl_v1 (nur bei leerer Collection).
- formats: a5p/a5l/dinlang_karte manuell+check, nicht oeffentlich bestellbar;
  show_check auf allen Text-Seiten-Formaten.
- produktion: manuelles Format-Dropdown + Template-Map um A5/DIN-lang erweitert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-30 10:54:34 +02:00
s4luorth
d3ce505389 Versand-Seite: eine Zeile je FTP-Sendung (Buendel) statt je Auftrag
Die oeffentliche Versand-Seite listet jetzt die FTP-Sendungen (gebuendelte
batch_submissions, gruppiert nach bundle_name = FTP-Dateiname
<Zugang>_<Datum>_<HHMM>), nicht mehr einzelne Auftraege. "Versendet"
markiert das ganze Buendel (alle Uebermittlungen darin) als versendet;
danach verschwindet es aus der Liste.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-28 10:54:27 +02:00
s4luorth
870295e012 Fix: SKRIFT_VERSAND_TOKEN in Directus-Container durchreichen + FTP-Fehler voll ausgeben
- docker-compose.yml (directus): SKRIFT_VERSAND_TOKEN: ${SKRIFT_VERSAND_TOKEN}
  ergaenzt. Ohne diese Zeile landete der .env-Wert nie im Container -> die
  Versand-Seite blieb 404.
- Board FTP-Upload: gesamten Fehler ausgeben (nicht gekuerzt), leere Auswahl
  klar melden, 90s-Timeout gegen Haengen, console-Log. Proxy /batch-build
  kuerzt den Fehler nicht mehr auf 300 Zeichen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-28 10:39:43 +02:00
s4luorth
1f98aa4196 Batch-Uebernahme: Auftraege wie API-Auftraege unter einer Charge gruppieren
Uebernommene Uebermittlungen bekommen api_client gesetzt und werden im
Board (renderGruppiert) wie API-Auftraege als Charge gruppiert (bildeChargen:
Kunde+Produkt+Tag). Quelle bleibt 'operator' (keine Kundenmail). So liegen
alle uebernommenen Auftraege eines Zugangs/Tages unter einer Charge und
lassen sich dort wie gewohnt sammeldrucken.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-28 10:31:58 +02:00
s4luorth
c6c682d48f Batch-Reiter: FTP-Upload (primär) zurück, Tag+Kunde-Gruppen aufklappbar
- "Per FTP hochladen" als Primär-Aktion (wirkt auf Auswahl, ids an
  /skrift-orders/batch-build -> Backend), "In Produktion übernehmen"
  sekundär; dazu Versendet/Nicht versendet/Löschen.
- Gruppierung Tag → Kunde, beide aufklappbar, Gruppen-Kopf mit Haken
  (wählt alle in der Gruppe).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-28 10:24:10 +02:00
s4luorth
208d398034 Batch-Reiter Umbau: Uebernahme in Produktion, Tag-Gruppen, Auswahl, Versendet, Loeschen
Uebermittlungen-Reiter neu: nach Tag gruppiert, Mehrfachauswahl (Strg/
Shift, board-weit auch fuer Auftragskarten). Aktionen auf Auswahl:
- "In Produktion uebernehmen" -> neuer /skrift-orders/batch-uebernehmen:
  PDF -> Datei-Auftrag (PDF = Druckdatei), Text -> Handschrift-Brief
  (Text + 5-Zeilen-Adresse), Kuvert mit Empfaenger; Status uebernommen;
  Generierung angestossen. Danach in "Neu" (dort wie bisher buendeln).
- "Versendet" / "Nicht versendet" (neues Feld batch_submissions.versendet).
- "Loeschen" (mit Rueckfrage).
FTP-"Jetzt buendeln"-Knopf entfernt (FTP-Weg entfaellt). Bootstrap:
Status 'uebernommen' + Feld versendet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-28 10:15:18 +02:00
s4luorth
2aa6f008bf API: /v1/batch dokumentiert + oeffentliche Versand-Uebersicht
- /v1/batch nun in der HTML-Doku und in der OpenAPI-Spezifikation.
- Neue oeffentliche Seite an EINER kryptischen URL
  /v1/versand/<SKRIFT_VERSAND_TOKEN> (ohne Login): zeigt ALLE offenen
  Auftraege (Nummer, Status, Menge, Datum) in einer Uebersicht; pro Auftrag
  ein "Versendet"-Knopf setzt production_status 'versendet' + versandt_am
  (Status-API liefert dann 'shipped', Versandbenachrichtigung geht raus).
  Schutz = geheimer Pfad-Token (ENV); ohne Token 404.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-28 09:41:07 +02:00
s4luorth
8ad087d007 Batch-Uebermittlung (Phase 3): Board-Reiter + Buendeln-Knopf + Schreibvorlage
Produktions-Board: neuer Reiter "Uebermittlungen" (getrennt vom
Auftragsboard). Offene batch_submissions je Zugang gruppiert; Knopf
"Jetzt buendeln & hochladen" pro Zugang loest die Backend-Buendelung
(xlsx + Sammel-PDF + FTP) sofort aus. Text-Uebermittlungen bekommen einen
"Schreibvorlage"-Knopf, der Text + 5-Zeilen-Adressblock (Firma / Vorname
Nachname / Zeile1-3 / PLZ Stadt / Land, max 5) in den manuellen Druck
uebernimmt. skrift-orders: Proxy-Route /batch-build -> Backend.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-28 09:23:40 +02:00
s4luorth
131c48485c Batch-Uebermittlung (Phase 1): Collection + POST /v1/batch
Alternativer Uebermittlungsweg neben /v1/orders (unveraendert). Neue
Collection batch_submissions (Empfaengerschema Firma/Vorname/Nachname/
Zeile1-3/PLZ/Stadt/Land + Text ODER Druck-PDF, je Kunde ueber api_client).
Neuer Endpunkt POST /v1/batch: ein Empfaenger je Aufruf, PDF via
pdf_file_id (aus /v1/files) oder pdf_base64, oder text; Zeichen-Warnung
wie /v1/orders. Service-Policy darf batch_submissions lesen/als gebuendelt
markieren. Buendelung (xlsx+PDF+FTP) folgt in Phase 2.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-28 08:53:31 +02:00
s4luorth
2438ecb491 Public-API /v1/orders: Zeichen-Warnung + Ablehnung bei zu langem Text (A6)
Additiv, ohne Aenderung der bestehenden Antwortstruktur:
- Nicht erlaubte Zeichen werden wie bisher entfernt; zusaetzlich meldet
  die Antwort ein optionales "warnings":[{code:"unsupported_characters",
  characters:[...]}] (Brieftext + Empfaengerfelder).
- Nur EINSEITIGE Formate (A6 hoch/quer): passt der Brieftext nicht auf
  eine Karte, wird der Auftrag mit HTTP 422 abgelehnt (Backend-Umbruch-
  zaehlung /api/order/pagecount, kein Scriptalizer). A4 fliesst mehrseitig
  und wird nie abgelehnt. Backend nicht erreichbar => fail-open.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-25 08:52:53 +02:00
s4luorth
541483217d A6 quer rollenschonend: Zeichen fuer Zeichen (1), nicht in Bloecken
Default proReihe/group auf 1 gesenkt: bei aktivem rollenschonendem Druck
wird streng spaltenweise ein Zeichen nach dem anderen geschrieben (ein
Zeichen, Zeile tiefer, dann naechste Spalte), damit die Rolle minimal
faehrt. Weiterhin ueber ?group=N uebersteuerbar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-25 08:52:52 +02:00
s4luorth
73e7a878f1 A6 quer: Bahnbreite auf 2 Zeichen je Reihe
Default proReihe/group von 5 auf 2 gesenkt. Weiterhin über ?group=N
uebersteuerbar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-24 12:21:11 +02:00
s4luorth
aaa97edc16 A6 quer: Bahnbreite auf 5 Zeichen je Reihe
Default proReihe/group von 10 auf 5 gesenkt (kleinere Bahnen → noch
weniger Rollenweg). Weiterhin über ?group=N übersteuerbar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-24 11:00:46 +02:00
s4luorth
45e69c0c3a A6 quer: spaltenweise in ~10er-Bahnen statt pro Zeichen
Statt jede Glyphe einzeln umzusortieren (Rolle rückt pro Zeichen), wird
jetzt in senkrechten Bahnen von ~10 Zeichen Breite gearbeitet: je Zeile
~10 Zeichen als Reihe, dann eine Zeile tiefer in derselben Bahn, erst
danach die nächste Bahn. Rolle spult höchstens eine Bahnbreite zurück,
10er-Blöcke bleiben zusammen (natürlicher, schneller). Zeichenbreite wird
aus dem SVG geschätzt; Bahnbreite über ?group=N einstellbar (Default 10).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-24 10:22:10 +02:00
s4luorth
08e12180b6 A6 quer: rollenschonender Druck (spaltenweise Zeichenreihenfolge)
Checkbox „Rollenschonend drucken" im Druck-Popup (nur bei A6). Setzt am
Job das Feld spaltenweise. Der Agent lädt das Schriftstück-SVG dann über
den Download-Endpunkt mit ?reorder=column: die Glyph-<path>-Elemente
werden nach x (Spalte) und y (oben→unten) permutiert – Signatur-<g>,
Hintergrund und Trennstrich bleiben unangetastet. Sichtbares Ergebnis
identisch, aber der rollengeführte Plotter fährt monoton in Vorschub-
richtung statt je Zeile die Rolle zurückzuspulen. Nur Schriftstücke,
nicht Kuverts.

Neues Job-Feld jobs.spaltenweise (Bootstrap).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-24 09:09:37 +02:00
s4luorth
65b826dc83 Suche-Reiter: eigenes Suchfeld, wird beim Verlassen geleert
Der Suche-Reiter nutzt jetzt ein eigenes Such-Feld (sucheText) getrennt
vom globalen Filter – die Eingabe wird nicht mehr in die anderen Reiter
(Neu, Warteschlange …) übernommen und beim Verlassen des Reiters
geleert. Das globale Filter-Feld ist im Suche-Reiter ausgeblendet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 20:17:30 +02:00
s4luorth
af7126b03d Suche/Druckobjekt: echte PDF-Datei öffnen statt Schriftstück-Vorschau
Der Button „PDF öffnen" im Suche-Reiter (Typ Druckobjekt) öffnet jetzt
den Datei-Dialog mit den hochgeladenen Auftragsdateien (die echte PDF)
statt der SVG-Schriftstück-Vorschau. Der Datei-Dialog lädt die erste PDF
(sonst erste Datei) direkt in die Vorschau – ohne weiteren Klick.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 17:25:26 +02:00
s4luorth
5495b3a4d5 Suche-Druck: eigenes Standard-Template je Typ (format_templates.search_default)
Neues Boolean-Feld search_default an format_templates: je ein Brief- und
ein Kuvert-Template als Standard für den Schnelldruck im Suche-Reiter
markieren. Der Schnelldruck bevorzugt dieses Template, sonst das dem
Auftragsformat zugeordnete Standard (default_format), sonst den Fallback.
Kann bewusst dasselbe Template wie das normale Standard sein.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 17:23:49 +02:00
s4luorth
abf60cda0e Produktion: Suche-Reiter Usability – weißes Suchfeld, klare Typ-Auswahl
Hoher Kontrast für die Bedienung: große, eindeutige Typ-Auswahlknöpfe
(Schriftstück/Kuvert/Druckobjekt, aktiv blau, sonst weiß mit Rahmen)
direkt über einem unverkennbar weißen, großen Suchfeld. Standard-
Templates werden nicht mehr im Reiter gewählt, sondern in den
Einstellungen den Formaten zugeordnet (format_templates.default_format);
der Schnelldruck leitet das Template daraus ab. Ergebnisse zeigen die
vollständige Anschrift über der Auftragsnummer – ohne Status/Produkttyp.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 17:16:01 +02:00
s4luorth
a364f07035 Produktion: Suche-Reiter + Sammel-Druck mit editierbaren Maßen
Suche-Reiter (ganz oben, vor Neu): großes Suchfeld über alle aktiven
Stufen (Neu, Warteschlange, Im Druck, Kuvertierung, Versandfertig),
empfängergenau – Einzelaufträge zeigen den Namen, Mehrfachaufträge den
Empfänger an der richtigen Briefnummer. Über dem Feld ein Typ-Umschalter
(Schriftstück / Kuvert / Druckobjekte) mit je eigenem, im Reiter
einstellbarem Standard-Template + Maschine (lokal gespeichert). Der
Druck-Button gibt genau diesen Empfänger mit dem Standard-Template in die
Warteschlange; Druckobjekte öffnet die Dateien zum Herunterladen.

Sammel-Druck (Mass-Select): pro Format nicht nur Template + Maschine,
sondern auch Maße/Position (Breite, Höhe, X, Y, Scale, Rotation)
editierbar – übersteuert die Template-Werte wie beim Einzeldruck
(enqueue-bulk reicht die params jetzt an die Jobs durch).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 17:07:44 +02:00
s4luorth
af63fd66be Neuauftrag: Stückzahl statt Empfängerzeilen bei identischem Druck ohne Kuvert
Ohne Kuvert (kein Postkarten-Format, „Kuverts generieren" aus) und ohne
eigene [[Platzhalter]] im Brieftext sind alle Schriftstücke identisch –
Empfängeradressen sind dort unnötig. Statt N Zeilen anzulegen, gibt es
jetzt ein Feld „Anzahl identischer Schriftstücke"; beim Anlegen werden
entsprechend viele gleiche Schriftstücke erzeugt. Sobald Kuverts aktiv
sind oder der Text eigene Platzhalter enthält, erscheint wieder die
Empfängertabelle.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-21 12:09:58 +02:00
s4luorth
4d60a5d1da Mailer: Versandbenachrichtigung bei Board-Versand (auch manuelle Aufträge)
Der Wechsel auf production_status='versendet' im Produktions-Board löst jetzt die
„versendet"-Vorlage (Versandbenachrichtigung) an den Kunden aus – für alle Aufträge
inkl. manuelle. Nur beim ersten Versand (Guard über versandt_am), keine Doppel-Mail.
Bestellbestätigung bleibt bei manuellen Aufträgen (source=operator) unterdrückt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 12:30:33 +02:00
s4luorth
71a5d882aa Mailer: keine Mail bei manuellen Aufträgen (source=operator)
Manuell im Admin angelegte Aufträge lösen keine Bestellbestätigung an den Kunden
und keine Team-Benachrichtigung mehr aus.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 12:26:52 +02:00
s4luorth
2c075f9fb5 Anfragen-Team-Mails: vollständiger Inhalt (alle Felder)
Muster- und Angebotsanfragen (App sample/offer-request + WordPress inbound) senden
jetzt den kompletten Inhalt als Feld-Tabelle (Name, Kontakt, Adresse, Produkt,
Menge, Nachricht/Vorhaben) – bei WordPress zusätzlich alle weiteren übermittelten
Formularfelder.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 12:02:45 +02:00
s4luorth
f4ce602b7a Motiv-Entwurf eingepasst (meet, in Trim-Fläche) + sevDesk-Diagnose-Logs
- Motiv-A6-Layout: Motiv vollständig in 148×105 eingepasst (meet, mittig) auf
  weißem A6-Grund statt randabfallend beschnitten (slice).
- skrift-sevdesk: Lade-Log (Token gesetzt/fehlt) + Logs je Auftrag (source-Gate,
  bereits erstellt) zur Diagnose, warum ggf. nichts erzeugt wird.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 11:48:09 +02:00
s4luorth
2c9ffbbc9b Produktion: Druckdatum je Auftrag, Chargen nach Druck-Durchgang trennen, Empfänger
- Chargen trennen jetzt zusätzlich nach dem Druck-Durchgang (Zeitpunkt „in den
  Druck gegeben", Minute) – zwei Druckläufe desselben Tages mischen sich nicht mehr.
- Charge-Karte: Chip „🖨 gedruckt <Datum/Zeit>".
- „Weiteres" je Auftrag: „In den Druck: <Datum/Zeit>" sowie Erster/Letzter
  Empfänger (nach Briefnummer) zum Auseinandersortieren.
- druckIndex (frühester/letzter Job-Zeitpunkt) + empfNamen aus order_entries.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 10:04:22 +02:00
s4luorth
881ff8a27b Motiv-Freigabe: A6-Entwurf erzeugen + Kundenfreigabe (Backend/Board)
- skrift-orders: bei Konfigurator-Bestellung mit Motiv-Upload wird ein A6-
  Drucklayout (152×109 mm, 2 mm Beschnitt, Motiv mittig/randabfallend) erzeugt
  und als orders.motif_layout abgelegt; approval_status='pending' + Token gesetzt;
  Freigabe-Mail (motiv_freigabe) mit Einmal-Link verschickt. Öffentliche
  Endpunkte /freigabe/:token (Info), /:token/layout (SVG), POST (freigeben/ändern).
- bootstrap: orders.approval_status/approval_token/approval_note/motif_layout,
  users.sevdesk_contact_id (bereits), Mailvorlage motiv_freigabe.
- Produktion: Chip „wartet auf Freigabe / freigegeben / Änderungswunsch".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 08:05:39 +02:00
s4luorth
0f73a653b3 sevDesk: automatische Rechnung (Entwurf) bei Konfigurator-Bestellung
- Neue Hook-Extension skrift-sevdesk: legt bei orders.items.create (source=
  configurator) eine sevDesk-Rechnung als ENTWURF an – Kontakt wird angelegt/
  wiederverwendet (sevdesk_contact_id am Konto), Positionen aus price_lines
  (Produkt mit Menge; Versand/Motiv/Zusatz je eigene Position), 19% USt.
  Nicht-blockierend, per SEVDESK_API_TOKEN aktiviert; Versand NICHT über sevDesk.
- orders.price_lines (JSON) speichert die Positionsaufstellung bei Bestellung
  (Konfigurator + manueller Auftrag).
- bootstrap: orders.price_lines/sevdesk_invoice_id/sevdesk_invoice_number,
  directus_users.sevdesk_contact_id.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 07:44:28 +02:00
s4luorth
10776764d7 Mailvorlagen: pro Vorlage „Kopie an mich" (BCC an Team-Adresse)
- email_templates: neues Feld bcc_team (Checkbox).
- Mailer: ist bcc_team gesetzt, geht die Mail zusätzlich als BCC an
  email_settings.team_email (Kunde sieht die Kopie nicht).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 07:33:22 +02:00
s4luorth
67e7835214 inbound-Log v2: gefüllte Felder anzeigen (Diagnose vorname/ort)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 21:55:14 +02:00
s4luorth
3ebe05c954 inbound/muster (WordPress): Vorname/Nachname & Ort korrekt mappen
Der WP-Webhook schickt vorname + name(=Nachname) getrennt und die Stadt als „ort".
Bisher wurde nur body.name als kompletter Name genommen (nur Nachname), city aus
body.city gelesen (leer) und kein first_name/last_name gespeichert – daher stand
beim Übernehmen der Nachname im Vornamen und Ort blieb leer.

- Anzeigename = vorname + name; address bekommt first_name/last_name.
- Stadt aus „ort" (Aliase stadt/city), plus robuste Feld-Aliase via feldWert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 21:52:09 +02:00
s4luorth
ba9c073bb9 WP-Feld-Mapping robuster + Logging; Muster ohne Direktdruck; Kontakte-Fixes
- skrift-orders: sample-/offer-request nehmen viele Feldnamen-Varianten an
  (feldWert-Helfer) und loggen eingehende + gefüllte Feldnamen zur Diagnose.
- skrift-produktion: „Direkt drucken" bei Musteranfragen entfernt (nur noch
  „In manuellen Druck übernehmen").
- skrift-kontakte: Bulk-Status-Dropdown lesbar (weiße Schrift auf weiß behoben);
  Shift-Klick wählt den ganzen Bereich zwischen zwei Checkboxen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 21:43:28 +02:00
s4luorth
4d811c1f0b Vorschau ohne Brieftext erlauben, wenn Kuverts gewünscht (nur Kuvert-Vorschau)
- /preview: leerer Text ist erlaubt, wenn envelope_labeling != 'keine' → nur die
  Kuverts werden erzeugt.
- Postkarte in der Vorschau nur bei vorhandenem Brieftext erzeugen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-11 21:32:43 +02:00