Print Queue¶
Legacy implementatie
De print queue is een legacy implementatie in de huidige CodeIgniter-applicatie (zwerfkei). De werking hieronder beschrijft de bestaande situatie. Deze functionaliteit wordt herontworpen — zie de milestone voor de geplande verbeteringen.
Doel¶
De print queue is een bestandsgebaseerde wachtrij voor PDF-documenten die naar fysieke printers in de winkel gestuurd worden. Een externe print-client (script op de winkelserver) pollt de API en stuurt de PDFs naar de juiste printer.
Huidige situatie (legacy)¶
Architectuur¶
sequenceDiagram
participant Backend as zwerfkei (backend)
participant FS as Bestandssysteem (print_queue/)
participant API as /api/printqueue
participant Client as Print-client (script)
participant Printer as Fysieke printer
Backend->>FS: Schrijf PDF naar submap + lockfile
Backend->>FS: Verwijder lockfile
Client->>API: GET /api/printqueue (polling)
API->>FS: Controleer lockfile
API-->>Client: 202 (lockfile actief) of 204 (leeg) of 200 + base64 PDF
Client->>Printer: Print PDF
Client->>API: DELETE /api/printqueue/{timestamp}
API->>FS: Verwijder sent_{timestamp}.pdf
Schrijven — PDF naar queue¶
PDFs worden gegenereerd en naar de queue geschreven via FPDF::printOutput() in de backend. Per papiertype wordt een submap gebruikt:
| Papiertype | Submap | Gebruik |
|---|---|---|
a4 |
a4/ |
Standaard A4 (pakbonnen, etc.) |
a5 |
a5/ |
A5 formaat |
a3 |
a3/ |
A3 formaat |
factuur |
a4_bypasstray_duplex/ |
Factuur (bypass tray, dubbelzijdig) |
bypass |
a4_bypasstray/ |
A4 via bypass tray |
shipping_label |
shipping_label_{device.code}/ |
Verzendlabel per apparaat |
plak |
plak/ |
Plaksticker |
hang |
hang/ |
Hangtag |
bon |
bon/ |
Kassabon |
Lezen — API endpoints¶
GET /api/printqueue¶
De print-client pollt dit endpoint herhaaldelijk.
| HTTP status | Betekenis |
|---|---|
202 Please wait |
Lockfile actief — PDF wordt op dit moment geschreven |
204 No content |
Geen PDFs in de wachtrij |
200 |
Één PDF beschikbaar |
Response body (200):
[
{
"path": "a4",
"timestamp": "1234567890123456789",
"contents": "<base64-encoded PDF>"
}
]
Één PDF per request
De API retourneert bewust één PDF per call om de volgorde van afdrukken (met name labels) te waarborgen.
Na het ophalen wordt het bestand hernoemd van {naam}.pdf naar sent_{timestamp}.pdf.
DELETE /api/printqueue/{timestamp}¶
Verwijdert een eerder verzonden bestand (sent_{timestamp}.pdf). De print-client roept dit aan ter bevestiging dat de print gelukt is.
LockFile mechanisme¶
Tijdens het schrijven van een PDF wordt een lockfile aangemaakt (print_queue/henk.lock) om te voorkomen dat de print-client een incomplete PDF ophaalt.
- Lockfile vervalt na 3600 seconden
- Bij overschrijding stuurt het systeem automatisch een waarschuwingsmail naar
it@zwerfkei.nl
Configuratie¶
$config['print_direct'] = true;
$config['print_queue'] = [
'server' => '...',
'username' => '...',
'password' => '...',
'remote_path' => 'zwerfkeistatic/public_html/print_queue/'
];
Relevante bestanden (legacy)¶
| Bestand | Doel |
|---|---|
application/modules/api/controllers/Printqueue.php |
API controller (ophalen + bevestigen) |
application/modules/backend/components/pdf/Fpdf.php |
FPDF + printOutput() (schrijven naar queue) |
application/components/LockFile.php |
Lockfile mechanisme |
Target situatie¶
Verbetering gepland
De polling-gebaseerde aanpak en het bestandssysteem als tussenlaag worden als knelpunt gezien. De geplande verbeteringen zijn uitgewerkt in de onderstaande milestone.