Se rendre au contenu

Le modèle sale.order.line : Comprendre l'architecture des lignes de commande de vente d'Odoo

Un guide complet sur le modèle de ligne de commande de vente d'Odoo pour les développeurs et les consultants fonctionnels.
10 mars 2026 par
Le modèle sale.order.line : Comprendre l'architecture des lignes de commande de vente d'Odoo
Dasolo
| Aucun commentaire pour l'instant

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 contacts, 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 Odoo. Ils définissent les champs, les relations et la logique commerciale.


Cet article se concentre sur l'un des modèles les plus importants du module Ventes : sale.order.line. Que vous construisiez des modules personnalisés, intégriez des systèmes externes ou configuriez des flux de travail de tarification, vous travaillerez avec ce modèle.

Qu'est-ce que le modèle sale.order.line


Le modèle sale.order.line représente des lignes d'articles individuelles sur un devis ou une commande de vente dans Odoo. Chaque ligne correspond généralement à un produit, avec des informations sur la quantité, le prix et la taxe.


Ce modèle dans Odoo est utilisé par le module Ventes (sale). Il hérite de analytic.mixin pour le suivi des coûts de projet et l'intégration des feuilles de temps. Lorsque vous ajoutez un produit à un devis, vous créez un enregistrement sale.order.line.


Le modèle est défini dans le module de vente. D'autres modules l'étendent par le biais de l'héritage de modèle Odoo. Par exemple, sale_stock ajoute des champs liés à la livraison. sale_margin ajoute des calculs de marge. Chaque module ajoute ce dont il a besoin sans dupliquer la structure de base.

Champs clés dans le modèle


Voici les champs Odoo les plus importants dans le modèle sale.order.line. Comprendre ceux-ci vous aidera à travailler efficacement avec les devis et les commandes de vente.


1. order_id

Type : Many2one (sale.order). Requis. Référence à la commande de vente parente. Ce champ lie chaque ligne à sa parente. Les lignes sont supprimées lorsque la commande est supprimée (cascade).


2. sequence

Type : Integer. Par défaut 10. Contrôle l'ordre d'affichage des lignes sur la commande. Utilisé pour trier les sections, les notes et les lignes de produits.


3. company_id

Type : Many2one (res.company). Lié à order_id. Utilisé pour les règles multi-entreprises et le contrôle d'accès.


4. currency_id

Type : Many2one (res.currency). Lié à order_id. Utilisé pour tous les champs monétaires sur la ligne. Assure la bonne devise pour la tarification.


5. order_partner_id

Type : Many2one (res.partner). Lié à order_id. Le client. Utilisé pour la liste de prix et les règles fiscales.


6. salesman_id

Type : Many2one (res.users). Lié à order_id. Le vendeur. Utilisé pour les commissions et les rapports.


7. state

Type : Sélection. Lié à order_id. Statut de la commande (brouillon, envoyé, vente, terminé, annulé). Détermine quels champs sont modifiables.


8. display_type

Type : Sélection. Valeurs : line_section ou line_note. Lorsqu'il est défini, la ligne est un en-tête de section ou une note, et non une ligne de produit. Les champs de produit sont vides.


9. is_downpayment

Type : Booléen. Indique si la ligne est un acompte. Les acomptes sont facturés séparément.


10. is_expense

Type : Booléen. Vrai lorsque la ligne provient d'une dépense ou d'une facture fournisseur. Utilisé pour le suivi des coûts de projet.


11. product_id

Type: Many2one (product.product). Le produit vendu. Le domaine est restreint aux produits vendables. Requis pour les lignes de produit.


12. product_template_id

Type: Many2one (product.template). Calculé à partir de product_id. Utilisé par le configurateur de produit pour la sélection de variantes.


13. name

Type: Text. La description de la ligne. Calculée à partir des attributs de produit et personnalisés. Inclut les détails de variante le cas échéant.


14. product_uom_qty

Type: Float. Requis. La quantité commandée. Par défaut 1.0. Peut être déterminée par l'emballage.


15. product_uom

Type: Many2one (uom.uom). Unité de mesure. Par défaut à partir du produit. Utilisé pour la quantité et le prix.


16. tax_id

Type: Many2many (account.tax). Taxes appliquées à la ligne. Calculées à partir du produit et de la position fiscale.


17. prix_unitaire

Type : Flottant. Requis. Prix unitaire par produit_uom. Calculé à partir de la liste de prix ou du produit. Peut être modifié manuellement.


18. remise

Type : Flottant. Pourcentage de remise. Appliqué au prix_unitaire avant taxe.


19. prix_sous_total

Type : Monétaire. Sous-total avant taxe. Calculé à partir de la quantité, du prix unitaire et de la remise.


20. prix_taxe

Type : Flottant. Montant total de la taxe. Calculé à partir du prix_sous_total et de tax_id.


21. prix_total

Type : Monétaire. Total incluant la taxe. Le montant principal pour la facturation.


22. produit_emballage_id

