workspace-v1/shared/knowledge-base/reference/odoo/docs/03-modelado-datos/MODELO-sale.md
rckrdmrd cb4c0681d3 feat(workspace): Add new projects and update architecture
New projects created:
- michangarrito (marketplace mobile)
- template-saas (SaaS template)
- clinica-dental (dental ERP)
- clinica-veterinaria (veterinary ERP)

Architecture updates:
- Move catalog from core/ to shared/
- Add MCP servers structure and templates
- Add git management scripts
- Update SUBREPOSITORIOS.md with 15 new repos
- Update .gitignore for new projects

Repository infrastructure:
- 4 main repositories
- 11 subrepositorios
- Gitea remotes configured

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 04:43:28 -06:00

10 KiB

Modelo de Datos: Sale

Modulo: sale Total Modelos: 15+ Modelos Documentados: 2 (principales)


1. Indice de Modelos Principales

Modelo Descripcion Campos Archivo
sale.order Orden de venta 60+ sale_order.py
sale.order.line Linea de orden 40+ sale_order_line.py

2. Detalle por Modelo

2.1 sale.order (Orden de Venta)

Archivo: models/sale_order.py Descripcion: Sales Order Hereda de: portal.mixin, product.catalog.mixin, mail.thread, mail.activity.mixin, utm.mixin

Estado (state)

Estado Nombre UI Descripcion
draft Quotation Cotizacion
sent Quotation Sent Enviada
sale Sales Order Confirmada
cancel Cancelled Cancelada

Campos Principales

Campo Tipo Req Descripcion
name Char Si Referencia de orden
state Selection Si Estado
locked Boolean No Orden bloqueada
client_order_ref Char No Referencia del cliente
create_date Datetime No Fecha creacion
date_order Datetime Si Fecha de orden
commitment_date Datetime No Fecha entrega prometida
origin Char No Documento origen
reference Char No Referencia de pago

Campos de Partner

Campo Tipo Req Descripcion
partner_id Many2one Si Cliente
partner_invoice_id Many2one Si Direccion facturacion
partner_shipping_id Many2one Si Direccion envio

Campos de Firma/Pago Online

Campo Tipo Descripcion
require_signature Boolean Requiere firma
require_payment Boolean Requiere pago
prepayment_percent Float Porcentaje anticipo
signature Image Firma digital
signed_by Char Nombre firmante
signed_on Datetime Fecha firma

Campos de Configuracion

Campo Tipo Descripcion
validity_date Date Fecha expiracion cotizacion
journal_id Many2one Diario facturacion
fiscal_position_id Many2one Posicion fiscal
payment_term_id Many2one Terminos de pago
pricelist_id Many2one Lista de precios
currency_id Many2one Moneda
user_id Many2one Vendedor
team_id Many2one Equipo de ventas
company_id Many2one Empresa

Campos Monetarios

Campo Tipo Descripcion
amount_untaxed Monetary Subtotal (computed)
amount_tax Monetary Impuestos (computed)
amount_total Monetary Total (computed)
amount_to_invoice Monetary Pendiente facturar
amount_invoiced Monetary Ya facturado

Campos de Facturacion

Campo Tipo Descripcion
invoice_ids Many2many Facturas vinculadas
invoice_count Integer Cantidad facturas
invoice_status Selection Estado facturacion

Campos de Pago

Campo Tipo Descripcion
transaction_ids Many2many Transacciones
authorized_transaction_ids Many2many Autorizadas
amount_paid Float Monto pagado

Campos de Lineas

Campo Tipo Descripcion
order_line One2many Lineas de orden
note Html Terminos y condiciones
tag_ids Many2many Etiquetas

2.2 sale.order.line (Linea de Orden)

Archivo: models/sale_order_line.py Descripcion: Sales Order Line

Campos Principales

Campo Tipo Req Descripcion
order_id Many2one Si Orden padre
sequence Integer No Secuencia
company_id Many2one No Empresa (related)
name Text Si Descripcion
display_type Selection No Tipo display (section/note/line_note)
state Selection No Estado (related)

Campos de Producto

