Skip to content

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:

Editie (ECK entiteit) ←→ Commerce Product (Publicatie)
Artikelen (nodes via view)

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:

  1. Taxonomy aanmaken: Publicatietype (Tijdschrift/Boek) via Structure → Taxonomy
  2. Veld aanmaken: field_editie_referentie op Publicatie (handmatig via UI)
  3. Veld aanmaken: field_gerelateerd_artikel op Publicatie (handmatig via UI)
  4. Veld aanmaken: field_publicatietype (taxonomy reference) op Publicatie
  5. Conditional fields instellen:
  6. Als Publicatietype = "Tijdschrift" → toon field_editie_referentie
  7. Als Publicatietype = "Boek" → toon field_gerelateerd_artikel
  8. Display configureren: Cover afbeelding vanuit Editie tonen op product
  9. Publicatie → Weergave beheren → Editie veld → Formatter: "Rendered entity"
  10. Structure → ECK → Editie → Manage display → Toon alleen cover
  11. Veld op Editie: field_commerce_product (terug naar product voor "In winkelwagen" knop)
  12. 🔄 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

  1. Één producttype (Default) → Onderscheid zit in variatietypes, simpeler voor collega's
  2. Variatietypes bepalen BTW via custom module → Automatisch, foutloos, werkt voor heel EU
  3. ECK Editie blijft apart → Content vs Commerce gescheiden, flexibeler
  4. Taxonomy voor publicatiesoorten → Flexibel, schaalbaar, makkelijk filters/menu's
  5. EU VAT plugin → Automatische tarieven per land, B2B support, compliant
  6. Geen productattributen → Elke editie unieke beschrijving/cover, meer flexibiliteit
  7. Merchandise apart variatetype → Jaarkalender = 21% BTW (niet alles fysiek is 9%)
  8. Abonnement hybride (digitaal + fysiek) → Beide 9% BTW, toekomst: recurring billing

🚀 Volgende Stappen (Morgen)

  1. Finish publicatie setup (taxonomy, velden, conditional fields)
  2. Finish editie koppeling (referentievelden beide kanten, cover display)
  3. Eerste testproduct aanmaken (VG 2025-5)
  4. Testen: Product toevoegen aan winkelwagen → checkout → BTW controleren (NL + BE test)
  5. Config exporteren voor live site
  6. 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!