Skip to content

Werkbon

Werkbon is een gesloten interne webapplicatie voor het beheren van werkbonnen, meldingen en klantcontacten. Gebouwd als WordPress thema voor een Nederlands servicebedrijf. Alleen ingelogde gebruikers — monteurs en beheerders — hebben toegang.

De applicatie wordt gebruikt door:

  • Monteurs (veldwerkers) — meldingen bekijken, werkbonnen invullen na afgerond werk
  • Beheerders — meldingen aanmaken, toewijzen, rapportages bekijken, contacten beheren
EntiteitCPT SlugBeschrijving
MeldingjobWerkopdracht/ticket met status, type, adres en beschrijving
WerkbonfileAfgeronde werkbon gekoppeld aan een melding — bevat werkzaamheden, materiaal en tijd
ContactcontactKlant/opdrachtgever met adres- en contactgegevens, gesynceerd met Moneybird

Geen van de CPTs is publiek queryable — ze fungeren puur als datastore.

Elk contact, elke melding en werkbon heeft een type:

TypeBeschrijvingSync naar Moneybird
maasdeltaWoningcorporatie — speciale regels, apart gefactureerdNee, nooit
particulierParticuliere klantJa
zakelijkZakelijke klantJa

Maasdelta-type wordt automatisch bepaald op basis van het adres (adressen uit de Maasdelta CSV database).

Monteur / Beheerder
├─ /login/ → WPForms login formulier
├─ /dashboard/ → Snelkoppelingen naar alle secties
├─ /meldingen/ → Lijst met filters + status modal
│ └─ Status wijzigen, verwijderen, werkbon starten
├─ /melding-aanmaken/ → Form 3493 (create / edit melding)
└─ /werkbon-invullen/ → Form 40 (werkbon invullen)
├─ Contact opzoeken of aanmaken
├─ Adres normaliseren via database
├─ Werkzaamheden + materiaal vastleggen
└─ Submit → FILE CPT + job status → Afgerond
└─ acf/save_post → Make.com webhook → Moneybird
Extern systeem (Moneybird / Make.com)
├─ POST /wp-json/acs/v1/jobs/create → Melding + contact aanmaken
└─ POST /wp-json/acs/v1/contacts/upsert → Contact sync (moneybird_id)

Een typische werkdag van een monteur:

1. Monteur logt in → /login/ → redirect naar /dashboard/
2. Beheerder maakt melding aan:
/melding-aanmaken/ → Form 3493
├─ Contact zoeken of nieuw aanmaken
├─ Adres invullen via Select2 chain
├─ Beschrijving + planningsdatum
└─ Submit → JOB CPT + contact upsert → webhook → Moneybird
3. Monteur bekijkt meldingen:
/meldingen/ → filter op status/type
├─ Klik op melding → modal met details
├─ Status wijzigen (Openstaand → In behandeling)
└─ "Werkbon invullen" klik → Form 40 met prefill
4. Monteur vult werkbon in:
/werkbon-invullen/?job_id=123
├─ Contact + adres vooringevuld (vergrendeld)
├─ Werkzaamheden toevoegen (modal + drag-drop tabel)
├─ Materiaal selecteren (categorieën + hoeveelheden)
├─ Handtekening zetten
├─ Verify checkbox aanvinken
└─ Submit → FILE CPT + job status → Afgerond
→ webhook → Moneybird factuur
5. Beheerder bekijkt rapporten:
/rapporten/ → filter op maand/straat/type
RolWP RolRechten
BeheerderadministratorVolledige toegang, alle WP capabilities
Monteursubscriber (uitgebreid)CRUD op meldingen/werkbonnen/contacten, delete rechten

Delete-rechten voor meldingen vereisen daarnaast het ACF admin veld op het gebruikersprofiel.

URLTemplateFunctie
/login/page-login.phpInlogscherm
/page-dashboard.phpDashboard met snelkoppelingen
/meldingen/page-jobs.phpMeldingen lijst met filters en paginatie
/melding-aanmaken/page-jobs-form.phpMelding aanmaken of bewerken
/werkbon-invullen/page-jobs-form.phpWerkbon invullen (hoofdformulier)
/rapporten/page-reports.phpRapportages met filters
ComponentVersieDoel
WordPress5.9+Platform
PHP7.4+IntlDateFormatter, type hints
WPForms ProLatestFormulieren (form 2, 40, 3493, 3500)
ACF ProLatestCustom fields, veldgroepen, options page
Node.js16+jQuery, Flatpickr, Select2 dependencies
CodeKit 3OptioneelSCSS compilatie, JS bundeling
DocumentBeschrijving
ArchitectuurStack, directory structuur, build tooling, JS module-interactie
Setup & DeploymentLokale setup, vereiste plugins, environment configuratie
DatamodelCPTs, ACF velden, database schema, field mapping tabellen
Werkbon FormulierForm 40 deep dive — werkzaamheden, materiaal, prefill, submit chain
Melding FormulierForm 3493 — create/edit modus, status logica, meldingen lijst
Contact SysteemMatching, deduplicatie, normalisatie, zoekmodal, upsert
AdressysteemDatabase, CSV import, lookups, Select2 keten, AJAX
REST APIAlle endpoints met request/response documentatie
AJAX Endpointswp_ajax handlers: delete, status, address lookup
Auth & RollenLogin flow, rollen, rechtenmatrix, sessie management
IntegratiesMake.com webhooks, Moneybird sync, debounce, skip rules
Admin InterfaceWP admin pagina’s, contact kolommen, database tools
Hooks RegisterCompleet overzicht van alle actions en filters
Security AuditBekende kwetsbaarheden, risico’s en aanbevelingen

De Werkbon app wordt gemigreerd naar de Beam stack (React 19, Vite, Cloudflare Workers, Supabase). Het datamodel wordt fundamenteel verbeterd:

  • 4 entiteiten i.p.v. 2: Contact → Melding → Klus → Werkbon
  • User journeys uitgewerkt voor klant, beheerder en monteur
  • Mobile-first voor de monteur, 30-seconden werkbon
DocumentBeschrijving
User JourneysDe ideale flow voor klant, beheerder en monteur
Datamodel (Nieuw)4-entiteiten Supabase schema met overerving, triggers en views
Migratie StackTechnische stack analyse, herbruikbare Beam componenten, API routes
  • Geen unit tests — alle logica is alleen handmatig getest
  • Open REST API’s — alle endpoints zijn publiek toegankelijk zonder authenticatie (AVG/GDPR risico)
  • Prefix-mix — functies gebruiken 7 verschillende prefixen (acs_, beam_, werkbon_, myproject_, hra_, thra_, my_)
  • Geen namespaces of classes — procedurele code, geen autoloader
  • Onvoorspelbare laadvolgorde — functions.php gebruikt glob() voor het laden van bestanden
  • Webhook secrets in broncode — Make.com URLs hardcoded en gecommit naar Git
  • main-min.js niet geminificeerd — bestandsnaam is misleidend