Campo Tipo Descripcion
product_id Many2one Producto
product_template_id Many2one Plantilla producto
product_uom Many2one Unidad de medida
product_uom_qty Float Cantidad ordenada
product_custom_attribute_value_ids One2many Valores atributos custom

Campos de Cantidad

Campo Tipo Descripcion
product_uom_qty Float Cantidad ordenada
qty_delivered Float Cantidad entregada
qty_delivered_method Selection Metodo calculo entrega
qty_invoiced Float Cantidad facturada
qty_to_invoice Float Pendiente facturar
untaxed_amount_invoiced Float Importe facturado sin imp
untaxed_amount_to_invoice Float Importe pendiente sin imp

Campos de Precio

Campo Tipo Descripcion
price_unit Float Precio unitario
discount Float Descuento %
price_subtotal Monetary Subtotal (computed)
price_tax Float Impuestos
price_total Monetary Total con impuestos
price_reduce Float Precio con descuento
price_reduce_taxinc Float Precio con desc+imp
price_reduce_taxexcl Float Precio con desc sin imp

Campos de Impuestos

Campo Tipo Descripcion
tax_id Many2many Impuestos aplicables

Campos de Facturacion

Campo Tipo Descripcion
invoice_lines Many2many Lineas de factura
invoice_status Selection Estado facturacion (computed)
is_downpayment Boolean Es anticipo

Campos de Vendedor

Campo Tipo Descripcion
salesman_id Many2one Vendedor (related)

3. Diagrama Entidad-Relacion

┌───────────────────────┐      order_line      ┌───────────────────────┐
│     sale.order        │──────────────────────►│   sale.order.line     │
│                       │                       │                       │
│  - name               │      order_id        │  - product_id         │
│  - state              │◄──────────────────────│  - product_uom_qty    │
│  - partner_id         │                       │  - price_unit         │
│  - date_order         │                       │  - qty_delivered      │
│  - amount_total       │                       │  - qty_invoiced       │
└───────────┬───────────┘                       └───────────┬───────────┘
            │                                               │
            │ partner_id                                    │ invoice_lines
            ▼                                               ▼
┌───────────────────────┐                       ┌───────────────────────┐
│     res.partner       │                       │  account.move.line    │
│                       │                       │                       │
│  (Cliente)            │                       │  (Linea factura)      │
└───────────────────────┘                       └───────────────────────┘

┌───────────────────────┐      invoice_ids     ┌───────────────────────┐
│     sale.order        │──────────────────────►│    account.move       │
│                       │                       │                       │
│  - invoice_status     │                       │  (Factura cliente)    │
│  - invoice_count      │                       │  type = 'out_invoice' │
└───────────────────────┘                       └───────────────────────┘

┌───────────────────────┐    transaction_ids   ┌───────────────────────┐
│     sale.order        │──────────────────────►│ payment.transaction   │
│                       │                       │                       │
│  - amount_paid        │                       │  (Transaccion pago)   │
│  - require_payment    │                       │                       │
└───────────────────────┘                       └───────────────────────┘

4. Constantes del Modulo

# Estados de facturacion
INVOICE_STATUS = [
    ('upselling', 'Upselling Opportunity'),
    ('invoiced', 'Fully Invoiced'),
    ('to invoice', 'To Invoice'),
    ('no', 'Nothing to Invoice')
]

# Estados de orden
SALE_ORDER_STATE = [
    ('draft', "Quotation"),
    ('sent', "Quotation Sent"),
    ('sale', "Sales Order"),
    ('cancel', "Cancelled"),
]

6. Constraints (Restricciones)

Modelo Campos Validacion Mensaje
sale.order company_id, order_line Productos deben pertenecer a la misma empresa Product belongs to different company
sale.order prepayment_percent Porcentaje entre 0 y 100% si require_payment Prepayment percentage must be valid
sale.order.line combo_item_id No debe setearse manualmente Combo item cannot be set manually
product.template company_id No restringir a empresa si fue vendido en otra Product sold in other company

Referencias:

  • Carpeta models: addons/sale/models/
  • Constantes: addons/sale/const.py