Descrizione Del Progetto

Il progetto Bauzaar vede coinvolte due piattaforme collegate tramite un connettore. Rispettivamente Magento2 per la vendita eCommerce online e Odoo per l’importazione, gestione documenti fiscale e supporto clienti.
Il flusso nasce e parte sulla piattaforma Magento2, partendo dalla registrazione del cliente fino all’inoltro ordine. In questa ultima fase Odoo inizia il suo workflow attraverso il connettore sviluppato importa tutte le anagrafiche clienti, prodotti ed ordini. Lo scopo di Odoo è quello di permettere la generazione dei documenti fiscale evasi ogni giorno dal magazzino. Per permettere questo oltre all’importazione delle anagrafiche dovrà periodicamente tenere aggiornati e sincronizzati gli STATUS di spedizione. SOLO alcuni di questi stati costituiscono la reale evasione dal magazzino e pertanto dovranno essere processati dal sistema in documento fiscale.

L’obiettivo del progetto è quello di avere un sistema che in modalità completamente automatica mantenga aggiornate tutte le anagrafiche, gli stati e ogni giorno generare i relativi documenti fiscali evasi dal sistema.
Le uniche operazioni manuali che il Customer Support dovrà effettuare sono:

  • Modifica dati nelle anagrafiche (se il cliente ha comunicato dati errati)
  • Creazione note di credito per rimborsi
  • Verifica andamento,Flussi statistici sul venduto/Evaso e possibili errori commessi dal sistema.

Versione del Software e Istanza Server

Per la realtà Bauzaar S.R.L. è stata utilizzato il software ERP Odoo V.12 CE.
L’applicativo è attualmente installato e configurato nell’infrastruttura CLOUD di addOons Srl su Google Cloud Platforms.
Questa infrastruttura permette un accesso completo SSH all’istanza server dedicata. Ogni istanza è da considerarsi isolata e con risorse hardware completamente dedicate.
Sull’attuale istanza sono configurati i seguenti parametri di calcolo e archiviazione:

Memoria RAM:         8GB
CPU:                         4CPU
Disco:                       100GB SSD

L’istanza sfrutta la tecnologia configurata di ADDOONS DOCKER, che permette di avere ambienti isolati per effettuare operazioni di deploy, staging e produzione.
Attualmente sono presenti e funzionanti due database: bauzzar_staging e bauzaar_produzione.

 

L’applicativo Odoo V12 CE utilizza le seguenti tecnologie:

  • Python
  • XML, HTML
  • Javascript

Configurazione e Container

version: '2'

services:
  web:
    image: odoo:12.0
    container_name: ${NAME}
    depends_on:
      - db
    ports:
      - "${PORT}:8069"
      - "${LPORT}:8072"
    volumes:
      - odoo-web-data:/var/lib/odoo
      - ./config/community:/etc/odoo
      - ./italy:/mnt/italy
      - ./modules:/mnt/modules
  db:
    image: postgres:10
    ports:
      - "${DBPORT}:5432"
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - odoo-db-data:/var/lib/postgresql/data/pgdata

volumes:
  odoo-web-data:
  odoo-db-data:

 

Applicativi Installati

Sulla versione Odoo 12 CE sono stati installati e configurati i seguenti Dipartimenti:

  • Sales Management
  • Invoice
  • Accounting
  • Inventory
  • Bauzzar Magento 2 Connector

Sviluppo Connettore per Magento 2

E’ stato sviluppato un modulo aggiuntivo chiamato “bauzaar_magento2_connector”. Questo modulo permette il collegamento tra Odoo e il software eCommerce Magento2 attualmente utilizzato da Bauzaar.
Essendo entrambi gli applicativi isolati su due istanze server è stata scelta ed utilizzata l’architettura API fornita da Magento2.

Referenza:
https://devdocs.magento.com/guides/v2.3/get-started/bk-get-started-api.html

Le Entità di interesse e per le quali verranno sfruttate le API sono:

  • Prodotti
  • Clienti
  • Ordini
  • Fatture (Solo Endpoint per Trigger)

Per ognuna di queste entità sono state utilizzate le seguenti API:

