Introduzione
In Odoo i modelli descrivono la forma dei dati: sono gli schemi che definiscono come le informazioni vengono salvate nel database. Ogni entità aziendale — dall’ordine di vendita al progetto o al singolo task — è rappresentata da un record in un modello.
Conoscere i modelli Odoo è fondamentale sia per chi configura il sistema sia per chi sviluppa. I modelli costituiscono l’ossatura del dato: dichiarano i campi, le relazioni e la logica applicativa. In Odoo la maggior parte dei modelli segue convenzioni comuni che semplificano estensioni e integrazioni.
Questo testo si concentra su uno dei modelli più utilizzati nella gestione progetti: project.project. Che tu stia creando moduli personalizzati, collegando sistemi esterni o solo impostando flussi lavoro, incontrerai frequentemente questo modello.
Cos’è il modello project.project
Il modello project.project rappresenta un progetto in Odoo: è il contenitore che raggruppa task, milestone e le impostazioni del team. Ogni progetto attivo è un record all’interno di questo modello.
L’app Project utilizza project.project come entità principale. Quando si crea un progetto in Odoo si crea un record project.project; i task vengono collegati a quel progetto tramite il campo task_ids. Il progetto definisce stage, membri del team e le regole di visibilità.
Il modello è dichiarato nel modulo project e altri moduli lo estendono tramite l’ereditarietà dei modelli di Odoo. Per esempio, il modulo Sale può aggiungere funzionalità di fatturazione per progetto; Timesheet integra registrazioni temporali; i moduli di pianificazione aggiungono funzionalità di Gantt. Ognuno aggiunge ciò che serve senza duplicare la struttura di base.
Capire la relazione tra project.project e project.task è essenziale: il progetto contiene le impostazioni condivise e la struttura del flusso di lavoro, mentre il task rappresenta l’elemento operativo singolo. Entrambi sono nodi chiave nel processo di gestione progetti in Odoo.
Campi chiave del modello
Di seguito i campi più importanti del modello project.project: conoscerli facilita configurazione, filtri e sviluppo di integrazioni.
1. name
Tipo: Char. Il nome del progetto, visibile in elenchi e schede; è l’etichetta principale con cui gli utenti identificano il progetto.
2. create_date
Tipo: Datetime. Timestamp di creazione del record, gestito automaticamente da Odoo. Utile per reportistica e audit.
3. write_date
Tipo: Datetime. Timestamp dell’ultima modifica, impostato automaticamente. Serve per tracciare aggiornamenti.
4. active
Tipo: Boolean. Flag di archiviazione: quando è False il progetto resta nel database ma viene nascosto dalle viste standard.
5. sequence
Tipo: Integer. Valore per l’ordinamento nei menu e nelle liste; numeri minori vengono mostrati prima.
6. color
Tipo: Integer. Indice colore usato in kanban e viste per distinguere visualmente i progetti.
7. user_id
Tipo: Many2one (res.users). Il responsabile del progetto: utente di riferimento e spesso assegnatario predefinito.
8. company_id
Tipo: Many2one (res.company). In scenari multi-azienda indica a quale azienda appartiene il progetto.
9. partner_id
Tipo: Many2one (res.partner). Il cliente collegato al progetto, importante per fatturazione e reporting commerciale.
10. description
Tipo: Html. Testo descrittivo del progetto; supporta formattazione HTML per brief, note e istruzioni.
11. date_start
Tipo: Date. Data di avvio del progetto, usata per pianificazione e cruscotti temporali.
12. date
Tipo: Date. Data di fine o scadenza prevista del progetto, utile per controllo scadenze.
13. task_ids
Tipo: One2many (project.task). Elenco dei task collegati al progetto: relazione principale tra progetto e attività.
14. task_count
Tipo: Integer. Conteggio dei task nel progetto, calcolato da task_ids; usato per visualizzazioni e filtri rapidi.
15. type_ids
Tipo: Many2many (project.task.type). Gli stage o tipi dei task associati al progetto che definiscono il flusso (es. Da fare, In corso, Fatto).
16. tag_ids
Tipo: Many2many (project.tags). Tag di classificazione del progetto, utili per filtri e raggruppamenti personalizzati.
17. privacy_visibility
Tipo: Selection. Definisce chi può accedere al progetto: utenti invitati, tutti gli interni, o anche utenti portal invitati (pubblico).
18. collaborator_ids
Tipo: One2many (project.collaborator). Membri del team associati al progetto; determina chi può collaborare attivamente.
19. favorite_user_ids
Tipo: Many2many (res.users). Utenti che hanno segnato il progetto come preferito per accesso rapido nella dashboard.
20. allow_task_dependencies
Tipo: Boolean. Abilita le dipendenze tra task (predecessore/successore), funzionalità utile per pianificazioni più complesse.
21. allow_milestones
Tipo: Boolean. Consente la creazione di milestone all’interno del progetto per segnare traguardi importanti.
22. milestone_ids
Tipo: One2many (project.milestone). Elenco delle milestone del progetto, usate per monitorare le tappe principali.
23. rating_active
Tipo: Boolean. Abilita la possibilità per i clienti di valutare il progetto, utile per feedback e qualità del servizio.
24. task_properties_definition
Tipo: Text (JSON). Definizione personalizzata delle proprietà dei task: permette di aggiungere campi specifici configurati per progetto.
25. access_url
Tipo: Char. URL pubblico/portal per consentire ai clienti di consultare il progetto; usato nelle collaborazioni esterne.
26. access_token
Tipo: Char. Token di sicurezza per l’accesso via URL al portal: tutela la visibilità dei dati esposti esternamente.
27. alias_id
Tipo: Many2one (mail.alias). Alias email del progetto: le email in arrivo possono generare task automaticamente.
28. activity_ids
Tipo: One2many (mail.activity). Attività programmate legate al progetto (promemoria, follow-up).
29. activity_state
Tipo: Selection. Stato sintetico delle attività (Oggi, Scadute, Pianificate), calcolato dalle activity legate al progetto.
30. activity_date_deadline
Tipo: Date. Data della prossima attività programmata; utile per priorità operative.
31. message_ids
Tipo: One2many (mail.message). Messaggi della chatter del progetto: canale di comunicazione interna e storico conversazioni.
32. message_follower_ids
Tipo: One2many (mail.followers). Utenti che seguono il progetto e ricevono notifiche su aggiornamenti.
33. create_uid
Tipo: Many2one (res.users). Utente che ha creato il record; impostato automaticamente da Odoo.
34. write_uid
Tipo: Many2one (res.users). Utente che ha effettuato l’ultima modifica; impostato automaticamente.
Come viene usato questo modello nei processi aziendali
1. Creazione e gestione del progetto
Quando un commerciale o un project manager crea un progetto, imposta nome, responsabile, date e livello di visibilità: tutti questi dati vengono salvati in project.project. Successivamente si aggiungono i task e si collegano al progetto per cominciare l’esecuzione.
2. Flusso di lavoro dei task
I task si muovono attraverso gli stage definiti in type_ids. Il manager assegna compiti ai collaboratori e il progetto mantiene la configurazione del workflow e la struttura del team.
3. Portale cliente
Se la visibilità lo consente, i clienti possono accedere a task e milestone via access_url protetto da access_token: una funzione pratica per progetti con collaborazione esterna.
4. Timesheet e fatturazione
Con il modulo Timesheet i progetti si collegano alle registrazioni ore; con Sale si possono legare a ordini di vendita per fatturazione a progetto. Il campo partner_id fa da ponte tra progetto e cliente commerciale.
5. Integrazione email
Le email in arrivo all’alias del progetto possono creare automaticamente task: alias_id gestisce questa integrazione e semplifica la cattura di richieste da posta elettronica.
Come gli sviluppatori estendono questo modello
Gli sviluppatori estendono project.project con diversi pattern standard di Odoo, sfruttando soprattutto l’ereditarietà dei modelli.
Ereditarietà del modello
Per estendere il modello si usa _inherit = 'project.project'. Questo permette di aggiungere campi, ridefinire comportamenti o aggiungere vincoli senza toccare il codice originale, facilitando manutenzione e aggiornamenti.
Aggiunta di campi
Nei moduli ereditati si dichiarano nuovi campi usando i tipi adeguati (Char, Many2one, Boolean, Integer, Text, Selection). Nei contesti multi-azienda valuta se rendere il campo dipendente dall’azienda.
Estensioni in Python
È possibile sovrascrivere metodi come create, write o unlink per inserire logica custom: ricordati di chiamare super() per preservare il comportamento di base, e presta attenzione alle dipendenze dei campi calcolati.
Odoo Studio
Odoo Studio permette di aggiungere campi e modificare viste senza codice, ideale per personalizzazioni rapide; per logiche complesse o scenari di upgrade conviene però ricorrere a moduli custom.
Buone pratiche
- Assegna sempre user_id al project manager per avere responsabilità chiare e tracciabili.
- Configura type_ids in base al flusso reale del tuo team: stage coerenti facilitano il monitoraggio e le automazioni.
- Usa privacy_visibility in modo consapevole: i progetti privati devono essere limitati a follower e amministratori per proteggere dati sensibili.
- Per integrazioni API usate XML-RPC o JSON-RPC: project.project è esposto come modello API e richiede che gli ID esterni vengano mappati con cura.
- Per i campi custom conviene usare il prefisso x_ o un prefisso di modulo per evitare collisioni con futuri campi introdotti da Odoo.
Errori comuni
- Creare task scollegati da un progetto: ogni task dovrebbe avere un project_id per garantire coerenza nei report e nelle viste.
- Dimenticare di impostare type_ids: un progetto senza stage impedisce il corretto avanzamento dei task nel workflow.
- Impostare privacy_visibility su pubblico quando serviva riservatezza può esporre informazioni critiche.
- Sovrascrivere metodi core senza chiamare super(): questo può rompere integrazioni e rendere difficili gli aggiornamenti futuri.
- Aggiungere campi obbligatori senza default: i record esistenti potrebbero fallire la validazione dopo l’upgrade.
Conclusione
Il modello project.project è il cuore della gestione progetti in Odoo: conserva la definizione dei progetti, gli stage del workflow e la struttura del team. Sapere come sono fatti i campi e come i moduli li estendono è essenziale per configurare, personalizzare e integrare Odoo in modo efficace.
Che tu sia un consulente funzionale che imposta i progetti o uno sviluppatore che crea moduli, padroneggiare project.project ti farà risparmiare tempo ed evitare errori comuni.
Serve aiuto per la tua implementazione Odoo?
Dasolo supporta le aziende nell’implementazione, personalizzazione e ottimizzazione di Odoo. Siamo specializzati in integrazioni API e sviluppo su misura, con esperienza approfondita nell’architettura dati di Odoo e modelli come project.project.
Se ti serve supporto per l’implementazione Odoo, per sviluppare moduli custom o per integrare sistemi, siamo a disposizione. Prenota una demo per parlare del tuo progetto.