Introduction
Dans Odoo, un modèle décrit la manière dont les informations sont organisées et conservées dans la base de données. Tout élément métier — devis, factures, projets, tâches — est représenté par un enregistrement d’un modèle spécifique.
Maîtriser les modèles Odoo est indispensable, tant pour les consultants fonctionnels que pour les développeurs. Ce sont eux qui structurent les champs, les relations et la logique métier. Les modèles suivent des conventions récurrentes qui facilitent les développements et les intégrations.
Ici, nous explorons en détail le modèle project.project — un des piliers pour la gestion des projets. Que vous configuriez des workflows, connectiez un outil externe ou développiez un module sur mesure, vous serez amené à manipuler ce modèle.
Qu’est-ce que le model.project
Le modèle project.project représente l’entité « projet » dans Odoo : il centralise les tâches, jalons, paramètres de collaboration et règles d’accès. Chaque projet créé dans l’application Project correspond à un enregistrement de ce modèle.
L’application Projet s’appuie sur ce modèle pour stocker la configuration et les liens entre objets. Un projet créé génère un record project.project ; les tâches lui sont rattachées via un champ relationnel. Le modèle détermine aussi les étapes, l’équipe et les règles de visibilité du projet.
Le modèle de base se trouve dans le module project, mais d’autres modules l’enrichissent via l’héritage Odoo : la facturation liée aux projets vient du module Sales, le suivi du temps depuis Timesheet, et la planification depuis Project Planning. Chaque extension complète la structure sans dupliquer l’existant.
Saisir la complémentarité entre project.project et project.task est fondamental : le projet contient les paramètres partagés et la structure d’équipe, tandis que la tâche représente l’unité de travail. Leur interaction définit le cœur du workflow projet dans Odoo.
Champs essentiels du modèle
Voici les champs principaux du modèle project.project. Les connaître permet d’administrer, filtrer et automatiser vos projets plus efficacement.
1. name
Type : Char. Intitulé du projet. Champ affiché dans la plupart des vues et utilisé comme repère principal pour identifier le projet.
2. create_date
Type : Datetime. Date et heure de création de l’enregistrement. Géré automatiquement par Odoo, utile pour les rapports et les audits.
3. write_date
Type : Datetime. Date et heure de la dernière modification. Comme create_date, elle est maintenue automatiquement et sert au suivi des changements.
4. active
Type : Boolean. Indicateur d’archivage. Lorsqu’il est faux, le projet est masqué dans les vues par défaut sans être supprimé définitivement.
5. sequence
Type : Integer. Sert à ordonner l’affichage des projets dans les listes ou menus. Les valeurs basses remontent en premier.
6. color
Type : Integer. Indice de couleur pour différencier visuellement les projets (kanban, listes, etc.).
7. user_id
Type : Many2one (res.users). Responsable ou chef de projet. Sert souvent d’assignation par défaut pour les tâches.
8. company_id
Type : Many2one (res.company). En environnement multi-sociétés, indique l’entité propriétaire du projet.
9. partner_id
Type : Many2one (res.partner). Client ou partenaire lié au projet, utile pour la facturation et le reporting commercial.
10. description
Type : Html. Présentation détaillée du projet, permet formatage (HTML) pour briefs ou notes explicatives.
11. date_start
Type : Date. Date de démarrage prévue du projet, utilisée pour la planification et le suivi.
12. date
Type : Date. Date de fin / échéance du projet, essentielle pour le pilotage et les indicateurs de délai.
13. task_ids
Type : One2many (project.task). Liste des tâches associées au projet — c’est la relation principale entre projets et tâches.
14. task_count
Type : Integer. Nombre de tâches liées, calculé à partir de task_ids ; pratique pour les vues synthétiques et les filtres.
15. type_ids
Type : Many2many (project.task.type). Étapes ou types de tâches du projet — définissent le workflow (ex. À faire, En cours, Terminé).
16. tag_ids
Type : Many2many (project.tags). Étiquettes pour classer et filtrer les projets selon vos critères métiers.
17. privacy_visibility
Type : Selection. Contrôle l’accès au projet : accès restreint aux utilisateurs invités, accès interne à tous, ou accès public incluant les utilisateurs portal.
18. collaborator_ids
Type : One2many (project.collaborator). Membres de l’équipe affectés au projet, qui peuvent être assignés aux tâches.
19. favorite_user_ids
Type : Many2many (res.users). Utilisateurs ayant marqué le projet en favori, pour un accès rapide depuis le tableau de bord.
20. allow_task_dependencies
Type : Boolean. Autorise la création de dépendances entre tâches (prédécesseurs / successeurs), utile pour la planification avancée.
21. allow_milestones
Type : Boolean. Active la gestion de jalons dans le projet, pour repérer les livrables clés.
22. milestone_ids
Type : One2many (project.milestone). Liste des jalons du projet, utile pour le suivi d’étapes clés.
23. rating_active
Type : Boolean. Permet au client d’évaluer le projet via le portail — levier de retour d’expérience.
24. task_properties_definition
Type : Text (JSON). Définitions JSON de propriétés additionnelles pour les tâches — permet d’ajouter des champs métiers dynamiques.
25. access_url
Type : Char. Lien public pour l’accès client au projet via le portail, utile pour collaboration externe.
26. access_token
Type : Char. Jeton de sécurité associé à access_url pour protéger l’accès aux informations projet.
27. alias_id
Type : Many2one (mail.alias). Alias e‑mail du projet : les messages reçus peuvent créer automatiquement des tâches.
28. activity_ids
Type : One2many (mail.activity). Activités planifiées liées au projet pour relances et suivis opérationnels.
29. activity_state
Type : Selection. Synthèse de l’état des activités (Aujourd’hui, En retard, Planifié), calculée depuis activity_ids.
30. activity_date_deadline
Type : Date. Date du prochain rappel ou action planifiée, utile pour prioriser le travail.
31. message_ids
Type : One2many (mail.message). Messages du chatter liés au projet pour la communication interne.
32. message_follower_ids
Type : One2many (mail.followers). Abonnés au projet qui reçoivent notifications et mises à jour.
33. create_uid
Type : Many2one (res.users). Utilisateur ayant créé l’enregistrement ; renseigné automatiquement par Odoo.
34. write_uid
Type : Many2one (res.users). Dernier utilisateur ayant modifié le projet ; maintenu automatiquement pour audit.
Utilisation du modèle dans les processus métiers
1. Création et gestion d’un projet
Lors de la création, le responsable définit le titre, le chef de projet, les dates et la visibilité. Ces paramètres sont stockés dans project.project, puis on y rattache les tâches et la configuration d’équipe adéquates.
2. Flux de travail des tâches
Les tâches progressent selon les étapes configurées dans type_ids. Le chef de projet répartit les tâches aux collaborateurs et pilote le passage d’étape via la configuration du projet.
3. Portail client
Si la visibilité le permet, le client accède via l’URL fournie au portail pour consulter tâches et jalons. Le jeton d’accès sécurise le lien et évite les accès non autorisés — pratique pour la collaboration externe.
4. Feuilles de temps et facturation
Avec le module Timesheet, les enregistrements de temps se lient au projet ; avec Sales, un projet peut être rattaché à un ordre de vente pour facturation au projet. Le champ partner_id assure la jonction avec le client facturable.
5. Intégration e‑mail
Les mails adressés à l’alias du projet peuvent engendrer automatiquement des tâches. L’alias_id relie le projet à sa boîte mail, simplifiant la transformation d’e‑mails en actions opérationnelles.
Comment les développeurs étendent ce modèle
Les développeurs enrichissent project.project via plusieurs méthodes, l’héritage de modèle étant la plus courante.
Héritage de modèle
Déclarez _inherit = 'project.project' pour étendre le modèle : ajouter des champs, surcharger des méthodes ou imposer des contraintes. L’héritage permet de conserver les changements dans un module séparé, facilitant les montées de version sans toucher au code source d’origine.
Ajout de champs
Déclarez vos nouveaux champs dans le modèle hérité en choisissant le type adapté (Char, Many2one, Boolean, Integer, Text, Selection). Pour les environnements multi‑sociétés, pensez aux champs dépendants de company_id.
Extensions Python
Surchargez create, write ou unlink pour injecter de la logique métier, en appelant super() pour préserver le comportement natif. Prenez garde aux champs calculés et à leurs dépendances pour éviter des recalculs incorrects.
Odoo Studio
Odoo Studio permet d’ajouter des champs sans coder — pratique pour des adaptations rapides. Pour des règles métier complexes ou pour assurer la maintenabilité, préférez toutefois un module personnalisé.
Bonnes pratiques
- Attribuez systematiquement le user_id pour clarifier la responsabilité du projet — cela facilite le pilotage et les relances.
- Personnalisez type_ids pour refléter vos étapes métiers ; un workflow pertinent évite les blocages opérationnels.
- Paramétrez privacy_visibility en fonction du niveau d’accès requis : un projet privé limite l’exposition aux seules personnes concernées.
- Pour les intégrations API, privilégiez XML‑RPC ou JSON‑RPC exposés par Odoo. Le modèle project.project est accessible via l’API : mappez correctement les identifiants et les champs externes.
- Pour les champs personnalisés, respectez la convention x_ ou préfixez par le nom de votre module afin d’éviter tout conflit lors d’une mise à jour Odoo.
Erreurs fréquentes
- Ne créez pas de tâches orphelines : omettez un project_id empêche le bon rattachement et complique le reporting.
- Ne laissez pas un projet sans type_ids configurés : sans étapes, les tâches ne peuvent pas suivre un flux défini.
- Évitez d’ouvrir l’accès public là où des informations sensibles sont présentes — vérifiez systématiquement privacy_visibility avant publication.
- N’outrepassez pas les méthodes cœur sans appeler super() : cela risque de casser d’autres modules et d’entraver les upgrades futures.
- Ne rendre pas des champs personnalisés obligatoires sans prévoir de valeurs par défaut : les enregistrements existants pourraient échouer lors des migrations.
Conclusion
Le modèle project.project est le pivot de la gestion de projet dans Odoo : il centralise la définition des projets, les étapes de travail et la composition des équipes. Comprendre ses champs et la façon dont d’autres modules l’étendent vous permettra de configurer et d’intégrer Odoo avec plus d’efficacité.
Qu’on soit consultant fonctionnel qui paramètre des projets ou développeur qui construit des modules, une bonne connaissance de project.project réduit les erreurs et accélère les déploiements.
Besoin d’aide pour votre déploiement Odoo ?
Dasolo accompagne les entreprises dans l’implémentation, la personnalisation et l’optimisation d’Odoo. Nous intervenons sur les intégrations API et le développement, avec une expertise approfondie des modèles et de l’architecture de données d’Odoo, notamment project.project.
Si vous souhaitez un accompagnement pour votre implémentation Odoo, la création de modules sur mesure ou la connexion d’applications externes, notre équipe est disponible pour en discuter. Planifiez une démo pour évoquer votre projet.