PRODUCTS_ENDPOINT = '/index.php/rest/V1/products'
PARTNERS_ENDPOINT = '/index.php/rest/V1/customers/search'
ORDERS_ENDPOINT = '/index.php/rest/V1/orders'
INVOICE_ENDPOINT = '/index.php/rest/V1/order'

 

Chiave di Comunicazione. Trattandosi di due piattaforme distinte per mantenere i dati sempre allineati all’interno di ogni Modello ed Entità di Odoo è stato aggiungo un campo chiave “magento_id” nel quale verrà inserito il riferimento interno univoco dell’entità sul db di Magento.
In questo Modo si saprà sempre se un particolare record di Magento è presente o meno sul sistema.

Workflow

Descrizione

Sulla piattaforma Magento2 avvengono le operazioni di registrazione e acquisto da parte dei clienti.
Il ruolo di Odoo è di processare tutti gli ordini Magento che sono stati evasi nella giornata e per ognuno di essi generare il relativo documento fiscale.

I tipi di documento fiscale possibili sono:

  • Fattura
  • Corrispettivo/Ricevuta

Per permettere questo in Odoo è stato configurato un cron schedulato dal Lunedì alla Domenica tutti i giorni alle 20.
E’ stato scelto questo orario per essere sicuri che tutti gli ordini della giornata siano evasi.

Il cron effettua le seguenti procedure in modo sequenziale:

  • Chiama la funzione “products_import”
    • Questa funzione ha il compito di tenere sincronizzata l’anagrafica Prodotti Odoo.
    • Importa i prodotti Mancanti o che possiedono data di ultimo aggiornamento > dell’ultimo import effettuato
  • Chiama la funzione “customers_import”
    • Questa funzione ha il compito di tenere sincronizzata l’anagrafica Clienti.
    • Importa i Clienti Mancanti o che possiedono data di ultimo aggiornamento > dell’ultimo import effettuato
  • Chiama La funzione “orders_import”
    • Questa funzione ha il compito di tenere sincronizzata l’anagrafica Ordini.
    • Importa gli Ordini Mancanti o che possiedono data di ultimo aggiornamento > dell’ultimo import effettuato
  • Chiama la funzione “generate_fiscal_document”

Funzione Importa Prodotti

La funzione “product_import” richiede a Magento i seguenti campi:

  • Name
  • Price
  • SKU
  • IVA

Funzione Importa clienti

La funzione importa clienti richiede i seguenti campi a Magento:

  • Name
  • Street
  • Postcode
  • City
  • Country
  • Mobile
  • Email
  • Phone
  • Address (indirizzi di Spedizione o Fatturazione)

L’architettura di Odoo prevede la possibilità di avere un’anagrafica principale con N indirizzi di spedizione e fatturazione collegati.
Questo è molto simile a Magento, per questo l’anagrafica principale è costituita dai campi elencati sopra e gli indirizzi tramite la chiave “Address”

Importazione Ordini

Chiavi API Utilizzate per l’importazione Ordini:

  • base_grand_total,
  • base_total_refunded,
  • status_histories,
  • increment_id,
  • base_discount_amount,
  • status,entity_id,
  • customer_email,
  • customer_id,
  • base_grand_total,
  • base_subtotal,
  • base_shipping_amount,
  • base_tax_amount,
  • billing_address_id,
  • created_at,
  • customer_is_guest,
  • payment,
  • extension_attributes,
  • billing_address,
  • items,
  • shipping_incl_tax,
  • extension_attributes,
  • cash_on_delivery_amount,
  • payment_additional_info

 

TIPOLOGIE ORDINI

Gli ordini in Odoo/Magento possono essere di due casistiche:

  • Ordini Utente Registrato
  • Ordini Guest

Odoo in fase di importazione interroga la chiave “customer_is_guest” per verificare il tipo di casistica.
Se l’utente è registrato nelle API è presente l’increment_id dell’anagrafica. Il connettore verifica in un primo momento se non è presente oppure è stata aggiornata. In caso affermativo richiama l’endpoint dell’import customers.
Se si tratta invece di un ordine Guest Odoo andrà a creare un’anagrafica “Semplice” riportando i dati contenuti nell’API dell’ordine, come: Firstname, Lastname, Email.

GESTIONE CONTRASSEGNO

