Introduction
Dans Odoo, les modèles définissent comment les données sont structurées et stockées dans la base de données. Chaque élément de données commerciales avec lequel vous travaillez, des commandes de vente aux factures en passant par les produits, vit dans un modèle.
Comprendre les modèles Odoo est essentiel tant pour les développeurs que pour les consultants fonctionnels. Les modèles sont la base de l'architecture des données d'Odoo. Ils définissent les champs Odoo, les relations et la logique commerciale. Chaque modèle dans Odoo suit les mêmes schémas.
Cet article se concentre sur l'un des modèles les plus importants d'Odoo : product.template. Que vous construisiez des modules personnalisés, intégriez des systèmes externes ou configuriez des catalogues de produits, vous travaillerez avec ce modèle.
Qu'est-ce que le modèle product.template
Le modèle product.template représente un groupe de produits similaires qui ne diffèrent que par quelques propriétés, telles que la taille ou la couleur. Plutôt que de créer des enregistrements de produits séparés pour chaque variation, les produits sont organisés en modèles avec des variantes.
Ce modèle dans Odoo est utilisé dans les ventes, les achats, l'inventaire, le commerce électronique et la fabrication. Lorsque vous créez un produit dans le catalogue, vous créez un enregistrement product.template. Lorsque vous créez une commande client, vous sélectionnez parmi les variantes de produits qui héritent du modèle.
Le modèle est défini dans le module produit. D'autres modules l'étendent par le biais de l'héritage de modèle Odoo. La vente ajoute la tarification et la facturation. L'achat ajoute la gestion des fournisseurs. L'inventaire ajoute le suivi des stocks. Chaque module ajoute ce dont il a besoin sans dupliquer la structure de base.
Comprendre la différence entre product.template et product.product est essentiel. Le modèle contient des données partagées. La variante (product.product) contient des données spécifiques à la variante comme le code-barres et le SKU.
Champs clés dans le modèle
Voici les champs Odoo les plus importants dans le modèle product.template. Comprendre ceux-ci vous aidera à travailler efficacement avec les produits.
1. nom
Type : Char. Ce champ stocke le nom du produit. Il est affiché dans de nombreuses vues Odoo et est l'identifiant principal pour le modèle de produit.
2. date_de_creation
Type : Datetime. Stocke la date et l'heure auxquelles l'enregistrement a été créé. Géré automatiquement par Odoo. Utile pour les rapports et les audits.
3. date_de_modification
Type : Datetime. Stocke la date et l'heure de la dernière modification. Également géré automatiquement. Aide à suivre quand les données ont été mises à jour pour la dernière fois.
4. actif
Type: Booléen. Indicateur de suppression douce. Lorsque Faux, l'enregistrement est archivé et caché des vues par défaut. Les enregistrements ne sont pas physiquement supprimés.
5. séquence
Type: Entier. Ordre d'affichage pour le tri. Utilisé dans les listes de produits et les menus déroulants. Les valeurs plus basses apparaissent en premier.
6. type
Type: Sélection. Type de produit : Consommable, Service ou Produit Stockable. Les consommables ne sont pas suivis en stock. Les services n'ont pas d'inventaire physique. Les produits stockables sont suivis en inventaire.
7. categ_id
Type: Many2one (product.category). La catégorie de produit. Influence les rapports, les itinéraires par défaut et l'organisation du catalogue. Les catégories peuvent être hiérarchiques.
8. list_price
Type: Flottant. Le prix de vente. Utilisé par défaut lors de la création de devis. Peut être remplacé par des listes de prix ou des prix spécifiques aux variantes.
9. standard_price
Type: Flottant. Le prix de coût. Utilisé pour les calculs de marge et l'évaluation des stocks. Affecte les rapports de rentabilité.
10. currency_id
Type: Many2one (res.currency). La devise pour list_price et standard_price. Généralement héritée de l'entreprise.
11. uom_id
Type: Many2one (uom.uom). L'unité de mesure pour les ventes. Définit comment les quantités sont exprimées (par exemple, unités, Kg, litres).
12. uom_po_id
Type: Many2one (uom.uom). L'unité de mesure pour les achats. Peut différer de uom_id pour des scénarios de conversion.
13. default_code
Type: Char. Référence interne ou code. Utile pour le mapping avec des systèmes externes et la numérotation personnalisée. Souvent utilisé comme SKU.
14. barcode
Type: Char. Code-barres pour le scan. Utilisé dans le POS, l'entrepôt et l'inventaire. Pour les variantes, le code-barres est généralement sur product.product.
15. description
Type: Char. Description interne. Visible uniquement pour les utilisateurs internes. Utilisé pour des notes internes sur le produit.
16. description_sale
Type: Texte. Description de vente. Affichée sur les devis et les factures. Peut inclure du HTML pour le formatage.
17. description_achat
Type: Texte. Description d'achat. Affichée sur les bons de commande et les factures fournisseurs. Aide les acheteurs à communiquer avec les fournisseurs.
18. vente_ok
Type: Booléen. Indique si le produit peut être vendu. Lorsque False, le produit est masqué des formulaires de vente et de devis.
19. achat_ok
Type: Booléen. Indique si le produit peut être acheté. Lorsque False, le produit est masqué des formulaires d'achat.
20. poids
Type: Flottant. Poids du produit. Utilisé pour les calculs d'expédition et la logistique. L'unité dépend des paramètres UoM de l'entreprise.
21. volume
Type: Flottant. Volume du produit. Utilisé pour la logistique et la planification de la capacité d'entrepôt.
22. identifiants_variantes_produit
Type: One2many (product.product). La liste des variantes de produit. Chaque variante hérite du modèle.
23. product_variant_count
Type: Entier. Nombre de variantes. Calculé à partir de product_variant_ids. Utilisé pour l'affichage et le filtrage.
24. image_1920
Type: Binaire. Image du produit. Odoo stocke plusieurs tailles. Utilisé dans les formulaires, les rapports et le site web.
25. responsible_id
Type: Many2one (res.users). L'utilisateur responsable. Utilisé pour la gestion des produits et l'attribution des activités.
26. company_id
Type: Many2one (res.company). Dans les configurations multi-entreprises, cela indique à quelle entreprise Odoo appartient le produit.
27. tax_ids
Type: Many2many (account.tax). Taxes clients pour les ventes. Appliquées sur les factures et les devis.
28. supplier_tax_id
Type: Many2many (account.tax). Taxes fournisseurs pour les achats. Appliqué sur les factures fournisseurs.
29. attribute_line_ids
Type: One2many. Lignes d'attributs de produit pour les variantes. Définit quels attributs (par exemple, Taille, Couleur) créent des variantes.
30. route_ids
Type: Many2many (stock.route). Itinéraires de stock. Détermine comment le produit se déplace à travers la chaîne d'approvisionnement (par exemple, Acheter, Fabriquer sur commande).
31. property_stock_production
Type: Many2one (stock.location). Emplacement de production pour les produits fabriqués. Utilisé lorsque le type est Stockable et que l'itinéraire inclut la fabrication.
32. property_stock_inventory
Type: Many2one (stock.location). Emplacement d'ajustement d'inventaire. Utilisé pour les comptages de stock et les corrections.
33. property_valuation
Type: Sélection. Méthode d'évaluation des stocks : Automatisée ou Manuelle. Affecte la manière dont le coût est calculé.
34. property_cost_method
Type : Sélection. Méthode de coût : Standard ou FIFO. Détermine comment la valeur des stocks est calculée.
35. property_account_income_id
Type : Many2one (account.account). Compte de revenus pour les ventes. Utilisé lors de la facturation.
36. property_account_expense_id
Type : Many2one (account.account). Compte de dépenses pour les achats. Utilisé lors de la réception des factures fournisseurs.
37. invoice_policy
Type : Sélection. Quand facturer : Quantités commandées ou Quantités livrées. Affecte le moment où les revenus sont reconnus.
38. expense_policy
Type : Sélection. Quand comptabiliser les dépenses : Commandé ou Livré. Affecte le moment où les coûts sont reconnus.
39. service_type
Type : Sélection. Pour les produits de service : Manuel, Feuille de temps ou Jalons. Détermine comment les services sont suivis et facturés.
40. optional_product_ids
Type : Many2many (product.template). Produits optionnels pour la vente incitative. Affiché lors de l'ajout de ce produit à un devis.
Comment ce modèle est utilisé dans les workflows d'entreprise
1. Ventes et Devis
Lorsqu'un commercial crée un devis, il sélectionne des produits dans le catalogue. Le modèle product.template fournit le produit de base. Les variantes sont choisies lorsque le produit a des attributs (taille, couleur).
2. E-commerce
Sur le site web, les clients voient des modèles de produits dans le catalogue. Lorsqu'ils cliquent sur un produit, ils peuvent choisir parmi les variantes. Le modèle contient la description et les images partagées.
3. Achats et Fournisseurs
Les commandes d'achat et les factures fournisseurs sont liées à product.template. Le champ purchase_ok contrôle la visibilité. Le supplier_tax_id et uom_po_id influencent le comportement d'achat.
4. Inventaire et Fabrication
Les mouvements de stock et les ordres de fabrication font référence aux variantes de produit. Le modèle définit les itinéraires, l'évaluation et la méthode de coût. L'inventaire est suivi par variante.
5. Facturation
Les factures et les factures font référence aux lignes de produits. Le modèle fournit des règles fiscales et des comptes comptables. La politique de facturation détermine quand les revenus sont reconnus.
Comment les développeurs étendent ce modèle
Les développeurs étendent product.template en utilisant plusieurs modèles. L'héritage de modèle Odoo est le principal mécanisme.
Héritage de Modèle
Utilisez _inherit = 'product.template' pour étendre le modèle. C'est l'héritage de modèle Odoo en action. Ajoutez de nouveaux champs Odoo, remplacez des méthodes ou ajoutez des contraintes. Le modèle hérité dans Odoo conserve vos modifications dans un module séparé pour des mises à jour faciles. Lorsque vous héritez d'un modèle dans Odoo, vous l'étendez sans modifier l'original.
Ajout de Champs
Définissez de nouveaux champs Odoo dans votre modèle hérité. Utilisez le bon type de champ : Char, Many2one, Boolean, Integer, Text, Selection. Considérez les champs dépendants de l'entreprise pour une multi-entreprise.
Extensions Python
Remplacez create, write ou unlink pour ajouter de la logique. Utilisez super() pour appeler l'original. Faites attention aux champs calculés et à leurs dépendances.
Odoo Studio
Odoo Studio vous permet d'ajouter des champs sans code. Bon pour des personnalisations rapides. Pour une logique complexe ou des mises à jour, les modules personnalisés sont plus maintenables.
Meilleures pratiques
- Utilisez correctement la relation template-variant. Mettez les données partagées sur le modèle, les données spécifiques à la variante sur product.product.
- Définissez categ_id pour un routage et un reporting appropriés. Les catégories déterminent le comportement par défaut.
- Utilisez default_code pour le mappage avec des systèmes externes. Gardez-le unique si possible.
- Lors de la création d'intégrations API, utilisez l'API XML-RPC ou JSON-RPC. Le modèle product.template est entièrement exposé en tant que modèle API dans Odoo. Mappez les ID externes avec soin.
- Pour les champs personnalisés, utilisez le préfixe
x_ou un préfixe de module pour éviter les conflits avec les futures versions d'Odoo.
Erreurs courantes
- Créer des modèles en double au lieu d'utiliser des variantes. Utilisez attribute_line_ids pour les produits qui diffèrent uniquement par la taille, la couleur, etc.
- Confondre product.template et product.product. Lorsque vous avez besoin de données spécifiques à la variante (code-barres, SKU), utilisez product.product.
- Oublier de définir sale_ok ou purchase_ok. Les produits sont cachés des formulaires lorsque ceux-ci sont False.
- Surcharger des méthodes de base sans appeler super(). Cela peut casser d'autres modules ou des mises à jour futures.
- Ajouter des champs personnalisés requis sans valeurs par défaut. Les enregistrements existants échoueront à la validation lors de la mise à jour.
Conclusion
Le modèle product.template est central pour Odoo. Il stocke les définitions de produits et les attributs partagés. Comprendre ses champs et comment les modules l'étendent vous aidera à configurer, personnaliser et intégrer Odoo efficacement.
Que vous soyez un consultant fonctionnel cartographiant des catalogues de produits ou un développeur construisant des modules personnalisés, une bonne compréhension de product.template vous fera gagner du temps et évitera des erreurs.
Commencer avec Dasolo
Dasolo aide les entreprises à mettre en œuvre, personnaliser et optimiser Odoo. Nous nous spécialisons dans les intégrations API et le développement Odoo. Notre équipe a une grande expérience de l'architecture des données Odoo et des modèles comme product.template.
Si vous avez besoin d'aide pour votre mise en œuvre Odoo, vos modules personnalisés ou vos intégrations, nous sommes là pour vous aider. Réservez une démo pour discuter de votre projet.