Skip to content

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.

Milestone: Print Queue v2