144 lines
3.5 KiB
Markdown
144 lines
3.5 KiB
Markdown
# 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.
|