Introduzione
In Odoo, i modelli definiscono come i dati sono strutturati e memorizzati nel database. Ogni pezzo di dati aziendali con cui lavori, dagli ordini di vendita alle fatture ai prodotti, vive in un modello.
Comprendere i modelli di Odoo è essenziale sia per gli sviluppatori che per i consulenti funzionali. I modelli sono la base dell'architettura dei dati di Odoo. Definiscono i campi di Odoo, le relazioni e la logica aziendale. Ogni modello in Odoo segue gli stessi schemi.
Questo articolo si concentra su uno dei modelli più importanti di Odoo: product.template. Che tu stia costruendo moduli personalizzati, integrando sistemi esterni o configurando cataloghi di prodotti, lavorerai con questo modello.
Cos'è il modello product.template
Il modello product.template rappresenta un gruppo di prodotti simili che differiscono solo in alcune proprietà, come la dimensione o il colore. Invece di creare registrazioni di prodotto separate per ogni variazione, i prodotti sono organizzati in modelli con varianti.
Questo modello in Odoo è utilizzato in Vendite, Acquisti, Inventario, E-commerce e Manifattura. Quando crei un prodotto nel catalogo, stai creando una registrazione product.template. Quando crei un ordine cliente, selezioni tra le varianti di prodotto che ereditano dal modello.
Il modello è definito nel modulo prodotto. Altri moduli lo estendono attraverso l'ereditarietà dei modelli Odoo. Vendita aggiunge prezzi e fatturazione. Acquisto aggiunge gestione dei fornitori. Inventario aggiunge tracciamento delle scorte. Ogni modulo aggiunge ciò di cui ha bisogno senza duplicare la struttura di base.
Comprendere la differenza tra product.template e product.product è fondamentale. Il modello contiene dati condivisi. La variante (product.product) contiene dati specifici della variante come codice a barre e SKU.
Campi chiave nel modello
Ecco i campi Odoo più importanti nel modello product.template. Comprendere questi ti aiuterà a lavorare in modo efficace con i prodotti.
1. nome
Tipo: Char. Questo campo memorizza il nome del prodotto. Viene visualizzato in molte viste di Odoo ed è l'identificatore principale per il modello di prodotto.
2. create_date
Tipo: Datetime. Memorizza la data e l'ora in cui la registrazione è stata creata. Gestito automaticamente da Odoo. Utile per report e audit.
3. write_date
Tipo: Datetime. Memorizza la data e l'ora dell'ultima modifica. Anche questo è gestito automaticamente. Aiuta a tenere traccia di quando i dati sono stati aggiornati l'ultima volta.
4. attivo
Tipo: Booleano. Flag di soft delete. Quando è False, il record è archiviato e nascosto dalle visualizzazioni predefinite. I record non vengono eliminati fisicamente.
5. sequenza
Tipo: Intero. Ordine di visualizzazione per l'ordinamento. Utilizzato nelle liste di prodotti e nei menu a discesa. Valori più bassi appaiono per primi.
6. tipo
Tipo: Selezione. Tipo di prodotto: Consumato, Servizio o Prodotto Stoccabile. I prodotti consumabili non sono tracciati in magazzino. I servizi non hanno inventario fisico. I prodotti stoccabili sono tracciati in inventario.
7. categ_id
Tipo: Many2one (product.category). La categoria del prodotto. Guida alla reportistica, ai percorsi predefiniti e all'organizzazione del catalogo. Le categorie possono essere gerarchiche.
8. list_price
Tipo: Float. Il prezzo di vendita. Utilizzato come predefinito nella creazione di preventivi. Può essere sovrascritto da listini prezzi o prezzi specifici per variante.
9. standard_price
Tipo: Float. Il prezzo di costo. Utilizzato per i calcoli dei margini e la valutazione dell'inventario. Influisce sui report di redditività.
10. currency_id
Tipo: Many2one (res.currency). La valuta per list_price e standard_price. Di solito ereditata dall'azienda.
11. uom_id
Tipo: Many2one (uom.uom). L'unità di misura per le vendite. Definisce come vengono espresse le quantità (ad es. Unità, Kg, Litri).
12. uom_po_id
Tipo: Many2one (uom.uom). L'unità di misura per gli acquisti. Può differire da uom_id per scenari di conversione.
13. default_code
Tipo: Char. Riferimento interno o codice. Utile per la mappatura dei sistemi esterni e numerazione personalizzata. Spesso usato come SKU.
14. barcode
Tipo: Char. Codice a barre per la scansione. Utilizzato in POS, magazzino e inventario. Per le varianti, il codice a barre è tipicamente su product.product.
15. description
Tipo: Char. Descrizione interna. Visibile solo agli utenti interni. Utilizzato per note interne sul prodotto.
16. description_sale
Tipo: Testo. Descrizione di vendita. Mostrato su preventivi e fatture. Può includere HTML per la formattazione.
17. descrizione_acquisto
Tipo: Testo. Descrizione di acquisto. Mostrato su ordini di acquisto e fatture dei fornitori. Aiuta gli acquirenti a comunicare con i fornitori.
18. vendita_ok
Tipo: Booleano. Indica se il prodotto può essere venduto. Quando è Falso, il prodotto è nascosto dai moduli di vendita e preventivo.
19. acquisto_ok
Tipo: Booleano. Indica se il prodotto può essere acquistato. Quando è Falso, il prodotto è nascosto dai moduli di acquisto.
20. peso
Tipo: Float. Peso del prodotto. Utilizzato per calcoli di spedizione e logistica. L'unità dipende dalle impostazioni UoM dell'azienda.
21. volume
Tipo: Float. Volume del prodotto. Utilizzato per la logistica e la pianificazione della capacità del magazzino.
22. product_variant_ids
Tipo: One2many (product.product). L'elenco delle varianti di prodotto. Ogni variante eredita dal modello.
23. product_variant_count
Tipo: Intero. Numero di varianti. Calcolato da product_variant_ids. Utilizzato per la visualizzazione e il filtraggio.
24. image_1920
Tipo: Binario. Immagine del prodotto. Odoo memorizza più dimensioni. Utilizzato in moduli, report e nel sito web.
25. responsible_id
Tipo: Many2one (res.users). L'utente responsabile. Utilizzato per la gestione del prodotto e l'assegnazione delle attività.
26. company_id
Tipo: Many2one (res.company). In configurazioni multi-azienda, questo indica a quale azienda Odoo appartiene il prodotto.
27. tax_ids
Tipo: Many2many (account.tax). Tasse sui clienti per le vendite. Applicate su fatture e preventivi.
28. supplier_tax_id
Tipo: Many2many (account.tax). Tasse fornitore per acquisti. Applicato sulle fatture fornitore.
29. attribute_line_ids
Tipo: One2many. Linee di attributo prodotto per varianti. Definisce quali attributi (ad es. Taglia, Colore) creano varianti.
30. route_ids
Tipo: Many2many (stock.route). Percorsi di magazzino. Determina come il prodotto si muove attraverso la catena di approvvigionamento (ad es. Acquista, Produzione su ordinazione).
31. property_stock_production
Tipo: Many2one (stock.location). Luogo di produzione per prodotti fabbricati. Utilizzato quando il tipo è Stoccabile e il percorso include la produzione.
32. property_stock_inventory
Tipo: Many2one (stock.location). Luogo di regolazione dell'inventario. Utilizzato per conteggi e correzioni di magazzino.
33. property_valuation
Tipo: Selezione. Metodo di valutazione dell'inventario: Automatizzato o Manuale. Influisce su come viene calcolato il costo.
34. property_cost_method
Tipo: Selezione. Metodo di costo: Standard o FIFO. Determina come viene calcolato il valore dell'inventario.
35. property_account_income_id
Tipo: Many2one (account.account). Conto entrate per le vendite. Utilizzato durante la fatturazione.
36. property_account_expense_id
Tipo: Many2one (account.account). Conto spese per gli acquisti. Utilizzato durante la ricezione delle fatture dei fornitori.
37. invoice_policy
Tipo: Selezione. Quando fatturare: Quantità ordinate o Quantità consegnate. Influisce su quando i ricavi vengono riconosciuti.
38. expense_policy
Tipo: Selezione. Quando registrare le spese: Ordinato o Consegnato. Influisce su quando i costi vengono riconosciuti.
39. service_type
Tipo: Selezione. Per i prodotti di servizio: Manuale, Foglio ore o Milestone. Determina come vengono tracciati e fatturati i servizi.
40. optional_product_ids
Tipo: Many2many (product.template). Prodotti opzionali per upsell. Mostrati quando si aggiunge questo prodotto a un preventivo.
Come questo modello viene utilizzato nei flussi di lavoro aziendali
1. Vendite e Preventivi
Quando un venditore crea un preventivo, seleziona i prodotti dal catalogo. Il modello product.template fornisce il prodotto base. Le varianti vengono scelte quando il prodotto ha attributi (dimensione, colore).
2. E-commerce
Sul sito web, i clienti vedono i modelli di prodotto nel catalogo. Quando cliccano su un prodotto, possono scegliere tra le varianti. Il modello contiene la descrizione e le immagini condivise.
3. Acquisto e Fornitori
Gli ordini di acquisto e le fatture dei fornitori sono collegati a product.template. Il campo purchase_ok controlla la visibilità. Il supplier_tax_id e uom_po_id influenzano il comportamento di acquisto.
4. Inventario e Produzione
I movimenti di magazzino e gli ordini di produzione fanno riferimento alle varianti di prodotto. Il modello definisce le rotte, la valutazione e il metodo di costo. L'inventario è tracciato per variante.
5. Fatturazione
Le fatture e le bollette fanno riferimento alle righe di prodotto. Il modello fornisce le regole fiscali e i conti contabili. La politica di fatturazione determina quando i ricavi vengono riconosciuti.
Come gli sviluppatori estendono questo modello
Gli sviluppatori estendono product.template utilizzando diversi modelli. L'ereditarietà del modello Odoo è il principale meccanismo.
Ereditarietà del Modello
Usa _inherit = 'product.template' per estendere il modello. Questa è l'eredità del modello Odoo in azione. Aggiungi nuovi campi Odoo, sovrascrivi metodi o aggiungi vincoli. Il modello ereditato in Odoo mantiene le tue modifiche in un modulo separato per facilitare gli aggiornamenti. Quando erediti un modello in Odoo, lo estendi senza modificare l'originale.
Aggiunta di Campi
Definisci nuovi campi Odoo nel tuo modello ereditato. Usa il tipo di campo corretto: Char, Many2one, Boolean, Integer, Text, Selection. Considera i campi dipendenti dall'azienda per multi-azienda.
Estensioni Python
Sovrascrivi create, write o unlink per aggiungere logica. Usa super() per chiamare l'originale. Fai attenzione ai campi calcolati e alle loro dipendenze.
Odoo Studio
Odoo Studio ti consente di aggiungere campi senza codice. Ottimo per personalizzazioni rapide. Per logiche complesse o aggiornamenti, i moduli personalizzati sono più manutenibili.
Migliori pratiche
- Usa correttamente la relazione template-variant. Metti i dati condivisi sul template, i dati specifici della variante su product.product.
- Imposta categ_id per un corretto instradamento e reporting. Le categorie guidano il comportamento predefinito.
- Usa default_code per la mappatura dei sistemi esterni. Mantienilo unico quando possibile.
- Quando costruisci integrazioni API, usa l'API XML-RPC o JSON-RPC. Il modello product.template è completamente esposto come modello API in Odoo. Mappa gli ID esterni con attenzione.
- Per i campi personalizzati, utilizzare il prefisso
x_o un prefisso del modulo per evitare conflitti con le future versioni di Odoo.
Errori comuni
- Creare modelli duplicati invece di utilizzare varianti. Utilizzare attribute_line_ids per i prodotti che differiscono solo per taglia, colore, ecc.
- Confondere product.template e product.product. Quando hai bisogno di dati specifici per la variante (codice a barre, SKU), utilizzare product.product.
- Dimenticare di impostare sale_ok o purchase_ok. I prodotti sono nascosti dalle forme quando questi sono False.
- Sovrascrivere metodi core senza chiamare super(). Questo può rompere altri moduli o futuri aggiornamenti.
- Aggiungere campi personalizzati richiesti senza valori predefiniti. I record esistenti falliranno la convalida durante l'aggiornamento.
Conclusione
Il modello product.template è centrale per Odoo. Memorizza le definizioni dei prodotti e gli attributi condivisi. Comprendere i suoi campi e come i moduli lo estendono ti aiuterà a configurare, personalizzare e integrare Odoo in modo efficace.
Che tu sia un consulente funzionale che mappa cataloghi di prodotti o uno sviluppatore che costruisce moduli personalizzati, una solida comprensione di product.template ti farà risparmiare tempo e prevenire errori.
Inizia con Dasolo
Dasolo aiuta le aziende a implementare, personalizzare e ottimizzare Odoo. Ci specializziamo in integrazioni API e sviluppo Odoo. Il nostro team ha una profonda esperienza con l'architettura dei dati di Odoo e modelli come product.template.
Se hai bisogno di aiuto con la tua implementazione di Odoo, moduli personalizzati o integrazioni, siamo qui per aiutarti. Prenota una demo per discutere del tuo progetto.