Gestione e movimentazione stock
Overview
SOH3 gestisce a livello di database:
- Quantità disponibile (on hand)
- Quantità logica disponibile per la vendita (available)
- Transazioni sullo stock (ogni movimento è registrato)
La quantità impegnata (booked) viene calcolata a runtime.
Event-Driven Stock Management
Lo stock è gestito tramite event listener su:
OrderOrderItem
Ogni variazione di stato viene intercettata dai listener che agiscono di conseguenza. La gestione è centralizzata, riducendo il rischio di rotture di stock.
Tutte le transazioni avvengono a livello di listener su ProductStock, garantendo la tracciabilità completa di ogni movimento.
Flusso con disponibilità logica
Ordine con 1 prodotto, quantità 2:
Flusso senza disponibilità logica
Ordine con 1 prodotto, quantità 2:
ProductStock come DataObject
SOH3 utilizza il dataObject ProductStock per gestire le informazioni stock a livello di magazzino e prodotto.
Motivazioni rispetto alla gestione precedente (SOH2):
- Centralizzazione dello stock come entità nobile (non più relazione)
- Supporto al versioning
- Gestione visuale in griglia tramite interfaccia dei
dataObject
Flussi di modifica Stock e prenotazioni
Inserimento nuovo ordine
Alla creazione di un nuovo ordine:
- Il listener su
OrderItemindividua i magazzini associati al prodotto. - Se
useLogicalStockè attivo sulSalesChannel, viene decrementata la quantità logica, altrimenti quella fisica. - Se l’ordine è creato in stato
canceledofulfilled, non vengono associate quantità o magazzini.
Invio fulfillment al canale
Se useLogicalStock è disattivato, nessuna operazione viene eseguita (la quantità fisica è già stata scalata).
Al salvataggio dell’ordine:
- Il listener rileva le modifiche tra i nuovi e vecchi
CarrierInfo - Decrementa la quantità fisica in base alle spedizioni effettuate
Modifica associazione magazzini
Modificando la quantità o i magazzini:
- Le prenotazioni sono aggiornate automaticamente
- Non è possibile modificare quantità su ordini spediti o cancellati
Modifica associazione prodotto
Se cambia il prodotto associato a un OrderItem:
- La quantità viene restituita al prodotto precedente
- La nuova quantità è prenotata sul nuovo prodotto
Eliminazione OrderItem
Eliminando un OrderItem (o eliminando l’ordine padre):
- Se l’ordine non è fulfillato o cancellato, le quantità prenotate vengono rimesse a stock
Cancellazione ordine
Quando un ordine passa a stato canceled:
- Se non è stato fulfillato:
- I magazzini sono disassociati
- Il sistema effettua il restock automatico
Errore durante l’import ordine
In caso di errore durante l’import:
- Il rollback ripristina o elimina gli
OrderItem - I listener aggiornano coerentemente lo stock