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 trabaja, desde pedidos de venta hasta proyectos y tareas, reside 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 los campos, relaciones y lógica empresarial de Odoo. Cada modelo en Odoo sigue los mismos patrones.
Este artículo se centra en uno de los modelos más importantes de Odoo: project.project. Ya sea que esté construyendo módulos personalizados, integrando sistemas externos o configurando flujos de trabajo de proyectos, trabajará con este modelo.
¿Qué es el modelo project.project?
El modelo project.project representa un proyecto en Odoo. Es el contenedor de tareas, hitos y colaboración en equipo. Cada proyecto es un registro en este modelo.
Este modelo en Odoo es utilizado por la aplicación Project. Cuando creas un proyecto en Odoo, creas un registro project.project. Las tareas están vinculadas a ese proyecto a través del campo task_ids. El proyecto define las etapas del flujo de trabajo, los miembros del equipo y las reglas de visibilidad.
El modelo está definido en el módulo de proyecto. Otros módulos lo extienden a través de la herencia de modelos de Odoo. La venta añade facturación basada en proyectos. La hoja de tiempo añade seguimiento de tiempo. La planificación de proyectos añade programación Gantt. Cada módulo añade lo que necesita sin duplicar la estructura central.
Entender la relación entre project.project y project.task es clave. El proyecto contiene configuraciones compartidas. La tarea contiene elementos de trabajo individuales. Ambos son centrales en el flujo de trabajo de gestión de proyectos de Odoo.
Campos clave en el modelo
Aquí están los campos más importantes de Odoo en el modelo project.project. Entender estos te ayudará a trabajar de manera efectiva con los proyectos.
1. nombre
Tipo: Char. Este campo almacena el nombre del proyecto. Se muestra en muchas vistas de Odoo y es el identificador principal para el registro del proyecto.
2. create_date
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. write_date
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. activo
Tipo: Booleano. Bandera de eliminación suave. Cuando es Falso, el proyecto está archivado y oculto de las vistas predeterminadas. Los registros no se eliminan físicamente.
5. secuencia
Tipo: Entero. Orden de visualización para la clasificación. Se utiliza en listas de proyectos y menús desplegables. Los valores más bajos aparecen primero.
6. color
Tipo: Entero. Índice de color para el proyecto. Se utiliza en vistas y tableros kanban para distinguir visualmente los proyectos.
7. user_id
Tipo: Many2one (res.users). El gerente del proyecto. Este usuario es responsable del proyecto y a menudo se muestra como el asignado predeterminado.
8. company_id
Tipo: Many2one (res.company). En configuraciones de múltiples empresas, esto indica a qué empresa de Odoo pertenece el proyecto.
9. partner_id
Tipo: Many2one (res.partner). El cliente o socio vinculado al proyecto. Se utiliza para la facturación y los informes.
10. descripción
Tipo: Html. Descripción del proyecto. Puede incluir HTML para formateo. Utilizado para resúmenes y notas del proyecto.
11. fecha_inicio
Tipo: Fecha. La fecha de inicio del proyecto. Utilizado para la planificación y la elaboración de informes.
12. fecha
Tipo: Fecha. La fecha límite o de finalización del proyecto. Utilizado para el seguimiento y la elaboración de informes.
13. ids_tarea
Tipo: Uno a muchos (project.task). La lista de tareas en el proyecto. Esta es la relación principal entre proyectos y tareas.
14. conteo_tareas
Tipo: Entero. Número de tareas. Computado a partir de ids_tarea. Utilizado para mostrar y filtrar.
15. ids_tipo
Tipo: Muchos a muchos (project.task.type). Etapas o tipos de tareas para el proyecto. Define el flujo de trabajo (por ejemplo, Por Hacer, En Progreso, Hecho).
16. ids_etiqueta
Tipo: Many2many (project.tags). Etiquetas del proyecto para la categorización. Se utiliza para filtrar y organizar proyectos.
17. privacidad_visibilidad
Tipo: Selección. Controla quién puede acceder al proyecto. Opciones: Usuarios internos invitados (privado), Todos los usuarios internos, o Usuarios del portal invitados y todos los usuarios internos (público).
18. colaborador_ids
Tipo: One2many (project.collaborator). Miembros del equipo asignados al proyecto. Define quién puede trabajar en el proyecto.
19. favorito_user_ids
Tipo: Many2many (res.users). Usuarios que marcaron el proyecto como favorito. Se utiliza para acceso rápido en el panel.
20. permitir_dependencias_tareas
Tipo: Booleano. Cuando es Verdadero, las tareas pueden estar vinculadas a otras tareas como predecesoras o sucesoras. Se utiliza para la planificación del proyecto.
21. permitir_hitos
Tipo: Booleano. Cuando es Verdadero, se pueden crear hitos en el proyecto. Los hitos marcan entregables clave.
22. hito_ids
Tipo: Uno a muchos (project.milestone). Los hitos en el proyecto. Se utiliza para rastrear entregables clave.
23. rating_active
Tipo: Booleano. Cuando es Verdadero, los clientes pueden calificar el proyecto. Se utiliza para la retroalimentación del cliente.
24. task_properties_definition
Tipo: Texto (JSON). Propiedades de tarea personalizadas para el proyecto. Define campos adicionales que se pueden agregar a las tareas.
25. access_url
Tipo: Char. La URL para que los clientes accedan al proyecto a través del portal. Se utiliza para la colaboración con los clientes.
26. access_token
Tipo: Char. Token de seguridad para el acceso al portal. Asegura que solo los usuarios autorizados puedan ver el proyecto.
27. alias_id
Tipo: Muchos a uno (mail.alias). Alias de correo electrónico para el proyecto. Los correos electrónicos entrantes crean tareas automáticamente.
28. activity_ids
Tipo: Uno a muchos (mail.activity). Actividades programadas en el proyecto. Utilizado para seguimientos y recordatorios.
29. estado_actividad
Tipo: Selección. Resumen del estado de la actividad: Hoy, Atrasado o Planificado. Computado a partir de activity_ids.
30. fecha_limite_actividad
Tipo: Fecha. La fecha de la próxima actividad programada. Utilizado para la planificación de actividades.
31. ids_mensajes
Tipo: Uno a muchos (mail.message). Mensajes en el chat del proyecto. Utilizado para la comunicación interna.
32. ids_seguidores_mensaje
Tipo: Uno a muchos (mail.followers). Usuarios que siguen el proyecto. Reciben notificaciones.
33. crear_uid
Tipo: Muchos a uno (res.users). El usuario que creó el registro. Establecido automáticamente por Odoo.
34. escribir_uid
Tipo: Many2one (res.users). El usuario que modificó por última vez el registro. Establecido automáticamente por Odoo.
Cómo se utiliza este modelo en los flujos de trabajo empresariales
1. Creación y Gestión de Proyectos
Cuando un vendedor o gerente de proyecto crea un proyecto, establece el nombre, el gerente, las fechas y la visibilidad. El modelo project.project almacena todo esto. Luego se añaden tareas y se vinculan al proyecto.
2. Flujo de Trabajo de Tareas
Las tareas avanzan a través de etapas definidas por type_ids. El gerente de proyecto asigna tareas a los colaboradores. El proyecto contiene la configuración del flujo de trabajo y la estructura del equipo.
3. Portal del Cliente
Cuando privacy_visibility permite el acceso al portal, los clientes pueden ver tareas y hitos a través del access_url. El access_token asegura el enlace. Esto es útil para proyectos con clientes.
4. Hoja de Tiempo y Facturación
Con el módulo de Hoja de Tiempo, project.project se vincula a las entradas de la hoja de tiempo. Con Venta, los proyectos pueden estar vinculados a órdenes de venta para la facturación basada en proyectos. El campo partner_id conecta el proyecto con el cliente.
5. Integración de Correo Electrónico
Los correos electrónicos entrantes al alias del proyecto crean tareas automáticamente. El campo alias_id conecta el proyecto con su alias de correo. Esto agiliza la creación de tareas a partir de correos electrónicos.
Cómo los desarrolladores extienden este modelo
Los desarrolladores extienden project.project utilizando varios patrones. La herencia de modelos de Odoo es el mecanismo principal.
Herencia de Modelos
Utiliza _inherit = 'project.project' para extender el modelo. Esto es la herencia de modelos de Odoo en acción. Añade nuevos campos de Odoo, sobrescribe métodos o añade restricciones. El modelo heredado en Odoo mantiene tus cambios en un módulo separado para facilitar las actualizaciones. Cuando heredas un modelo en Odoo, lo extiendes sin modificar el original.
Añadiendo Campos
Define nuevos campos de Odoo en tu modelo heredado. Utiliza el tipo de campo adecuado: 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. Bueno para personalizaciones rápidas. Para lógica compleja o actualizaciones, los módulos personalizados son más mantenibles.
Mejores prácticas
- Establece user_id para la asignación del gerente del proyecto. Una propiedad clara mejora la responsabilidad.
- Configura type_ids para cada proyecto. Define etapas que coincidan con tu flujo de trabajo.
- Utiliza privacy_visibility correctamente. Los proyectos privados restringen el acceso a seguidores y administradores.
- Al construir integraciones API, utiliza la API XML-RPC o JSON-RPC. El modelo project.project está completamente expuesto como un modelo API en Odoo. 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
- Creando tareas sin vincularlas a un proyecto. Cada tarea debe tener un project_id.
- Olvidando establecer type_ids. Los nuevos proyectos pueden no tener etapas, por lo que las tareas no pueden moverse a través del flujo de trabajo.
- Estableciendo privacy_visibility en público cuando debería ser privado. Esto puede exponer datos sensibles.
- Sobrescribiendo métodos centrales sin llamar a super(). Esto puede romper otros módulos o futuras actualizaciones.
- Añadiendo campos personalizados requeridos sin valores predeterminados. Los registros existentes fallarán en la validación durante la actualización.
Conclusión
El modelo project.project es central para la gestión de proyectos en Odoo. Almacena definiciones de proyectos, etapas de flujo de trabajo y estructura del equipo. Comprender sus campos y cómo los módulos lo extienden te ayudará a configurar, personalizar e integrar Odoo de manera efectiva.
Ya seas un consultor funcional configurando proyectos o un desarrollador construyendo módulos personalizados, un sólido conocimiento de project.project te 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 project.project.
Si necesitas ayuda con tu implementación de Odoo, módulos personalizados o integraciones, estamos aquí para ayudar. Reserva una demostración para discutir tu proyecto.