Pular para o conteúdo

O Modelo Sale.order.line: Compreendendo a Arquitetura de Pedidos de Venda do Odoo

Um guia completo sobre o modelo de linha de pedido de venda do Odoo para desenvolvedores e consultores funcionais
10 de março de 2026 por
O Modelo Sale.order.line: Compreendendo a Arquitetura de Pedidos de Venda do Odoo
Dasolo
| Nenhum comentário ainda

Introdução


No Odoo, os modelos definem como os dados são estruturados e armazenados na base de dados. Cada pedaço de dados empresariais com o qual você trabalha, desde pedidos de venda a faturas e contactos, vive num modelo.


Compreender os modelos do Odoo é essencial tanto para desenvolvedores quanto para consultores funcionais. Os modelos são a base da arquitetura de dados do Odoo. Eles definem campos, relacionamentos e lógica de negócios.


Este artigo foca em um dos modelos mais importantes do módulo de Vendas: sale.order.line. Quer você esteja construindo módulos personalizados, integrando sistemas externos ou configurando fluxos de trabalho de preços, você trabalhará com este modelo.

O que é o modelo sale.order.line


O modelo sale.order.line representa itens individuais em uma cotação ou pedido de venda no Odoo. Cada linha normalmente corresponde a um produto, com informações de quantidade, preço e imposto.


Este modelo no Odoo é utilizado pelo módulo de Vendas (sale). Ele herda de analytic.mixin para rastreamento de custos de projeto e integração de folha de ponto. Quando você adiciona um produto a uma cotação, está criando um registro sale.order.line.


O modelo é definido no módulo de venda. Outros módulos o estendem através da herança de modelo do Odoo. Por exemplo, sale_stock adiciona campos relacionados à entrega. sale_margin adiciona cálculos de margem. Cada módulo adiciona o que precisa sem duplicar a estrutura central.

Campos Chave no Modelo


Aqui estão os campos mais importantes do Odoo no modelo sale.order.line. Compreender estes ajudará você a trabalhar de forma eficaz com cotações e pedidos de venda.


1. order_id

Tipo: Many2one (sale.order). Obrigatório. Referência ao pedido de venda pai. Este campo vincula cada linha ao seu pai. As linhas são excluídas quando o pedido é excluído (cascata).


2. sequence

Tipo: Inteiro. Padrão 10. Controla a ordem de exibição das linhas no pedido. Usado para classificar seções, notas e linhas de produtos.


3. company_id

Tipo: Many2one (res.company). Relacionado a partir de order_id. Usado para regras de múltiplas empresas e controle de acesso.


4. currency_id

Tipo: Many2one (res.currency). Relacionado a partir de order_id. Usado para todos os campos monetários na linha. Garante a moeda correta para precificação.


5. order_partner_id

Tipo: Many2one (res.partner). Relacionado a partir de order_id. O cliente. Usado para lista de preços e regras fiscais.


6. salesman_id

Tipo: Many2one (res.users). Relacionado a partir de order_id. O vendedor. Usado para comissão e relatórios.


7. state

Tipo: Seleção. Relacionado a partir de order_id. Status do pedido (rascunho, enviado, venda, concluído, cancelado). Determina quais campos são editáveis.


8. display_type

Tipo: Seleção. Valores: line_section ou line_note. Quando definido, a linha é um cabeçalho de seção ou uma nota, não uma linha de produto. Os campos do produto estão vazios.


9. is_downpayment

Tipo: Booleano. Indica se a linha é um pagamento antecipado. Pagamentos antecipados são faturados separadamente.


10. is_expense

Tipo: Booleano. Verdadeiro quando a linha vem de uma despesa ou fatura de fornecedor. Usado para rastreamento de custos de projeto.


11. product_id

Tipo: Many2one (product.product). O produto que está a ser vendido. O domínio restringe-se a produtos vendáveis. Necessário para linhas de produtos.


12. product_template_id

Tipo: Many2one (product.template). Computado a partir de product_id. Usado pelo configurador de produtos para seleção de variantes.


13. name

Tipo: Texto. A descrição da linha. Computada a partir do produto e atributos personalizados. Inclui detalhes da variante quando aplicável.


14. product_uom_qty

Tipo: Float. Necessário. A quantidade encomendada. Padrão 1.0. Pode ser influenciada pela embalagem.


15. product_uom

Tipo: Many2one (uom.uom). Unidade de medida. Padrão do produto. Usado para quantidade e preços.


16. tax_id

Tipo: Many2many (account.tax). Impostos aplicados à linha. Computado a partir do produto e da posição fiscal.


17. price_unit

Tipo: Float. Obrigatório. Preço unitário por product_uom. Calculado a partir da lista de preços ou do produto. Pode ser substituído manualmente.


18. discount

Tipo: Float. Percentagem de desconto. Aplicada ao price_unit antes do imposto.


19. price_subtotal

Tipo: Monetário. Subtotal antes do imposto. Calculado a partir da quantidade, preço unitário e desconto.


20. price_tax

Tipo: Float. Montante total do imposto. Calculado a partir do price_subtotal e tax_id.


21. price_total

Tipo: Monetário. Total incluindo imposto. O montante principal para faturamento.


22. product_packaging_id

Tipo: Many2one (product.packaging). Embalagem opcional (por exemplo, caixa de 12). Quando definido, a quantidade pode ser determinada pela embalagem.


23. customer_lead

Tipo: Float. Tempo de entrega em dias. Dias entre a confirmação do pedido e o envio. Usado para o cálculo da data de entrega.


24. qty_delivered