Il Contrassegno viene riportato nella chiave “cash_on_delivery_amount” il prezzo è da considerarsi SEMPRE iva inclusa.
Odoo in fase di import andrà ad aggiungere una riga all’ordine agganciando il prezzo ricevuto ed utilizzando un prodotto di tipo “Servizio” presente in anagrafica con codice “cash_on_delivery”

SPESE DI SPEDIZIONE

Le spese di spedizione vengono riportate nella chiave “shipping_incl_tax” che già dal nome sono da considerarsi anche queste SEMPRE iva inclusa.
Come per il contrassegno verrà sempre aggiunta una riga all’ordine con il totale spedizione e un prodotto con codice “shipping”

RIGHE ORDINE E RIMBORSO

Attualmente il connettore importa le righe fornite all’interno della chiave “items”. Ogni elemento di questo array costituisce una riga ordine.
Per ogni riga ordine Odoo Importa i seguenti campi:

  • bau_store_credit,
  • bau_reward_credit,
  • discount,
  • price_unit,
  • name,
  • product_id,
  • product_uom_qty ,
  • price_subtotal,
  • product_uom,
  • customer_lead,
  • display_type,
  • company_id,
  • order_id

NB: La riga viene aggiunta se e solo se la qty Rimborsata è minore rispetto alla Qty Ordinata.
Nel caso in cui la riga possiede qty_ordinata = 3 e qty_rimborsata = 3, questa non viene aggiunta all’ordine di vendita.
In caso contrario viene effettuata la differenza ed imposta come qty_unitaria di riga.

STORE CREDIT, REWARD CREDIT E SCONTI

La riga inoltre può possedere 3 livelli di sconto:

  • Sconto Percentuale –> Chiave “Discount”
  • bau_store_credit
  • bau_reward_credit

Questi ultimi due sono espressi in € unitarie, pertanto vengono covertiti in % dal sistema a sommati allo sconto base di riga.

TIPOLOGIA CLIENTE E DATI

In Magento è possibile che ci siano clienti registrati con particolari informazioni in anagrafica che però durante l’acquisto di merce decidano di variare queste informazioni.
Un caso molto comune è l’aggiunta di un nuovo indirizzo di spedizione oppure la richiesta di Fattura quando il cliente di norma è impostato come “Privato”.
Per permettere questo Magento oltre alle API dei Clienti fornisce le informazioni di anagrafica anche per ogni singolo Ordine importato. In questo modo in fase di importazione Odoo riesce a sapere
Se aggiornare i dati presenti in anagrafica, creare nuovi indirizzi ed impostare il tipo di documento fiscale corretto da emettere.

Tutte queste informazioni sono contenute nella chiave “extension_attributes” delle API degli ordini. Le sottochiavi sono:

  • customer_type (company | private) : questo campo ci specifica se si tratta di un’azienda oppure un privato
  • sdi: codice univoco
  • fiscal_code: codice fiscale
  • pec: indirizzo pec
  • vat: partita iva
  • require_invoice (true | false): se il cliente richiede fattura oppure no

Quest’ultimo campo è molto importante perchè è quello che definisce il tipo di documento fiscale che Odoo dovrà andare a generare.
Se True Fattura, Se False Corrispettivo.

i campi sdi, pec, fiscal_code e vat nel caso in cui il cliente fosse privato e non richiedesse fattura potrebbero essere FALSE.

Statistiche sul venduto e Dashboard

Odoo rende possibile l’analisi dei dati tramite diverse viste grafiche. In particolare grafici lineari/barre/torta oppure viste PIVOT più complesse e dinamiche.

 

 

 

 

Creazione Note Credito

Per creare una nota credito la procedura semplice è la seguente:

  • Si ricerca la fattura o il corrispettivo tramite il menu Contabilità
  • Si apre il documento fiscale
  • Si preme sul pulsante “Aggiungi Nota di Credito”
  • Odoo chiederà se creare una nota credito ed emettere un documento inverso oppure annullare solamente.
  • Oltre a questo bisognerà specificare una motivazione ad esempio: “Rimborso cliente” oppure “Documento emesso in modo errato”.
  • Si preme su Valida.
  • Si verrà rimandati alla schermata con la nota credito in bozza pronta da Validare.

 

Suggerire  la  modifica