Lommers – Approval Before Payment
Handmatige goedkeuring vóór betaling. Checkout kan beperkt worden tot "Betaalverzoek (na goedkeuring)". Na goedkeuring ontvangt de klant een /order-pay link. Inclusief: testmodus, debug logging, Mollie-failsafes, uitnodiging & herinnering per e-mail, handmatige acties en planning.
by Jouw naam · github.com/spurtdigital/lommerslederwaren_payments
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/spurtdigital/lommerslederwaren_payments/archive/refs/heads/main.zipVersie: 1.7.0
Voor: WordPress + WooCommerce
Text Domain: lommers-approval
Vereisten: WordPress 5.8+, WooCommerce 6.0+, PHP 7.4+
Compatibel met: Mollie for WooCommerce, WooCommerce Blocks, HPOS (High-Performance Order Storage)
Wat doet deze plugin?
Deze plugin voegt een handmatige goedkeuringsworkflow toe aan WooCommerce, waarbij bestellingen eerst worden gecontroleerd voordat klanten kunnen betalen. Specifiek ontworpen voor Lommers Lederwaren: voorraadcontrole van tassen voor betaling, met automatische betaalverzoeken, herinneringen en annuleringen.
Kernflow:
- Klant bestelt zonder direct te betalen
- Admin controleert voorraad
- Admin keurt goed -> klant krijgt betaallink per e-mail
- Klant betaalt via iDeal/Mollie
- Bij niet-betalen: automatische herinnering en eventueel annulering
Welk probleem lost dit op?
Het probleem
Standaard WooCommerce laat klanten direct betalen. Als een product niet op voorraad is, moet de shop de betaling terugstorten: administratieve rompslomp en teleurgestelde klanten.
De oplossing
Klanten plaatsen een bestelling zonder betaling. De webshop controleert voorraad, keurt goed, en stuurt dan pas een betaalverzoek. Geen onnodige terugbetalingen, betere klantervaring.
Functionaliteiten
1. Custom orderstatussen
- Ter goedkeuring (
wc-ter-goedkeuring) - Order wacht op handmatige controle - Betaling verzocht (
wc-betaling-verzocht) - Order goedgekeurd, klant kan betalen
2. Aangepaste checkout
- Checkout toont alleen "Betaalverzoek (na goedkeuring)" (configureerbaar)
- Na goedkeuring zijn normale betaalmethoden (iDeal, Mollie, etc.) beschikbaar op
/order-pay - Ondersteuning voor WooCommerce Blocks checkout
3. Automatische e-mails (4 typen)
| Wanneer | Class | |
|---|---|---|
| Order ontvangen | Bij status ter-goedkeuring |
LAP_Email_Order_Confirmation |
| Betaling verzocht | Bij status betaling-verzocht |
LAP_Email_Request_Payment |
| Betalingsherinnering | Na X werkdagen zonder betaling | LAP_Email_Reminder |
| Order geannuleerd | Bij annulering vanuit relevante status | LAP_Email_Cancelled |
Alle e-mails gebruiken LAP_Email_Base als gedeelde base class met gemeenschappelijke placeholders, template rendering en WooCommerce e-mail styling (header, footer).
Alle e-mailteksten zijn aanpasbaar via de instellingenpagina met placeholders:
{order_number}- Bestelnummer{customer_name}- Voornaam klant{payment_url}- Betaallink (wordt button in HTML){order_total}- Totaalbedrag{iban}- IBAN (configureerbaar via instellingen){account_name}- Rekeninghouder (configureerbaar via instellingen)
4. Automatische herinneringen
- Dagelijkse cron (
lap_daily_reminders) om 09:10 - Configureerbaar aantal werkdagen (standaard 4)
- Alleen voor orders met
_lap_managed_ordermeta (vanaf 2026) - Weekenden worden overgeslagen bij berekening
5. Automatisch annuleren
- Dagelijkse cron (
lap_daily_auto_cancel) om 09:30 - Configureerbaar aantal dagen (standaard 14)
- Stuurt annuleringsmail naar klant
- Alleen voor managed orders
6. Mollie-failsafes
Automatische detectie van voltooide Mollie-betalingen via:
- Order notes (teksten als "Payment completed with Mollie")
- Transaction ID op order
- Mollie meta data (
_mollie_payment_id,_mollie_order_id) - Bedankpagina-detectie (
template_redirect) woocommerce_payment_completehook safety net
7. Admin order-acties
| Actie | Functie |
|---|---|
| Keur goed & vraag betaling | Status -> betaling-verzocht + betaalmail |
| Stuur uitnodiging nu | Verstuurt betaalmail handmatig |
| Stuur herinnering nu | Verstuurt herinnering direct |
| Forceer betaald-status | Handmatige failsafe naar processing/completed |
| TEST: Markeer als betaald | Simuleert betaling (alleen testmodus) |
8. Dashboard
- Realtime statistieken: ter goedkeuring, betaling verzocht, conversie, omzet
- Periode-selector (week/maand/jaar)
- Omzetgrafiek (30 dagen) met CSS tooltips
- Activiteitsgrafiek (7 dagen) met stacked bars: betaald (groen), geannuleerd (rood), open (paars)
- Statusverdeling donut chart (SVG): ter goedkeuring, betaling verzocht, verzendklaar
- Vergelijkingen met vorige periode (pijltjes omhoog/omlaag)
- Quick actions: direct goedkeuren en herinnering sturen vanuit dashboard (nonce-beveiligd)
- Betaallink kopieerknop per order (clipboard API)
- Configuratie-overzicht met status-indicators
- Dummy data modus voor testen
- Transient caching (9 keys, 5 min TTL) met automatische invalidatie bij statuswijzigingen
9. Testmodus
- Test-betaalgateway op
/order-paypagina's - Webhook-simulator:
?lap_sim_webhook={ORDER_ID}&_wpnonce={nonce} - Admin-badge "TESTMODE AAN" in admin bar
- Dashboard dummy data optie
- Handmatige runners voor reminders en auto-cancel
10. Debug logging
Alle gebeurtenissen naar WooCommerce logs (bron: lommers-approval):
- E-mailverzendingen, statuswijzigingen, Mollie-detecties
- Herinnering- en annuleringsacties
- Logs: WooCommerce -> Status -> Logs -> filter
lommers-approval
Orderflow
Klant bestelt (gateway: "Na goedkeuring")
|
v
[Ter goedkeuring]
| Mail naar klant: "Bedankt, we controleren voorraad"
| Mail naar admin: WooCommerce "Nieuwe bestelling"
|
v
Admin controleert bestelling
|
+-- GOEDKEUREN --> [Betaling verzocht]
| | Mail naar klant: betaallink + IBAN
| |
| v
| Klant betaalt via iDeal/Mollie
| |
| v
| [In behandeling / Voltooid]
| | Mail naar klant: bevestiging
|
| --- OF ---
|
| Klant betaalt niet
| |
| v (na X werkdagen)
| Herinnering verstuurd
| |
| v (na Y dagen)
| [Geannuleerd]
| | Mail naar klant: annulering
|
+-- WEIGEREN --> [Geannuleerd]
Installatie
- Upload naar
/wp-content/plugins/lommers-payments/ - Activeer via WordPress admin -> Plugins
- Ga naar Goedkeuren & Betalen -> Instellingen
- Configureer herinneringen, auto-cancel en e-mailtemplates
Instellingen
Algemene instellingen
| Instelling | Beschrijving | Standaard |
|---|---|---|
| Checkout beperken | Alleen "Betaalverzoek (na goedkeuring)" op checkout | Aan |
| Testmodus | Test-gateway, simulaties, admin tools | Uit |
| Test alleen voor admins | Verberg testtools voor niet-admins | Aan |
| Dashboard dummy data | Testdata op dashboard (alleen in testmodus) | Uit |
| Status forceren na betaling | Auto-doorzettten naar processing/completed | Aan |
| Debug logging | Log naar WooCommerce logs | Uit |
Herinneringen & Automatisering
| Instelling | Beschrijving | Standaard |
|---|---|---|
| Herinneringsmail | Auto herinnering bij niet-betalen | Uit |
| Werkdagen tot herinnering | Aantal werkdagen | 4 |
| Automatisch annuleren | Auto-annulering bij te lang niet-betalen | Uit |
| Dagen tot annuleren | Aantal kalenderdagen | 14 |
Technische details
Bestandsstructuur
lommers-payments/
├── lommers-approval-payments.php # Hoofdbestand: bootstrap + core logic (945 regels)
├── README.md # Deze documentatie
├── AGENTS.md # Development guidelines voor AI agents
├── includes/
│ ├── class-lap-gateway-approval.php # Gateway: "Betaalverzoek (na goedkeuring)" (58 regels)
│ ├── class-lap-gateway-testpay.php # Test-gateway (62 regels)
│ ├── class-lap-settings.php # Instellingenpagina + registratie (434 regels)
│ ├── class-lap-dashboard.php # Dashboard met statistieken (1906 regels)
│ ├── class-lap-email-base.php # Gedeelde e-mail base class (157 regels)
│ ├── class-lap-email-request-payment.php # E-mail: Betaling verzocht (87 regels)
│ ├── class-lap-email-reminder.php # E-mail: Herinnering (88 regels)
│ ├── class-lap-email-cancelled.php # E-mail: Geannuleerd (90 regels)
│ └── class-lap-email-order-confirmation.php # E-mail: Bevestiging ter goedkeuring (89 regels)
└── templates/emails/
├── request-payment.php # HTML template: betaalverzoek
├── request-payment-reminder.php # HTML template: herinnering
├── order-cancelled.php # HTML template: geannuleerd
├── order-confirmation.php # HTML template: bevestiging ter goedkeuring
└── plain/
├── request-payment.php # Plain text: betaalverzoek
├── request-payment-reminder.php # Plain text: herinnering
├── order-cancelled.php # Plain text: geannuleerd
└── order-confirmation.php # Plain text: bevestiging ter goedkeuring
WordPress Options (wp_options)
| Optie | Type | Default | Beschrijving |
|---|---|---|---|
lap_test_mode |
boolean | 0 | Testmodus |
lap_test_admin_only |
boolean | 1 | Test alleen voor admins |
lap_dashboard_dummy_data |
boolean | 0 | Dashboard dummy data |
lap_debug_log |
boolean | 0 | Debug logging |
lap_force_approval_checkout |
boolean | 1 | Checkout beperken |
lap_force_paid_bump |
boolean | 1 | Status forceren na betaling |
lap_reminder_enabled |
boolean | 0 | Herinneringen inschakelen |
lap_reminder_days |
integer | 4 | Werkdagen tot herinnering |
lap_auto_cancel_enabled |
boolean | 0 | Auto-cancel inschakelen |
lap_auto_cancel_days |
integer | 14 | Dagen tot auto-cancel |
lap_email_request_payment_subject |
string | '' | Custom e-mail onderwerp |
lap_email_request_payment_heading |
string | '' | Custom e-mail koptekst |
lap_email_request_payment_content |
string | '' | Custom e-mail inhoud |
lap_email_reminder_* |
string | '' | Herinnering templates |
lap_email_cancelled_* |
string | '' | Annulering templates |
lap_email_confirmation_subject |
string | '' | Bevestigingsmail onderwerp |
lap_email_confirmation_heading |
string | '' | Bevestigingsmail koptekst |
lap_email_confirmation_content |
string | '' | Bevestigingsmail inhoud |
lap_iban |
string | 'NL23RABO0102107661' | IBAN voor e-mails |
lap_account_name |
string | 'Lommers Lederwaren' | Rekeninghouder voor e-mails |
lap_version |
string | '' | Opgeslagen plugin versie (voor migraties) |
Order Meta Data
| Meta key | Beschrijving |
|---|---|
_lap_managed_order |
Timestamp wanneer order door plugin is aangemaakt (veiligheidsfilter) |
_lap_reminder_sent |
Timestamp wanneer herinnering is verstuurd |
_lap_auto_cancelled |
Timestamp wanneer automatisch geannuleerd |
Cron Events
| Event | Schema | Tijdstip | Beschrijving |
|---|---|---|---|
lap_daily_reminders |
daily | 09:10 | Herinneringen versturen |
lap_daily_auto_cancel |
daily | 09:30 | Onbetaalde orders annuleren |
Hooks & Filters
Custom hooks:
lap_daily_reminders- Dagelijkse cron voor herinneringenlap_daily_auto_cancel- Dagelijkse cron voor auto-annuleringwoocommerce_order_action_lap_approve_and_request_payment- Goedkeur-actiewoocommerce_order_action_lap_send_invitation_now- Uitnodiging-actiewoocommerce_order_action_lap_send_reminder_now- Herinnering-actiewoocommerce_order_action_lap_mark_paid_test- Test betaald-actiewoocommerce_order_action_lap_force_paid_bump_action- Forceer betaald-actie
Gebruikte WooCommerce hooks:
woocommerce_checkout_order_processed- Zet nieuwe orders op "Ter goedkeuring"woocommerce_order_status_changed- Detecteert statuswijzigingen (paid-bump, mails)woocommerce_payment_complete- Safety net voor betaalstatussenwoocommerce_order_status_betaling-verzocht- Verstuurt betaalmailwoocommerce_available_payment_gateways- Gateway-zichtbaarheid (prio 9999)woocommerce_blocks_payment_method_type_registration- Blocks gateway filterwoocommerce_new_order- Markeert order met_lap_managed_ordermetawp_insert_comment- Detecteert Mollie order notes
Bekende aandachtspunten
- Gemixte array syntax: Merendeel
array()maar sommige plaatsen gebruiken[](admin bar, settings) - Uitgecommentarieerde code:
lap_send_wc_emailcall in approve-actie is uitgecommentarieerd - email wordt via status change hook verstuurd - Hoofdbestand groot: 945 regels in
lommers-approval-payments.php- zou opgesplitst kunnen worden in classes - Multi-reminder niet ondersteund: Slechts 1 herinnering per order;
_lap_reminder_sentis boolean ipv counter
Changelog
1.7.0 (Huidig)
- Email architectuur gerefactord: LAP_Email_Base als gedeelde base class
- 4 nieuwe email classes (LAP_Email_Request_Payment, LAP_Email_Reminder, LAP_Email_Cancelled, LAP_Email_Order_Confirmation)
- Bevestigingsmail ter goedkeuring nu via WooCommerce email systeem (was wp_mail)
- HPOS (High-Performance Order Storage) compatibiliteit
- Versie-migratie mechanisme voor toekomstige updates
- Dashboard chart data caching (transients, 5 min TTL)
- Dashboard charts dynamisch per periode (week/maand/jaar)
- Dashboard visuele overhaul: moderne card design, CSS variabelen, responsive layout
- Dashboard quick actions: goedkeuren en herinnering sturen direct vanuit dashboard
- Dashboard betaallink kopieerknop per order (clipboard API)
- Dashboard stacked activiteitsgrafiek (betaald/geannuleerd/open)
- Dashboard statusverdeling donut chart (SVG)
- Dashboard inline SVG icons (Feather icons stijl)
- IBAN en rekeninghouder configureerbaar via instellingen
- Hardcoded cutoff datum verwijderd
- Alle date() calls vervangen door wp_date() (timezone-aware)
- Deactivation hook: cron events en transients opruimen
- Security verbeteringen: escaping, nonce sanitization, capability checks
- Stock restoration bij auto-cancel
- Re-entry guard en duplicate email preventie
- Pagination bug fix in reminder en auto-cancel runners
1.6.0
- Dashboard met statistieken en grafieken
- Automatische annulering na X dagen
- E-mail templates aanpasbaar via instellingen
- Mollie-detectie op bedankpagina
- Meta veld
_lap_managed_ordervoor veilige orderfiltering - Dummy data optie voor testen
- Periode-selector (week/maand/jaar) op dashboard
- Vergelijkingen met vorige periode
1.5.0
- Automatische betalingsherinneringen
- Werkdagen-berekening
- Custom WooCommerce e-mail classes
- Handmatige test-runners
1.4.0
- Mollie failsafes
- Order notes detectie
- Payment complete safety net
- Testmodus met admin-badge
1.3.0
- Custom orderstatussen
- E-mailintegratie
- Admin order-acties
- Debug logging
1.2.0
- Gateway visibility rules
- Order-pay page filtering
- WooCommerce Blocks support
1.1.0
- Testgateway
- Webhook-simulator
- Settings page
1.0.0
- Eerste release
- Basis goedkeuringsworkflow
Support & Ontwikkeling
Text Domain: lommers-approval
Ontwikkelaar: Lommers Lederwaren
Zie AGENTS.md voor code style guidelines, architectuur en development workflow voor AI agents.