Case study
IOI-TECH – integrazione POS ed ERP per il retail
IOI-TECH è un fornitore di servizi tecnologici con sede a Riyadh, in Arabia Saudita, e un secondo ufficio a Jeddah. Dalla sua fondazione nel 2018 l'azienda ha realizzato progetti di trasformazione digitale in Arabia Saudita e nel resto del Medio Oriente, al servizio di startup, PMI e grandi imprese globali in più di 20 settori - dal commercio al dettaglio, dalle banche e dalle telecomunicazioni al petrolio e gas, alla sanità e alla pubblica amministrazione.
Il suo portfolio spazia dalla pianificazione delle risorse d'impresa (SAP S/4HANA, SAP Business One, Oracle Fusion, Odoo) alla gestione del personale, all'hosting cloud, allo sviluppo di siti e portali, all'analisi dei dati e all'AI, alla cybersecurity, allo sviluppo mobile e all'automazione delle vendite - insieme ai servizi di implementazione, formazione e supporto che li accompagnano.
L'ERP è la competenza principale di IOI-TECH e i suoi clienti del commercio al dettaglio gestiscono l'attività su SAP. Quello che mancava loro era un livello di commercio e di punto vendita che parlasse la stessa lingua dell'ERP. IOI-TECH ha scelto nopCommerce come base e si è rivolta a noi per costruirlo.
Il progetto
La sfida
I clienti del commercio al dettaglio di IOI-TECH in Arabia Saudita e in Medio Oriente gestiscono finanza, magazzino e dati anagrafici in SAP Business One, mentre vendono sia attraverso un negozio online sia in punti vendita fisici: più filiali, registratori di cassa e cassieri, cassetti portadenaro da contare e riconciliare, giacenze a livello di filiale, listini negoziati per cliente e prodotti venduti in più unità di misura contemporaneamente - pezzo, scatola, pallet.
nopCommerce standard non copre nulla di tutto questo, e agganciare un prodotto POS separato al negozio online avrebbe prodotto il risultato classico: tre sistemi, tre versioni della verità e il personale a reinserire prodotti, clienti e ordini tra il punto vendita, il sito e l'ERP.
La soluzione
Abbiamo progettato e realizzato una suite di otto plugin nopCommerce 4.50 integrati su .NET 6 che trasformano un'installazione nopCommerce standard in una piattaforma retail omnicanale completa, collegata direttamente a SAP Business One. Tutta la logica di business risiede nel backend del negozio; i terminali POS comunicano con esso tramite un livello API REST dedicato e il negozio comunica con SAP tramite il Service Layer. Una vendita battuta alla cassa, un ordine effettuato sul sito e un documento registrato nell'ERP descrivono tutti la stessa transazione. Tutto viene rilasciato come plugin - il core di nopCommerce non viene mai forkato, così il cliente resta sul percorso di aggiornamento.
Integrazione con SAP Business One
Il modulo di integrazione collega nopCommerce al Service Layer di SAP Business One attraverso un client HTTP autenticato costruito su misura, e copre partner commerciali e gruppi di partner, articoli e gruppi di articoli, ordini, fatture, bolle di consegna, note di credito, incassi, listini, magazzini, gruppi IVA, valute, centri di costo, dimensioni, agenti di vendita e serie documentali.
- Bidirezionale, con controllo per entità. Prodotti, clienti, fornitori, ordini, consegne e gruppi IVA hanno ciascuno il proprio interruttore di sincronizzazione e la propria direzione - da SAP a nopCommerce, da nopCommerce a SAP, o entrambe - così ogni cliente decide quale sistema è proprietario di quali dati.
- Tempo reale più pianificazione. Un consumatore di eventi invia le modifiche a SAP nel momento in cui avvengono - ordine effettuato, ordine pagato, ordine annullato o rimborsato, spedizione consegnata, prodotto o cliente o fornitore creato, aggiornato o eliminato - mentre un'attività pianificata esegue la riconciliazione completa periodica.
- Mappature anziché valori fissi nel codice. Mappature gestite dall'amministrazione collegano categorie nopCommerce, ruoli cliente, ruoli fornitore, categorie fiscali e magazzini alle rispettive controparti SAP, con i codici scheda dei partner commerciali e le dimensioni cliente mantenuti per singolo record. Gli ordini possono essere registrati in SAP automaticamente o rilasciati manualmente, e la numerazione dei documenti segue le serie SAP del cliente.
- Utilizzabile in produzione. Ogni scambio viene registrato ed è ricercabile da una griglia di amministrazione, con pulizia automatica dello storico, così un documento fallito si diagnostica dal backend del negozio anziché dall'ERP.
Moduli retail e POS
- Point Of Sale - il modulo retail principale. Filiali e assegnazione dei prodotti alle filiali, dispositivi POS e tipi di dispositivo, casse con flusso di apertura/chiusura e conteggio del contante, movimenti del cassetto portadenaro con causali configurabili, gestione della data operativa, ricerca tramite codice a barre, punti di ritiro in negozio, un motore di stampa scontrini basato su token con codici QR, attivazione della chiave di licenza per dispositivo e un set di permessi POS dedicato con sicurezza API circoscritta al dispositivo e al cassiere.
- Inventory - trasferimenti di merce tra filiali e magazzini, così le giacenze di filiale restano accurate mentre la merce si sposta.
- Price List - più listini con valori per prodotto, associati ai singoli clienti ed esposti tramite l'API, per prezzi all'ingrosso e prezzi B2B negoziati accanto al prezzo al dettaglio.
- Product Unit Conversion - unità di misura e fattori di conversione per prodotto sincronizzati tra i sistemi collegati, così lo stesso prodotto può essere ordinato, prelevato e venduto in unità diverse.
- Split Payment - un singolo ordine saldato con più metodi di pagamento insieme, con ogni transazione registrata separatamente per la riconciliazione di fine giornata.
- Pay In Cash - saldo in contanti alla cassa, collegato al flusso della cassa e del cassetto.
- Delivery Shipping - tariffe di spedizione per peso e totale dell'ordine, per la merce venduta in negozio ma consegnata al cliente.
Approccio ingegneristico
- Architettura a plugin pulita - entità di dominio, servizi, factory e DTO separati per modulo; migrazioni FluentMigrator per lo schema, così installazione e aggiornamenti sono ripetibili.
- Interfaccia di amministrazione costruita con viste Razor e view component nativi di nopCommerce, così i responsabili del negozio lavorano nell'interfaccia che già conoscono.
- Un livello API REST per l'applicazione del terminale POS, protetto con autenticazione a token più attributi di autorizzazione personalizzati che circoscrivono ogni richiesta a un dispositivo licenziato e a un cassiere autenticato.
- Consegna modulare: ogni plugin si installa per conto proprio e la suite si compone in una soluzione completa, così un cliente può partire dal negozio online e dal collegamento con l'ERP e aggiungere il livello POS in seguito.
Il risultato
IOI-TECH dispone ora di una piattaforma retail ripetibile che configura per ciascun cliente anziché costruirla su misura ogni volta. Negozio, sito ed ERP condividono un solo catalogo, un solo dato di giacenza e un solo storico cliente; ordini e pagamenti arrivano in SAP senza che nessuno li ridigiti; i cassieri aprono e chiudono le casse con una traccia di controllo completa di ogni movimento del cassetto; e i clienti B2B sono serviti con i propri listini e le proprie unità di misura - il tutto dentro un'installazione nopCommerce che si può ancora aggiornare.
Tecnologie
.NET
C#- ASP.NET Core MVC
- nopCommerce 4.50
Entity Framework Core- LinqToDB
SQL Server- FluentMigrator
- AutoMapper
- Razor Views
REST API- JWT
- FluentValidation
- QRCoder