Skip to content

QR-codes in factuur emails + Ticket activatie systeem - 7 januari 2026

Doel

  1. QR-codes werkend krijgen in factuur emails (niet alleen bij download)
  2. 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