# LabelPrintAgent Windows-Tray-Anwendung zum Rendern und Drucken von Etiketten über installierte Windows-Drucker, z. B. einen Dymo LabelWriter. ## Aktueller Stand Der Agent arbeitet jetzt mit lokalen `LabelTemplates` in `C:\ProgramData\LabelPrintAgent\settings.json`. Ein Queue-Job enthält nur noch: - `barcode_template_id` - `payload_json` Die alte Zuordnung über `layout_key` gibt es nicht mehr. Stattdessen gilt: ```text label_print_queue.barcode_template_id -> lokales LabelTemplate im LabelPrintAgent -> darin enthaltenes Layout rendern ``` Die Tabelle `barcode_templates` wird nicht verändert. Sie bleibt nur die fachliche Referenz für die `barcode_template_id`. ## LabelTemplates Ein lokales LabelTemplate enthält: - `barcodeTemplateId` - `name` - `getNumberUrl` - `numberPrintedUrl` - `reservedNumberPayloadKey` - `qrTemplate` - `layout` Das Layout liegt vollständig eingebettet im Template. Es gibt keine separate Layout-Datei und keinen `layoutKey` mehr. ## Nummernserver `getNumberUrl` wird per HTTP GET aufgerufen und gibt Plain Text zurück, z. B.: ```text 123 ``` Der Nummernserver liefert keine führenden Nullen. Die Datenbank speichert `reserved_number` als `BIGINT`, also z. B. `123`. Führende Nullen entstehen nur über Formatierung im Template: ```text {reservedNumber:0000000} -> 0000123 {nummer:0000000} -> 0000123 ``` Nach erfolgreichem Windows-Druck wird `numberPrintedUrl` aufgerufen. Erst wenn diese Bestätigung erfolgreich war, darf der Job als `printed` markiert werden. Wenn der Druck erfolgreich war, aber `numberPrintedUrl` fehlschlägt, bleibt `reserved_number` erhalten und der Job geht auf `error`. Beim erneuten Drucken wird dieselbe Nummer wiederverwendet; es wird keine neue Nummer reserviert. ## Payload-Erweiterung Vor dem Rendern wird `payload_json` erweitert: - `reservedNumber` - der konfigurierte `reservedNumberPayloadKey`, z. B. `nummer` - `qr`, wenn `qrTemplate` gesetzt ist - `jobId` - `barcodeTemplateId` Beispiel: ```json { "reservedNumber": 123, "nummer": 123, "qr": "bjoernprivat 0000123" } ``` ## Oberfläche Im Einstellungsdialog gibt es den Tab `Label-Templates`. Dort kannst du: - Templates anlegen - Templates löschen - `barcodeTemplateId` bearbeiten - Nummernserver-URLs bearbeiten - QR-Template bearbeiten - eingebettetes Layout-JSON bearbeiten - validieren - Vorschau erzeugen - Testdruck auslösen Die Vorschau verwendet eine Dummy-Nummer `123` und reserviert keine Nummer beim Nummernserver. ## Dymo-Testdruck Für den Dymo LabelWriter muss der Drucker in Windows als normaler Drucker eingerichtet sein. Stelle im Dymo-Treiber möglichst das passende Etikettenformat `57 x 32 mm` ein. Testdruck: 1. Im Tab `Drucker` den Dymo LabelWriter auswählen. 2. `Speichern` klicken. 3. Im Tab `Label-Templates` ein Template auswählen. 4. `Vorschau` prüfen. 5. `Testdruck` klicken. Typische Fehler: - Falscher Drucker gewählt. - Falsches Etikettenformat im Dymo-Treiber. - Treiber skaliert auf A4/Letter. - Etikett ist gedreht: Dymo-Treiber-Labelgröße und physische Orientierung prüfen. ## Datenbank Die SQL-Datei liegt unter: ```text sql/create_label_print_queue.sql ``` Beispiel-Insert: ```sql INSERT INTO label_print_queue (barcode_template_id, payload_json, status) VALUES ( 1, JSON_OBJECT( 'titel', 'Beleg privat', 'beschreibung', 'Tankbeleg', 'datum', '2026-05-07' ), 'pending' ); ``` ## Noch offen Der automatische MySQL-Worker ist noch nicht aktiv verdrahtet. Die dafür benötigten Modell-, Repository-, Nummernserver- und Druckprozessor-Klassen sind vorbereitet.