Introduzione
In Odoo i modelli definiscono la struttura dei dati e come vengono salvati nel database. Ogni informazione operativa — ordini, fatture, anagrafiche — è rappresentata da un record in un modello specifico.
Conoscere i modelli di Odoo è fondamentale sia per gli sviluppatori sia per i consulenti funzionali. I modelli costituiscono l'ossatura dei dati: stabiliscono campi, relazioni e la logica di business che governa le entità aziendali.
Questo articolo mette sotto la lente uno dei modelli più usati in Odoo: res.partner. Che tu stia creando moduli personalizzati, sincronizzando sistemi esterni o impostando workflow, prima o poi lavorerai con questo modello.
Cos'è il modello res.partner
Il modello res.partner rappresenta le persone e le aziende: clienti, fornitori, contatti e soggetti giuridici. È il punto unico dove vengono raccolte le informazioni anagrafiche e di contatto.
res.partner viene referenziato praticamente da ogni app di Odoo. Sales, CRM, contabilità, acquisti ed e-commerce si affidano a questo modello. Creando un cliente, un lead o un fornitore, stai creando o collegando un record res.partner.
La definizione di base del modello risiede nel modulo base; gli altri moduli lo estendono tramite ereditarietà. CRM aggiunge campi legati alle opportunità, la contabilità estende con condizioni di pagamento e limiti di credito: ogni componente integra ciò che serve senza riscrivere la struttura centrale.
Campi chiave del modello
Di seguito trovi i campi più importanti del modello res.partner. Comprenderli ti aiuterà a gestire con efficacia contatti, clienti e fornitori.
1. name
Tipo: Char. Memorizza il nome del partner: nome azienda o nome e cognome per una persona. È il campo che viene mostrato nelle viste e usato come identificatore principale.
2. create_date
Tipo: Datetime. Registra data e ora di creazione del record. Gestito automaticamente da Odoo, utile per reportistica e audit.
3. write_date
Tipo: Datetime. Indica quando il record è stato modificato l'ultima volta. Anch'esso gestito automaticamente, aiuta a tracciare aggiornamenti.
4. email
Tipo: Char. Indirizzo email principale per comunicazioni, fatturazione e accesso al portale. Odoo effettua una validazione del formato quando possibile.
5. phone
Tipo: Char. Numero di telefono principale, visualizzato nella scheda contatto e utilizzato nei flussi di comunicazione.
6. mobile
Tipo: Char. Numero di cellulare, spesso usato per SMS o notifiche urgenti quando diverso dal telefono fisso.
7. street
Tipo: Char. Prima riga dell'indirizzo, parte del blocco indirizzo standard usato su documenti e form.
8. street2
Tipo: Char. Seconda riga dell'indirizzo per dettagli aggiuntivi come interno, piano o nome del complesso.
9. city
Tipo: Char. Comune o città; la formattazione degli indirizzi può variare a seconda del paese.
10. zip
Tipo: Char. CAP o codice postale, utile per convalide indirizzo e calcoli di spedizione.
11. state_id
Tipo: Many2one (res.country.state). Provincia o stato; il dominio è filtrato in base al paese. Non tutti i paesi utilizzano questa suddivisione.
12. country_id
Tipo: Many2one (res.country). Paese, elemento che influenza formattazione indirizzo, tassazione e localizzazione.
13. is_company
Tipo: Boolean. Indica se il record è un'azienda o una persona. Le aziende possono avere contatti figli; le persone possono essere collegate a un'azienda tramite parent_id.
14. parent_id
Tipo: Many2one (res.partner). Collega un contatto alla società di appartenenza, abilitando la gerarchia azienda–contatti e l'ereditarietà di alcuni campi.
15. child_ids
Tipo: One2many (res.partner). Inverso di parent_id: elenca i contatti legati a un'azienda, utile per navigare dalla società ai singoli riferimenti.
16. company_id
Tipo: Many2one (res.company). In scenari multi-company indica a quale società Odoo appartiene il partner e influisce su visibilità e permessi.
17. vat
Tipo: Char. Partita IVA o codice fiscale. Viene validato in base al formato del paese. Campo critico per la fatturazione e la conformità fiscale.
18. customer_rank
Tipo: Integer. Indica lo stato cliente: Odoo lo incrementa quando ci sono vendite. Utile per filtrare e dare priorità ai clienti.
19. supplier_rank
Tipo: Integer. Indica lo status di fornitore: incrementato quando sono presenti ordini d'acquisto o fatture fornitore.
20. user_id
Tipo: Many2one (res.users). Rappresenta il commerciale o il responsabile assegnato, usato per CRM, team di vendita e assegnazione attività.
21. type
Tipo: Selection. Definisce il tipo di indirizzo per i contatti figli: Contatto, Fatturazione, Spedizione o Altro. Determina quale indirizzo appare sui documenti.
22. ref
Tipo: Char. Riferimento interno o codice partner. Utile per mappature con sistemi esterni e numerazione personalizzata.
23. website
Tipo: Char. URL del sito web, visibile nella scheda e utilizzato in contesti e‑commerce.
24. comment
Tipo: Html. Note interne visibili agli utenti interni; spesso impiegate per istruzioni commerciali o annotazioni operative.
25. active
Tipo: Boolean. Flag di archiviazione: se False il record è nascosto nelle viste predefinite ma non viene cancellato fisicamente.
26. lang
Tipo: Selection. Lingua preferita del partner; documenti e email possono essere inviati nella lingua selezionata, ereditata dal parent quando applicabile.
27. image_1920
Tipo: Binary. Immagine o logo del partner; Odoo gestisce più risoluzioni per uso in moduli, report e sito.
28. category_id
Tipo: Many2many (res.partner.category). Tag o categorie per segmentazione, filtri e marketing; molto flessibile per classificazioni personalizzate.
Come questo modello viene usato nei flussi aziendali
1. Vendite e CRM
Quando un commerciale crea un preventivo sceglie il cliente da res.partner: lo stesso record è usato per lead, opportunità e ordine. customer_rank e user_id guidano report e assegnazioni.
2. Fatturazione
Fatture e note di credito fanno riferimento al partner per l'indirizzo di fatturazione; il campo vat è critico per il calcolo imposte. Condizioni di pagamento e limite di credito si configurano spesso sul partner.
3. Acquisti e fornitori
Ordini d'acquisto e fatture fornitore sono collegati a res.partner: supplier_rank aiuta a identificare i fornitori attivi e buyer_id assegna il responsabile per la gestione fornitori.
4. E‑commerce e portale
I visitatori del sito possono registrarsi creando partner che poi vengono riutilizzati per ordini, preventivi e accesso al portale; indirizzi e dati di contatto provengono dal record partner.
5. Multi‑company e consolidamento
In ambienti multi‑azienda la stessa entità legale può esistere come record diversi per ogni società. company_id e le regole inter‑company stabiliscono cosa viene condiviso o duplicato.
Come gli sviluppatori estendono questo modello
Gli sviluppatori estendono res.partner con diversi approcci, sfruttando principalmente i meccanismi di ereditarietà di Odoo.
Ereditarietà del modello
Si utilizza _inherit = 'res.partner' per estendere il modello: si aggiungono campi, si sovrascrivono metodi o si aggiungono vincoli mantenendo le modifiche in un modulo separato, facilitando gli aggiornamenti.
Aggiunta di campi
Definisci nuovi campi nel modello ereditato scegliendo il tipo corretto: Char, Many2one, Boolean, Integer, Text, Selection. Considera campi dipendenti dalla company in ambienti multi‑company.
Estensioni in Python
Override di create, write o unlink permette di inserire logica custom: usa super() per preservare il comportamento originale e presta attenzione ai campi calcolati e alle loro dipendenze.
Odoo Studio
Odoo Studio consente di aggiungere campi senza scrivere codice: comodo per modifiche rapide, ma per logiche complesse o per mantenibilità a lungo termine è preferibile sviluppare moduli personalizzati.
Buone pratiche
- Crea prima l'azienda e poi i contatti figli collegandoli con parent_id per rispettare la gerarchia company–contatto.
- Imposta country_id per ottenere una corretta formattazione degli indirizzi e applicare regole fiscali appropriate.
- Usa commercial_partner_id quando hai bisogno dell'entità di livello superiore per raggruppamenti, limiti di credito o reportistica consolidata.
- Per integrazioni API utilizza XML‑RPC o JSON‑RPC: il modello res.partner è esposto e puoi mappare gli ID esterni prestando attenzione ai riferimenti univoci.
- Per i campi custom adotta il prefisso x_ o un prefisso legato al modulo per evitare collisioni con futuri aggiornamenti di Odoo.
Errori comuni
- Creare partner duplicati invece di cercare quelli esistenti. Usa email_normalized o ref per deduplicare e prevenire record duplicati.
- Confondere parent_id con company_id. parent_id lega contatto e società; company_id riguarda l'appartenenza alla società in scenari multi‑company.
- Dimenticare di impostare type sui contatti figli. Indirizzi di fatturazione e spedizione devono avere il tipo corretto per comparire nei documenti.
- Sovrascrivere metodi core senza chiamare super(). Questo può rompere altri moduli o complicare upgrade futuri.
- Aggiungere campi obbligatori senza valori di default. I record esistenti potrebbero fallire la validazione durante un aggiornamento.
Conclusione
Il modello res.partner è il fulcro di Odoo per anagrafiche, clienti e fornitori. Conoscere i suoi campi e i modi in cui viene esteso ti permette di configurare, personalizzare e integrare Odoo in modo efficace.
Che tu sia un consulente funzionale che mappa processi aziendali o uno sviluppatore che crea moduli, una conoscenza solida di res.partner fa risparmiare tempo ed evita errori costosi.
Hai bisogno di aiuto per la tua implementazione Odoo?
Dasolo affianca le aziende nell'implementazione, personalizzazione e ottimizzazione di Odoo. Siamo specializzati in integrazioni API e sviluppo Odoo, con esperienza approfondita sull'architettura dati e modelli come res.partner.
Se cerchi supporto per implementazioni Odoo, moduli su misura o integrazioni, possiamo aiutarti. Prenota una demo per discutere il tuo progetto.