Tipo: Float. Quantidade entregue. Atualizada por movimentos de stock ou manualmente. Usado para faturação parcial.


25. qty_invoiced

Tipo: Float. Quantidade já faturada. Calculada a partir das linhas de fatura.


26. qty_to_invoice

Tipo: Float. Quantidade restante a faturar. Calculada a partir de qty_delivered e qty_invoiced.


27. invoice_status

Tipo: Seleção. Valores: upselling, faturado, a faturar, não. Indica o estado de faturação da linha.


28. invoice_lines

Tipo: Many2many (account.move.line). Liga às linhas de fatura criadas a partir desta linha de venda. Usado para rastreabilidade.


29. create_date

Tipo: Data e Hora. Quando o registo foi criado. Gerido automaticamente pelo Odoo.


30. write_date

Tipo: Data e Hora. Quando o registo foi modificado pela última vez. Usado para auditoria.

Como Este Modelo É Usado em Fluxos de Trabalho Empresariais


1. Cotação e Ordem de Venda

Quando um vendedor cria uma cotação, ele adiciona produtos. Cada produto torna-se uma sale.order.line. As linhas mostram quantidade, preço, desconto e total. A ordem é confirmada quando o cliente aceita.


2. Lista de Preços e Descontos

As listas de preços são aplicadas por linha. Os campos price_unit e discount são calculados a partir das regras da lista de preços. Descontos por volume ou preços específicos para clientes são tratados aqui.


3. Entrega e Faturação

Quando o stock é entregue, qty_delivered é atualizado. A faturação pode ser feita por entrega ou de uma só vez. O campo invoice_status orienta o utilizador sobre o que ainda falta faturar.


4. Projeto e Serviços

Para produtos de serviço, as linhas ligam-se a tarefas de projeto e folhas de horas. A herança analytic.mixin permite o rastreamento de custos por projeto.


5. Comércio Eletrônico e Portal

Os visitantes do site adicionam produtos ao carrinho. Cada linha do carrinho torna-se uma sale.order.line quando o pedido é criado. O configurador de produtos utiliza product_template_id e atributos personalizados.

Como os Desenvolvedores Estendem Este Modelo


Os desenvolvedores estendem a sale.order.line usando vários padrões. A herança de modelo do Odoo é o principal mecanismo.


Herança de Modelo

Use _inherit = 'sale.order.line' para estender o modelo. Adicione novos campos, sobrescreva métodos ou adicione restrições. O modelo herdado no Odoo mantém suas alterações em um módulo separado para atualizações fáceis.


Adicionando Campos

Defina novos campos Odoo em seu modelo herdado. Use o tipo de campo correto: Char, Many2one, Boolean, Integer, Text, Selection. Considere campos dependentes da empresa para multi-empresa.


Extensões Python

Sobrescreva _compute_price_unit, _compute_price_subtotal, ou crie/escreva para adicionar lógica. Use super() para chamar o original. Tenha cuidado com campos computados e suas dependências.


Odoo Studio

O Odoo Studio permite que você adicione campos sem código. Bom para personalizações rápidas. Para lógica complexa ou atualizações, módulos personalizados são mais fáceis de manter.

Melhores Práticas


  • Use display_type para seções e notas em vez de linhas de produtos falsas. Isso mantém os relatórios limpos.
  • Ao construir integrações de API, crie linhas através do order_id. Utilize o campo order_line_ids em sale.order com o formato de comando correto.
  • Respeite as restrições SQL. Uma linha de produto deve ter product_id e product_uom. Uma seção ou nota deve ter display_type.
  • Para preços personalizados, utilize regras de lista de preços sempre que possível. Substitua métodos de cálculo apenas quando precisar de lógica não suportada por listas de preços.
  • Para campos personalizados, use o prefixo x_ ou um prefixo de módulo para evitar conflitos com versões futuras do Odoo.

Erros Comuns


  • Criando linhas sem order_id. O campo é obrigatório. Sempre crie linhas no contexto de um pedido.
  • Confundindo product_id e product_template_id. Para linhas de produto, defina product_id. Para fluxos de configurador, use product_template_id para selecionar uma variante.
  • Modificando price_unit ou desconto após a faturação. Uma vez que qty_invoiced é maior que zero, alterações de preço podem causar inconsistências.
  • Substituindo métodos principais sem chamar super(). Isso pode quebrar outros módulos ou futuras atualizações.
  • Esquecendo de definir display_type para linhas de seção ou nota. Sem isso, a linha é tratada como uma linha de produto e falhará na validação.

Conclusão


O modelo sale.order.line é central para Odoo Sales. Ele armazena cada linha de produto em cotações e pedidos. Compreender seus campos e como os módulos o estendem ajudará você a configurar, personalizar e integrar o Odoo de forma eficaz.


Seja você um consultor funcional mapeando processos de negócios ou um desenvolvedor construindo módulos personalizados, um sólido entendimento de sale.order.line economizará tempo e evitará erros.

Precisa de Ajuda com a Sua Implementação do Odoo?


A Dasolo ajuda empresas a implementar, personalizar e otimizar o Odoo. Nós nos especializamos em integrações de API e desenvolvimento Odoo. Nossa equipe tem ampla experiência com a arquitetura de dados do Odoo e modelos como sale.order.line.


Se precisar de ajuda com a sua implementação do Odoo, módulos personalizados ou integrações, estamos aqui para ajudar. Agende uma demonstração para discutir o seu projeto.

O Modelo Sale.order.line: Compreendendo a Arquitetura de Pedidos de Venda do Odoo
Dasolo 10 de março de 2026
Compartilhar esta publicação
Iniciar sessão para deixar um comentário