Introducción
En Odoo, los modelos definen cómo se estructura y almacena la información en la base de datos. Cada pieza de datos empresariales con la que trabajas, desde pedidos de venta hasta facturas y contactos, vive en un modelo.
Entender los modelos de Odoo es esencial tanto para desarrolladores como para consultores funcionales. Los modelos son la base de la arquitectura de datos de Odoo. Definen campos, relaciones y lógica empresarial.
Este artículo se centra en uno de los modelos más importantes en Odoo: res.partner. Ya sea que estés construyendo módulos personalizados, integrando sistemas externos o configurando flujos de trabajo, trabajarás con este modelo.
¿Qué es el modelo res.partner?
El modelo res.partner representa contactos, clientes, proveedores y empresas en Odoo. Es el lugar central donde se almacena toda la información de las partes.
Este modelo en Odoo se utiliza en casi todos los módulos. Ventas, CRM, facturación, compras y comercio electrónico hacen referencia a res.partner. Cuando creas un cliente en Ventas, un lead en CRM o un proveedor en Compras, estás creando o vinculando a un registro de res.partner.
El modelo está definido en el módulo base. Otros módulos lo extienden a través de la herencia de modelos de Odoo. CRM añade campos relacionados con leads. Contabilidad añade términos de crédito y pago. Cada módulo añade lo que necesita sin duplicar la estructura central.
Campos clave en el modelo
Aquí están los campos más importantes de Odoo en el modelo res.partner. Comprender estos te ayudará a trabajar de manera efectiva con contactos y socios.
1. nombre
Tipo: Char. Este campo almacena el nombre del registro. Para una empresa, es el nombre de la empresa. Para una persona, es el nombre completo. Se muestra en muchas vistas de Odoo y es el identificador principal del socio.
2. fecha_creación
Tipo: Datetime. Almacena la fecha y hora en que se creó el registro. Gestionado automáticamente por Odoo. Útil para informes y auditorías.
3. fecha_modificación
Tipo: Datetime. Almacena la fecha y hora de la última modificación. También gestionado automáticamente. Ayuda a rastrear cuándo se actualizó por última vez la información.
4. correo electrónico
Tipo: Char. La dirección de correo electrónico principal. Utilizada para comunicaciones, facturación y acceso al portal. Odoo valida el formato del correo electrónico cuando es posible.
5. teléfono
Tipo: Char. El número de teléfono principal. Se muestra en los formularios de contacto y se utiliza para flujos de comunicación.
6. móvil
Tipo: Char. Número de teléfono móvil. A menudo se utiliza para SMS o notificaciones urgentes cuando es diferente del teléfono principal.
7. calle
Tipo: Char. La primera línea de la dirección. Parte del bloque de dirección estándar utilizado en documentos y formularios.
8. calle2
Tipo: Char. La segunda línea de la dirección. Se utiliza para números de apartamento, nombres de edificios o detalles adicionales de la dirección.
9. ciudad
Tipo: Char. La ciudad o pueblo. El formato de la dirección puede variar según el país.
10. código postal
Tipo: Char. Código postal o ZIP. Se utiliza para la validación de direcciones y cálculos de envío.
11. state_id
Tipo: Many2one (res.country.state). El estado o provincia. El dominio está filtrado por país. No todos los países utilizan estados.
12. country_id
Tipo: Many2one (res.country). El país. Determina el formato de la dirección, las reglas fiscales y la localización.
13. is_company
Tipo: Booleano. Indica si el registro es una empresa o una persona. Las empresas pueden tener contactos secundarios. Las personas pueden estar vinculadas a una empresa a través de parent_id.
14. parent_id
Tipo: Many2one (res.partner). Para registros de contacto, esto se vincula a la empresa relacionada. Permite la jerarquía empresa-contacto. Cuando se establece, la dirección y otros campos pueden heredar del padre.
15. child_ids
Tipo: One2many (res.partner). El inverso de parent_id. Lista todos los contactos que pertenecen a una empresa. Se utiliza para navegar desde una empresa a sus contactos.
16. company_id
Tipo: Many2one (res.company). En configuraciones de múltiples empresas, esto indica a qué empresa de Odoo pertenece el socio. Afecta la visibilidad y el acceso a los registros.
17. vat
Tipo: Char. ID fiscal o número de IVA. Validado por el formato del país. Utilice una barra para indicar que el socio no está sujeto a impuestos. Importante para la facturación y el cumplimiento.
18. customer_rank
Tipo: Entero. Indica el estado del cliente. Odoo incrementa esto cuando el socio tiene ventas. Se utiliza para filtrar y priorizar clientes en listas e informes.
19. supplier_rank
Tipo: Entero. Indica el estado del proveedor. Se incrementa cuando el socio tiene órdenes de compra o facturas. Se utiliza para identificar proveedores.
20. user_id
Tipo: Many2one (res.users). El vendedor o usuario responsable. Se utiliza para CRM, equipos de ventas y asignación de actividades.
21. type
Tipo: Selección. Tipo de dirección para contactos secundarios: Contacto, Factura, Entrega u Otro. Determina qué dirección se utiliza en los documentos. Solo relevante para contactos bajo una empresa.
22. ref
Tipo: Char. Referencia interna o código. Útil para la asignación de sistemas externos y numeración personalizada.
23. sitio web
Tipo: Carácter. URL del sitio web. Utilizado en el formulario de contacto y en contextos de comercio electrónico.
24. comentario
Tipo: Html. Notas internas. Visibles para usuarios internos. A menudo se utilizan para notas de ventas o instrucciones especiales.
25. activo
Tipo: Booleano. Indicador de eliminación suave. Cuando es Falso, el registro se archiva y se oculta de las vistas predeterminadas. Los registros no se eliminan físicamente.
26. idioma
Tipo: Selección. Idioma preferido. Los correos electrónicos y documentos enviados a este socio pueden ser traducidos. Se hereda del padre cuando es aplicable.
27. imagen_1920
Tipo: Binario. Imagen o logo del socio. Odoo almacena múltiples tamaños. Utilizado en formularios, informes y el sitio web.
28. category_id
Tipo: Many2many (res.partner.category). Etiquetas o categorías. Utilizadas para segmentación, filtrado y marketing. Flexible para clasificación personalizada.
Cómo se utiliza este modelo en los flujos de trabajo empresariales
1. Ventas y CRM
Cuando un vendedor crea una cotización, selecciona un cliente de res.partner. El mismo registro de socio se utiliza para el lead, la oportunidad y el pedido. El rango del cliente y user_id impulsan los informes y la asignación.
2. Facturación
Las facturas y los recibos hacen referencia a un socio para la dirección de facturación. El campo vat se utiliza para cálculos de impuestos. El límite de crédito y los términos de pago a menudo se almacenan en el socio.
3. Compras y Proveedores
Los pedidos de compra y los recibos de proveedores se vinculan a res.partner. El rango de proveedor identifica a los vendedores activos. El campo buyer_id asigna un usuario responsable para la gestión de proveedores.
4. Comercio Electrónico y Portal
Los visitantes del sitio web pueden crear registros de socios al registrarse. Esos registros se utilizan para pedidos, cotizaciones y acceso al portal. La dirección y los detalles de contacto provienen del socio.
5. Multiempresa y Consolidación
En configuraciones de multiempresa, la misma entidad legal puede existir como diferentes registros de socios por empresa. El campo company_id y las reglas interempresariales determinan cómo se comparte la información.
Cómo los desarrolladores extienden este modelo
Los desarrolladores extienden res.partner utilizando varios patrones. La herencia de modelos de Odoo es el principal mecanismo.
Herencia de Modelos
Utiliza _inherit = 'res.partner' para extender el modelo. Añade nuevos campos, sobrescribe métodos o añade restricciones. El modelo heredado en Odoo mantiene tus cambios en un módulo separado para facilitar las actualizaciones.
Añadiendo Campos
Define nuevos campos de Odoo en tu modelo heredado. Utiliza el tipo de campo correcto: Char, Many2one, Boolean, Integer, Text, Selection. Considera campos dependientes de la empresa para multiempresa.
Extensiones de Python
Sobrescribe create, write o unlink para añadir lógica. Utiliza super() para llamar al original. Ten cuidado con los campos computados y sus dependencias.
Odoo Studio
Odoo Studio te permite añadir campos sin código. Es bueno para personalizaciones rápidas. Para lógica compleja o actualizaciones, los módulos personalizados son más mantenibles.
Mejores prácticas
- Utiliza correctamente la jerarquía de empresa-contacto. Crea primero la empresa, luego añade contactos con parent_id.
- Establece country_id para un formato de dirección adecuado y manejo de impuestos.
- Utiliza commercial_partner_id cuando necesites la entidad de nivel superior para agrupaciones (por ejemplo, para crédito o informes).
- Al construir integraciones API, utiliza la API XML-RPC o JSON-RPC. El modelo res.partner está completamente expuesto. Mapea los IDs externos con cuidado.
- Para campos personalizados, utiliza el prefijo
x_o un prefijo de módulo para evitar conflictos con futuras versiones de Odoo.
Errores comunes
- Crear socios duplicados en lugar de buscar los existentes. Utilice
email_normalizedorefpara la deduplicación. - Confundir parent_id y company_id. parent_id es para el enlace contacto-empresa. company_id es para Odoo de múltiples empresas.
- Olvidar establecer el tipo en los contactos secundarios. Las direcciones de facturación y entrega necesitan el tipo correcto para los documentos.
- Sobrescribir métodos centrales sin llamar a super(). Esto puede romper otros módulos o futuras actualizaciones.
- Agregar campos personalizados requeridos sin valores predeterminados. Los registros existentes fallarán en la validación durante la actualización.
Conclusión
El modelo res.partner es central en Odoo. Almacena contactos, clientes y proveedores. Comprender sus campos y cómo los módulos lo extienden le ayudará a configurar, personalizar e integrar Odoo de manera efectiva.
Ya sea que sea un consultor funcional mapeando procesos de negocio o un desarrollador construyendo módulos personalizados, un sólido conocimiento de res.partner le ahorrará tiempo y evitará errores.
¿Necesita ayuda con su implementación de Odoo?
Dasolo ayuda a las empresas a implementar, personalizar y optimizar Odoo. Nos especializamos en integraciones de API y desarrollo de Odoo. Nuestro equipo tiene una profunda experiencia con la arquitectura de datos de Odoo y modelos como res.partner.
Si necesita ayuda con su implementación de Odoo, módulos personalizados o integraciones, estamos aquí para ayudar. Reserve una demostración para discutir su proyecto.