Type : Many2one (produit.emballage). Emballage optionnel (par exemple, boîte de 12). Lorsqu'il est défini, la quantité peut être déterminée par l'emballage.


23. client_piste

Type: Flottant. Délai en jours. Jours entre la confirmation de commande et l'expédition. Utilisé pour le calcul de la date de livraison.


24. qty_livré

Type: Flottant. Quantité livrée. Mise à jour par les mouvements de stock ou manuellement. Utilisé pour la facturation partielle.


25. qty_facturé

Type: Flottant. Quantité déjà facturée. Calculée à partir des lignes de facture.


26. qty_à_facturer

Type: Flottant. Quantité restante à facturer. Calculée à partir de qty_livré et qty_facturé.


27. statut_facture

Type: Sélection. Valeurs: vente additionnelle, facturé, à facturer, non. Indique l'état de facturation pour la ligne.


28. lignes_facture

Type: Plusieurs à plusieurs (account.move.line). Lien vers les lignes de facture créées à partir de cette ligne de vente. Utilisé pour la traçabilité.


29. date_de_création

Type : Datetime. Quand l'enregistrement a été créé. Géré automatiquement par Odoo.


30. date_de_modification

Type : Datetime. Quand l'enregistrement a été modifié pour la dernière fois. Utilisé pour l'audit.

Comment ce modèle est utilisé dans les flux de travail commerciaux


1. Devis et Commande de Vente

Lorsqu'un commercial crée un devis, il ajoute des produits. Chaque produit devient une sale.order.line. Les lignes montrent la quantité, le prix, la remise et le total. La commande est confirmée lorsque le client accepte.


2. Liste de Prix et Remises

Les listes de prix sont appliquées par ligne. Les champs price_unit et discount sont calculés à partir des règles de la liste de prix. Les remises sur volume ou les prix spécifiques aux clients sont gérés ici.


3. Livraison et Facturation

Lorsque le stock est livré, qty_delivered est mis à jour. La facturation peut se faire par livraison ou en une seule fois. Le champ invoice_status guide l'utilisateur sur ce qu'il reste à facturer.


4. Projet et Services

Pour les produits de service, les lignes sont liées aux tâches de projet et aux feuilles de temps. L'héritage analytic.mixin permet le suivi des coûts par projet.


5. E-commerce et Portail

Les visiteurs du site ajoutent des produits au panier. Chaque ligne de panier devient une vente.commande.ligne lorsque la commande est créée. Le configurateur de produit utilise product_template_id et des attributs personnalisés.

Comment les développeurs étendent ce modèle


Les développeurs étendent vente.commande.ligne en utilisant plusieurs modèles. L'héritage de modèle Odoo est le principal mécanisme.


Héritage de Modèle

Utilisez _inherit = 'sale.order.line' pour étendre le modèle. Ajoutez de nouveaux champs, 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.


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, Sélection. Considérez les champs dépendants de l'entreprise pour les multi-entreprises.


Extensions Python

Remplacez _compute_price_unit, _compute_price_subtotal, ou créez/écrivez 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 faciles à maintenir.

Meilleures pratiques


  • Utilisez display_type pour les sections et les notes au lieu de fausses lignes de produit. Cela garde les rapports clairs.
  • Lors de la création d'intégrations API, créez des lignes via l'order_id. Utilisez le champ order_line_ids sur sale.order avec le format de commande correct.
  • Respectez les contraintes SQL. Une ligne de produit doit avoir product_id et product_uom. Une section ou une note doit avoir display_type.
  • Pour les prix personnalisés, utilisez les règles de liste de prix lorsque cela est possible. Surchargez les méthodes de calcul uniquement lorsque vous avez besoin d'une logique non prise en charge par les listes de prix.
  • 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éation de lignes sans order_id. Le champ est requis. Créez toujours des lignes dans le contexte d'une commande.
  • Confondre product_id et product_template_id. Pour les lignes de produit, définissez product_id. Pour les flux de configurateur, utilisez product_template_id pour sélectionner une variante.
  • Modification de price_unit ou de discount après facturation. Une fois que qty_invoiced est supérieur à zéro, les changements de prix peuvent causer des incohérences.
  • Surcharge des méthodes de base sans appeler super(). Cela peut casser d'autres modules ou des mises à jour futures.
  • Oublier de définir display_type pour les lignes de section ou de note. Sans cela, la ligne est traitée comme une ligne de produit et échouera à la validation.

Conclusion


Le modèle sale.order.line est central pour Odoo Sales. Il stocke chaque ligne de produit sur les devis et les commandes. 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 processus métier ou un développeur construisant des modules personnalisés, une bonne compréhension de sale.order.line vous fera gagner du temps et évitera des erreurs.

Besoin d'aide pour votre implémentation Odoo ?


Dasolo aide les entreprises à mettre en œuvre, personnaliser et optimiser Odoo. Nous sommes spécialisés 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 sale.order.line.


Si vous avez besoin d'aide pour votre implémentation 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.

Le modèle sale.order.line : Comprendre l'architecture des lignes de commande de vente d'Odoo
Dasolo 10 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.