Samenvatting Commerce Setup - 30 oktober 2024¶
🎯 Wat we vandaag hebben bereikt¶
1. Commerce Structuur Ontworpen¶
Producten: - Kaartjes/tickets (21% BTW) - Fysieke producten: tijdschriften, boeken (9% BTW) - Digitale toegang: abonnementen (9% BTW)
Beslissing: Één commerce winkel voor alles (niet aparte winkels per categorie)
Reden: - Eén checkout voor klanten (kunnen alles in één keer kopen) - Centraal orderbeheer en rapportage - Makkelijker voor klantenservice - Commerce ondersteunt verschillende BTW-tarieven per producttype
2. BTW Configuratie ✅¶
Setup: - Belastingtype: European Union VAT - Winkellocatie: Nederland - Factureringslanden: Nederland + België - Prijsweergave: Inclusief BTW (consumenten-vriendelijk) - Tarieven: Automatisch 21%/9% (NL) en 21%/6% (BE)
Reden voor EU VAT plugin: - Automatische BTW-tarieven per EU-land - Ondersteuning voor B2B (BTW-verlegd bij geldig BTW-nummer) - Voldoet aan EU digitale diensten richtlijn - Rapportage geschikt voor BTW-aangifte
Reden voor "Inclusief BTW": - Nederlandse B2C standaard (consument verwacht eindprijs) - Voorkomt verrassingen bij checkout - Zakelijke klanten kunnen BTW-nummer opgeven voor BTW-verlegging
BTW-detectie: Commerce gebruikt factuuradres tijdens checkout (niet user profiel), dus Belgische klanten krijgen automatisch Belgische tarieven.
3. Product Structuur Vereenvoudigd¶
Producttype: - Default (enige producttype)
Reden: - Onderscheid zit in Productvariatietypes, niet producttypes - Producttypes zijn vooral voor organisatie bij complexe catalogi - Eén type = simpeler voor collega's
Productvariatietypes (6): 1. Publicatie (9% BTW) - tijdschriften + boeken 2. E-book (9% BTW) - digitale downloads 3. Abonnement (9% BTW) - digitale toegang website + papieren tijdschrift 4. Ticket (21% BTW) - congreskaartjes 5. Merchandise (21% BTW) - overige producten (jaarkalenders, gadgets) 6. ~~Productattributen: Niet gebruikt~~ (elk product = apart item)
Reden voor Abonnement apart (niet onder Publicatie): - Andere fulfillment (terugkerend ipv eenmalig) - Toekomstig: Commerce Recurring voor automatische verlengingen - Hybride: Kan zowel digitaal (website toegang) als fysiek (papieren tijdschrift) zijn - beide 9% BTW
Reden voor E-book apart: - Andere fulfillment (download vs verzending) - Mogelijk andere BTW-regels bij export - Andere voorraadlogica (onbeperkt digitaal)
Reden voor Merchandise variatetype: - Niet alles fysiek is 9% BTW (jaarkalender = 21%) - Mogelijk toekomstige producten buiten boeken/tijdschriften - Voorkomt uitzonderingen binnen Publicatie type
Reden geen productattributen: - Jullie maken 6 aparte tijdschriftnummers per jaar - Elk nummer heeft unieke beschrijving/cover/link naar digitale editie - Aparte producten = meer flexibiliteit
SKU-structuur (Artikelnummers):
[Type]-[Product]-[Variatie]
Voordelen:
- Direct zichtbaar wat voor product het is
- Makkelijk sorteren en filteren
- Schaalbaar bij meer producten
- Handig voor boekhouding/voorraad
- Letters, cijfers, streepjes allemaal toegestaan
Voorbeelden:
- 2-VG-202505 (Publicatie - Voedingsgeneeskunde - mei 2025)
- 2-BK-001 (Publicatie - Boek - eerste boek)
- 1-CG-VR (Ticket - Congres - Vrijdag)
- 3-DIG-J (Abonnement - Digitaal - Jaar)
- 4-MERCH-001 (Merchandise - item 001)
Type codes:
1 = Ticket
2 = Publicatie
3 = Abonnement
4 = Merchandise
5 = E-book
4. ⭐ Custom Module: Automatische BTW ✅¶
Probleem: Drupal Commerce heeft geen ingebouwde manier om BTW automatisch te koppelen aan variatietypes. Dit is een bekend "gemis" in de Commerce architectuur.
Oplossing: Custom module vg_commerce_tax
- Locatie: /web/modules/custom/vg_commerce_tax/
- Functie: Tax Rate Resolver die automatisch juist BTW-tarief koppelt aan variatetype
- Mapping:
- Publicatie, Abonnement, E-book → 9% (reduced)
- Ticket, Merchandise → 21% (standard)
- Werkt voor: Alle EU-landen (België krijgt automatisch 21%/6%)
- Status: ✅ Geïnstalleerd en actief
Reden voor custom module: - Geen contrib module beschikbaar voor deze functionaliteit - Voorkomt handmatige fouten door medewerkers - Blijft werken bij uitbreiding naar andere EU-landen - 1x investering, werkt daarna altijd automatisch - Eenvoudig uit te breiden als nieuwe variatietypes worden toegevoegd
Resultaat: Medewerkers hoeven alleen variatetype te kiezen, BTW wordt automatisch correct toegepast!
Belangrijk: Het eerder toegevoegde veld "BTW-type" kan nu verwijderd worden - het wordt niet meer gebruikt.
5. Koppeling Editie (ECK) ↔ Product¶
Structuur:
Beslissing: Editie blijft ECK entiteit (niet Commerce Product)
Reden: - ECK Editie = editorial content (bundelt artikelen, beschrijving, archief) - Commerce Product = transactioneel (verkopen, prijs, voorraad) - Scheiding van zorgen: content editors vs commerce admin - Editie kan bestaan zonder product (oude gratis nummers) - Losse permissies mogelijk - Toekomst: digitaal abonnement geeft toegang tot alle edities (content), product is alleen "koop papieren versie"
Plan:
- Publicatie product → veld field_editie_referentie → ECK Editie
- ECK Editie → veld field_commerce_product → terug naar product
- Cover afbeelding: Wordt vanuit Editie "doorgetrokken" naar product (via Rendered entity display)
- Voordeel: Cover 1x opslaan, overal beschikbaar, update = direct zichtbaar
Implementatie cover:
- Display formatter voor field_editie_referentie: "Rendered entity"
- View mode voor Editie: toon alleen cover afbeelding
- Voorkomt dubbel opslaan van afbeeldingen
Status: Veld nog handmatig aan te maken via UI
6. Publicaties: Tijdschrift vs Boek¶
Gekozen aanpak: Taxonomy binnen Publicatie variatetype
Reden: - Beide hebben 9% BTW (dus zelfde variatetype kan) - Taxonomy = flexibel uitbreidbaar - Views kan hierop filteren (menu "Onze boeken" / "Tijdschrift") - Simpele dropdown bij product aanmaken
Taxonomy "Publicatietype": - Tijdschrift (VG losse nummers) - Boek (uitgegeven boeken)
Conditional Fields (reeds geïnstalleerd):
- Tijdschrift: Toont field_editie_referentie (→ ECK Editie)
- Boek: Toont field_gerelateerd_artikel (→ Artikel node met boekbespreking)
Reden voor 2 referentievelden: - Tijdschrift linkt naar Editie (bundelt alle artikelen van die editie) - Boek linkt naar boekbespreking artikel - Beide optioneel - je vult in wat van toepassing is - Conditional fields houdt formulier opgeruimd
Voordeel: Beide 9% BTW, clean formulier, flexibel uitbreidbaar
📋 Nog te doen (volgende sessie)¶
Hoge prioriteit:¶
- ✅ Taxonomy aanmaken: Publicatietype (Tijdschrift/Boek) via Structure → Taxonomy
- ✅ Veld aanmaken:
field_editie_referentieop Publicatie (handmatig via UI) - ✅ Veld aanmaken:
field_gerelateerd_artikelop Publicatie (handmatig via UI) - ✅ Veld aanmaken:
field_publicatietype(taxonomy reference) op Publicatie - ✅ Conditional fields instellen:
- Als Publicatietype = "Tijdschrift" → toon
field_editie_referentie - Als Publicatietype = "Boek" → toon
field_gerelateerd_artikel - ✅ Display configureren: Cover afbeelding vanuit Editie tonen op product
- Publicatie → Weergave beheren → Editie veld → Formatter: "Rendered entity"
- Structure → ECK → Editie → Manage display → Toon alleen cover
- ✅ Veld op Editie:
field_commerce_product(terug naar product voor "In winkelwagen" knop) - 🔄 Eerste testproduct: VG tijdschrift aanmaken en testen
Toekomstige features:¶
- Ticket systeem: QR-codes genereren bij aankoop
- Optie 1: Commerce License + custom QR generatie
- Optie 2: Custom module (bij order completion)
- Library:
endroid/qr-code(Composer) - E-book downloads: Commerce File of custom fulfillment
- Abonnementen: Commerce Recurring voor automatische verlengingen (fysiek + digitaal)
🔧 Technische Details voor Collega's¶
Modules geïnstalleerd:¶
- ✅ Commerce 3.2.0
- ✅ Commerce Tax (EU VAT)
- ✅ ECK (Entity Construction Kit)
- ✅ Conditional Fields
- ✅ Custom: vg_commerce_tax (BTW automatisering)
Configuratie:¶
- Commerce winkel: Default (NL/BE)
- BTW-nummers: Werkend voor zakelijke klanten (BTW-verlegd)
- Klantprofielen: Geconsolideerd naar Commerce Customer (adresboek werkend)
- Producttype instellingen:
- ✅ Alle 4 variatietypes aangevinkt
- ❌ "Meerdere variaties" uitgevinkt (aparte producten per editie)
- ✅ "Productvariatievelden toevoegen" aangevinkt (overzichtelijker formulier)
💡 Belangrijke Beslissingen & Redenen¶
- Één producttype (Default) → Onderscheid zit in variatietypes, simpeler voor collega's
- Variatietypes bepalen BTW via custom module → Automatisch, foutloos, werkt voor heel EU
- ECK Editie blijft apart → Content vs Commerce gescheiden, flexibeler
- Taxonomy voor publicatiesoorten → Flexibel, schaalbaar, makkelijk filters/menu's
- EU VAT plugin → Automatische tarieven per land, B2B support, compliant
- Geen productattributen → Elke editie unieke beschrijving/cover, meer flexibiliteit
- Merchandise apart variatetype → Jaarkalender = 21% BTW (niet alles fysiek is 9%)
- Abonnement hybride (digitaal + fysiek) → Beide 9% BTW, toekomst: recurring billing
🚀 Volgende Stappen (Morgen)¶
- Finish publicatie setup (taxonomy, velden, conditional fields)
- Finish editie koppeling (referentievelden beide kanten, cover display)
- Eerste testproduct aanmaken (VG 2025-5)
- Testen: Product toevoegen aan winkelwagen → checkout → BTW controleren (NL + BE test)
- Config exporteren voor live site
- Beslissen over ticket QR-code implementatie
Status Development Site: Volledig functioneel voor eerste producten
Klaar voor: Testproducten en checkout flow testen
Live deployment: Na succesvolle test op dev
Belangrijk voor morgen: Deze samenvatting als context meegeven zodat we direct verder kunnen zonder herhaling!