QR-codes in factuur emails + Ticket activatie systeem - 7 januari 2026¶
Doel¶
- QR-codes werkend krijgen in factuur emails (niet alleen bij download)
- Begin maken met ticket activatie systeem voor multi-attendee orders
Probleem: QR-codes ontbraken in email PDFs¶
Context¶
- Download via account pagina: PDF met QR-codes ✓
- Email attachment: PDF zonder QR-codes ✗
- Facturen werden te vroeg gegenereerd (voor licenties klaar waren)
Oplossing: Queue-based email systeem¶
Flow aangepast: 1. ORDER_PAID(100): Licenties + QR-codes aanmaken 2. Invoice transition(-50): Standaard email blokkeren 3. ORDER_PAID(-200): Invoice email in queue plaatsen (5 min delay) 4. Queue worker: PDF regenereren + email versturen
Code wijzigingen:
- InvoicePreGenerateSubscriber: Blokkeert standaard invoice email voor VGBC tickets
- DelayedInvoiceEmailSubscriber: Plaatst invoice in queue
- VgbcInvoiceEmailQueue: Queue worker die PDF genereert en email verstuurt
- Services: Queue dependency toegevoegd
Logo probleem opgelost¶
Probleem: Logo URL was http://default/... in CLI context
Oplossing:
- $base_url in settings.php toegevoegd
- Preprocess functie fix logo URL naar absolute URL
- Fallback hardcoded in template
Bestanden:
- web/sites/default/settings.php: Base URL configuratie
- vg_commerce.module: Logo URL fix in preprocess
- Invoice template: Logo fallback toegevoegd
Ticket Activatie Systeem (WIP)¶
Requirement¶
Als Pietje 2 tickets koopt (1 voor hemzelf, 1 voor Marietje): - Beide moeten aparte accounts hebben - BIG-registratie per deelnemer (voor accreditatie) - Marietje moet zich kunnen registreren om haar ticket te activeren
Implementatie (deel 1)¶
1. Licentie velden toegevoegd:
- field_attendee_email: Email van deelnemer
- field_activation_token: Unieke activatietoken
- field_activated: Boolean of ticket geactiveerd is
2. Checkout pane aangemaakt:
VgbcTicketAttendees.php - Vraagt per ticket om email deelnemer
- Eerste ticket: vooraf ingevuld met koper email
- Volgende tickets: handmatig in te vullen
- Emails worden opgeslagen in order data
3. License subscriber aangepast:
VgbcTicketLicenseSubscriber.php:
- Leest attendee emails uit checkout pane
- Checkt of user met email al bestaat
- Genereert activation token
- Markeert als activated als user bestaat
- Koppelt licentie aan juiste user
4. Activatie route + controller:
/ticket/activate/{token}:
- Zoekt licentie met token
- Als ingelogd + juiste email → direct activeren
- Als niet ingelogd → redirect naar registratie met email pre-filled
- Als verkeerde user → uitloggen + melding
Nog te doen (volgende sessie)¶
Prioriteit 1 - Essentieel: 1. "Mijn Tickets" view aanmaken (via UI of code) 2. Factuur template: QR-codes verwijderen (factuur = financieel, ticket = toegang) 3. User registratie form alter: - Email pre-fill uit URL parameter - Na registratie: auto-activeer ticket met token 4. Email templates splitsen: - Factuur email (naar koper, zonder QR) - Ticket email (naar deelnemer, met QR of activatielink)
Prioriteit 2 - Verbeteringen: 5. Checkout pane verbeteren met autocomplete (bestaande users suggereren) 6. BIG-registratie veld toevoegen op ticket/licentie 7. Testing van complete multi-attendee flow
Prioriteit 3 - Nice to have: 8. Account pagina: "Mijn facturen" + "Mijn tickets" gescheiden 9. Ticket download/print functionaliteit 10. QR-code visueel verbeteren (groter, border, instructies)
Technische details¶
Bestanden gewijzigd/toegevoegd:¶
web/modules/custom/vg_commerce/
├── src/
│ ├── Controller/TicketActivationController.php (NEW)
│ ├── Plugin/
│ │ ├── Commerce/CheckoutPane/VgbcTicketAttendees.php (NEW)
│ │ └── QueueWorker/VgbcInvoiceEmailQueue.php (NEW)
│ └── EventSubscriber/
│ ├── VgbcTicketLicenseSubscriber.php (UPDATED)
│ ├── InvoicePreGenerateSubscriber.php (UPDATED)
│ └── DelayedInvoiceEmailSubscriber.php (UPDATED)
├── vg_commerce.module (UPDATED - logo URL fix)
├── vg_commerce.routing.yml (UPDATED - activatie route)
└── vg_commerce.services.yml (UPDATED - queue dependency)
web/themes/custom/vg25/templates/commerce-invoice/
└── commerce-invoice.html.twig (UPDATED - logo fallback)
web/sites/default/settings.php (UPDATED - base URL)
Database wijzigingen:¶
- 3 nieuwe velden op
commerce_license.vgbc_ticket: field_attendee_email(email)field_activation_token(string)field_activated(boolean)
Routes:¶
/ticket/activate/{token}- Ticket activatie pagina
Queue:¶
vgbc_invoice_email_queue- Delayed invoice emails (processed by cron)
Testing¶
Wat werkt: - Logo in email PDFs ✓ - QR-codes in email PDFs ✓ - Queue system voor delayed emails ✓ - Licentie velden en activation tokens ✓ - Checkout pane voor attendee emails ✓ - Activatie route (basis) ✓
Nog niet getest: - Complete multi-attendee checkout flow - Ticket activatie via registratie - "Mijn Tickets" view (nog niet aangemaakt) - Email templates (nog niet gesplitst)
Resultaat¶
Opgeleverd: - Invoice emails met logo + QR-codes werken perfect - Basis ticket activatie systeem staat (50% compleet) - Clean code architectuur voor multi-attendee flow
Status: WIP - Kan nog niet live (checkout pane moet eerst geactiveerd/getest worden)
Next session: Afmaken ticket activatie systeem + testen complete flow
Tags¶
Commerce, VGBC, Tickets, QR-codes, Email, Queue, Multi-attendee, Activatie, Critical