Skip to content

Integración con Odoo

Odoo es una suite de aplicaciones de gestión empresarial de código abierto (ERP - Enterprise Resource Planning). En lugar de tener un software para contabilidad, otro para ventas y un Excel para el inventario, Odoo unifica todo en una sola plataforma.

Características Principales

  • Todo en uno: Incluye CRM, Sitio Web, Comercio Electrónico, Facturación, Contabilidad, Fabricación, Almacén, Gestión de Proyecto, Inventario, entre otros.
  • Interfaz Web: Se usa a través del navegador, lo que lo hace accesible desde cualquier lugar.

Enfoque de Botinfy

En Botinfy, la inmensa mayoría de las veces no desarrollamos módulos de Odoo, sino que nos enfocamos más en la integración. Lo normal es que el cliente te entregue un entorno de pruebas de Odoo para que puedas integrarlo de forma correcta.

Dado que en Botinfy se enfocan en la integración (consumir la API de Odoo, usualmente vía XML-RPC o JSON-RPC) más que en el desarrollo interno, describiremos estos modelos desde la perspectiva de "datos y relaciones", que es lo vital para conectar sistemas externos con Odoo.

Es difícil describir todos los modelos de Odoo, así que solamente nos enfocaremos en los principales.

Modelos Principales

1. res.partner (Contactos / Terceros)

Este es el modelo base de Odoo. No existe una tabla separada para Clientes y otra para Proveedores; todos son res.partner.

Función: Almacena datos de clientes, proveedores, empleados y usuarios del sistema.

Lógica de Integración: Antes de crear una venta, necesitas obligatoriamente el id de un res.partner.

Campos clave para integración:

  • name (Char): Nombre del contacto o empresa.
  • is_company (Boolean): Crucial. Si es True, es una empresa. Si es False, es un individuo.
  • parent_id (Many2one): Si el contacto es un individuo que trabaja en una empresa, aquí va el ID de la empresa padre.
  • vat (Char): El NIF, RIF, Cédula o Tax ID. Es vital para evitar duplicados en integraciones.
  • property_payment_term_id (Many2one): Plazo de pago por defecto.

Tip para Botinfy: Al integrar, siempre busca primero por vat o email para no crear duplicados. Si existe, obtén su ID; si no, créalo (create) y obtén el ID devuelto.

2. sale.order (Encabezado del Pedido de Venta)

Este modelo representa la cabecera del presupuesto (cotización) o del pedido de venta confirmado.

Función: Agrupa la información general de la transacción: quién compra, cuándo, totales y estado.

Lógica de Integración: Es el "padre" de las líneas de productos.

Campos clave para integración:

  • name (Char): El número de secuencia (ej. S00012). Usualmente se genera automático, no se suele escribir.
  • partner_id (Many2one → res.partner): El ID del cliente. Campo obligatorio.
  • state (Selection): El estado del pedido.
    • draft: Presupuesto.
    • sent: Presupuesto enviado.
    • sale: Pedido de venta confirmado (aquí ya genera albaranes/entregas).
    • cancel: Cancelado.
  • date_order (Datetime): Fecha de confirmación o creación.
  • amount_total (Monetary): El total con impuestos (campo calculado, normalmente no se escribe, se lee).
  • order_line (One2many): La relación con las líneas de productos.

3. sale.order.line (Líneas del Pedido)

Es imposible integrar sale.order sin entender este modelo. Son los ítems individuales dentro del pedido.

Función: Detalla qué producto, qué cantidad y a qué precio se vende.

Lógica de Integración: Al crear un sale.order por API, normalmente pasas una lista de tuplas para crear estas líneas simultáneamente dentro del campo order_line del encabezado.

Campos clave para integración:

  • order_id (Many2one): El vínculo con el encabezado sale.order.
  • product_id (Many2one → product.product): El ID del producto a vender.
  • product_uom_qty (Float): La cantidad solicitada.
  • price_unit (Float): El precio unitario. Odoo puede calcularlo automático de la lista de precios, pero en integraciones a veces forzamos el precio externo.
  • tax_id (Many2many): Los impuestos aplicados a esta línea.

Resumen del Flujo de Integración Típico

Si Botinfy necesita inyectar una venta desde un sistema externo a Odoo, el flujo de datos estándar es:

  1. Buscar/Crear Partner (res.partner): ¿Existe el cliente? Obtengo su ID.
  2. Identificar Productos (product.product): Necesito los IDs internos de Odoo de los productos que se van a vender (usualmente mapeados por SKU/Referencia interna).
  3. Crear Pedido (sale.order):
    • Se envía un diccionario con el partner_id.
    • Dentro de ese diccionario, se pasa el campo order_line con una estructura especial (tuplas de comandos) para crear las líneas al mismo tiempo.
  4. Confirmar (Opcional): Si la integración requiere que entre como venta firme, se llama al método action_confirm sobre el ID de la orden creada.

Documentación de Botinfy