De nieuwste versie van Magento (beschikbaar vanaf Q3 2018) bevat een zeer waardevolle uitbreiding: Magento MSI, oftewel multi source inventory.
Nu al te downloaden vanaf Github
Met Magento MSI is het mogelijk om meerdere voorraadbronnen aan een (één of meerdere) websites te koppelen. Het aantal waarin een product beschikbaar is, wordt berekend op basis van de bronnen die voor een website beschikbaar zijn gesteld. Het groeperen van bronnen én bepalen welke groep van bronnen per webshop beschikbaar is gebeurt met een nieuwe concept: 'stocks'.
Verkoopbaar aantal - een totaalsom van de gekoppelde stocks - muteert direct bij verkoop. Maar, het afboeken van bronnen gebeurt pas bij het daadwerkelijk verzenden van producten (het aanmaken van een verzending). Dit gebeurt via 'source selection algorithms', die vooralsnog moeten worden geprogrammeerd, maar mogelijk in de toekomst kunnen worden geconfigureerd vanuit de backend.
Ingewikkeld? Zeker!
Maar MSI is een zeer grote stap voor Magento.
Opmerking: Magento MSI is nog in ontwikkeling. Er wordt nog gezocht naar de juiste termen voor de concepten binnen het systeem. Om die redenen noemen we stocks in dit artikel 'stocks' - en niet 'voorraad'. De term voorraad staat in de Nederlandse taal teveel voor daadwerkelijk fysieke producten op de plank, in plaats van het 'cijfer dat voorraad representeert'.
Tot nu toe was multi inventory alleen mogelijk met het gebruik van modules. Omdat er geen ondersteuning was in de core waren beschikbare oplossingen zeer complex. Er onstonden bij het gebruik van zulke modules veel compatibility issues met core modules en andere third party modules.
De reden voor deze complexiteit?
Voorraad (qty) was altijd global. Het was niet mogelijk om deze waarde op een dieper niveau te overschrijven.
Configuration | Default (global) | Website | Store Group | Store View |
Base URL | ✓ | ✓ | ✓ | |
Product price | ✓ | ✓ | ||
Product qty | ✓ | |||
Locale (language frontend) | ✓ | ✓ | ✓ | |
Product visibility | ✓ | ✓ | ✓ | |
Orders | ✓ | ✓ | ||
Customers | ✓ | ✓ | ||
Root category configuration | ✓ | |||
MSI | Decoupled |
Magento MSI is in werking losgekoppeld van bovenstaand stramien. Er kunnen kruislings verbanden getrokken worden tussen websites en fysieke voorraadlocaties.
Doordat 'voorraad' nu wordt gescheiden van 'verkoopbaar aantal' (daarover later meer), is een configuratie met backorders of pre-orders ook te realiseren.
Magento multi source inventory is interessant voor de volgende (denkbeeldige) situaties:
Nieuw met Magento Multi Source Inventory zijn bronnen. Een bron is een 'voorraadlocatie'. Je maakt een bron aan voor iedere locatie waar producten fysiek op voorraad (kunnen) liggen. Dus bijvoorbeeld een winkel, het centrale magazijn en het magazijn van de fulfilmentpartij.
Voor iedere bron die aangemaakt wordt, kan bij een product een aantal worden ingevuld.
In ons voorbeeld registreren we 4 bronnen. Magazijn (Warehouse) LA, Magazijn DE, Store NL (voorraad in de winkel) en het Magazijn in NY.
De hoeveelheid informatie benodigd voor het aanmaken van een bron is beperkt. Eigenlijk zijn op dit punt alleen naam en code relevant.
Nog een nieuw concept zijn 'stocks'. Een stock groepeert meerdere bronnen en wordt gekoppeld aan een channel. Een channel is een nieuwe term; maar je kiest hier een website.
Een stock dient als virtuele, geaggregeerde representatie voor de bronnen van een verkoop kanaal.
Beetje cryptisch, maar onthoudt dit even.
In ons voorbeeld maken we een stock aan, die bestaat uit de sources Store NL en Warehouse DE.
Stock: Europe Bronnen: Store NL, Warehouse DE
Een stock wordt tevens aan een website gekoppeld. Dit betekent dat alle verkopen via deze website worden afgeschreven van één (of meerdere) bronnen onderdeel zijn van de stock.
De uiteindelijke bron(nen) waarvan de voorraad bij het aanmaken van een verzending wordt afgeschreven, wordt geselecteerd via het source selection algorithm. Maar daarover later meer.
Dit overzicht maakt duidelijk hoe onze setup nu is.
Stock: Europe
Bronnen: Store NL, Warehouse DE
Stock: US
Bronnen: Warehouse NY, Warehouse LA
Het mooie van deze constructie is dat uitbreiden weinig inspanning vereist. Stel dat we in het voorbeeld een extra magazijn in Frankrijk openen (of fulfilmentpartij kiezen). We hoeven dan alleen een bron aan te maken en deze te koppelen onder de Europe stock. En mogelijk ook de US stock, als we vinden dat US orders ook vanuit dit magazijn mogen worden geleverd.
Nu bronnen en stocks zijn aangemaakt, is het interessant om te kijken naar de product bewerk pagina in het Magento adminpanel.
Het is mogelijk om hier per bron die is aangemaakt in te vullen wat het aantal is dat er fysiek op locatie ligt. In ons geval dus voorraad voor de bronnen Store NL, Warehouse DE, Warehouse LA en Warehouse NY.
Samenvatting tot nu toe: bij een product registreer je per bron het aantal voorradig. Verschillende bronnen samengevoegd vormen een stock. Een stock is gekoppeld aan een website.
In het productgrid zien we twee nieuwe kolommen: Quantity per Source (Hoeveelheid per bron) en Salable Quantity (Verkoopbaar aantal).
Met MSI is er een belangrijke shift gemaakt rondom voorraad van producten.
Quantity per source representeert (goed zichtbaar in de kolom) de fysiek aanwezige voorraad op een locatie. We willen dit cijfer pas muteren wanneer een verzendig is aangemaakt. Niet wanneer een bestelling is geplaatst, wat in eerdere versies van Magento het geval is.
Nieuw is 'verkoopbaar aantal. Verkoopbaar aantal (Salable Quantity) is een optelsom van de beschikbare bronnen, gegroepeerd in stocks. Door de relatie tussen stocks en channels (websites), zien we in het adminpanel weliswaar alle stocks, maar is het aantal verkoopbaar per website anders.
In ons geval:
Europe = 2
(Store NL: 2 + Warehouse DE: 0)
Er zijn via websites gekoppeld aan de 'Europe' stock slechts 2 producten verkoopbaar
US = 18
(Warehouse LA: 12 + Warehouse NY: 6)
Er zijn via websites gekoppeld aan de 'United States' stock 18 producten verkoopbaar
Een bezoeker kan dus in websites gekoppeld aan de EU stock slechts 2 stuks van het product bestellen. Maar, bezoekers in de US kunnen 18 stuks van het product bestellen.
Wordt er een bestelling geplaatst, dan wordt de bestelde aantal direct van de Verkoopbaar aantal afgeboekt.
Net als voorheen 'qty' deed, triggert de waarde 'verkoopbaar aantal' per website een aantal meldingen en acties (afhankelijk van configuratie):
Verkoopbaar aantal wordt afboekt wanneer een bestelling wordt geplaatst en betaald.
Bij het maken van een verzending wordt het past echt interessant. Pas op dit moment wordt namelijk bepaald van welke bron voorraad daadwerkelijk wordt afgeboekt.
Dit gebeurt via een nieuw geïntroduceerd concept: Source selection algorithms (bron selectie algorithme).
Met source selection algorithms wordt het mogelijk om op basis van alle interessante informatie van klanten, producten, adressen, bronnen en stocks uit te rekenen waarvandaan een bestelling het beste uitgeleverd kan worden.
Bijvoorbeeld:
Dat bron selectie gebeurt bij het maken van verzendingen, in plaats van bij het plaatsen van een bestelling, is geen toeval.
Source selections algorithms kunnen erg complex zijn en dus rekenkracht vereisen. Zeker als ze worden uitgevoerd als onderdeel van een massa actie.
Performance is een belangrijk focuspunt geweest bij het uitwerken van de MSI module. Door de bron selectie pas later in het proces te doen, blijft de Magento checkout razendsnel.
Magento multi inventory ondersteunt deelverzendingen. Bij het aanmaken van een verzending, kan dus gekozen worden voor hoeveel bestelde items de verzending wordt aangemaakt.
Dit biedt de mogelijkheid om eventueel handmatig sturing te geven over de manier waarop een bestelling wordt uitgeleverd.
Bijvoorbeeld in een situatie waarin een klant na het plaatsen van een bestelling aangeeft een specifiek product alvast geleverd te willen hebben.
Een klantenservice medewerker kan bijvoorbeeld een deelverzending maken om te leveren vanuit de winkelvoorraad, daar waar het source selection algorithm zou leveren vanuit het centrale magazijn (met een langere levertijd).
Bij de lancering van Magento MSI zal er één source selection algorithm beschikbaar zijn: Source priority (bron prioriteit).
Oftewel; Er wordt handmatig ingesteld wat de prioriteit is van de verschillende bronnen (warenhuizen, magazijn, externe leverancier).
Source priority instellen
Protip: Bij het instellen van de bronnen van een stock is de volgorde bepalend voor de prioriteit.
Een aantal andere randvoorwaarden kunnen opgemaakt worden uit de broncode:
https://github.com/magento-engcom/msi/blob/2.3-develop/app/code/Magento/InventorySourceSelection/Model/Algorithms/PriorityBasedAlgorithm.php
Source selection algorithms kunnen naar eigen wens kunnen worden geprogrammeerd.
Inmiddels is bekend dat Amasty bij de lancering van Magento MSI met een set source selection algorithms zal komen.
Multi source inventory is onderdeel van Magento 2.3, en wordt geinstalleerd wordt bij het upgraden. Er worden tijdens de upgrade één source en één stock aangemaakt (de defaults).
Mocht er geen interesse zijn in de multi source inventory features, dan hoeft hiervan geen gebruik gemaakt te worden.
Let wel: wanneer wel gebruik wordt gemaakt van de MSI features (er worden bronnen of stocks aangemaakt), is er geen compatibility met grouped en bundled products. Ondersteuning voor deze producttypen staat bovenaan de roadmap voor de vervolg release van Magento MSI.