Objetivo:
Evaluar las capacidades técnicas de los candidatos en el desarrollo de módulos Odoo: modelado de datos, herencia, vistas, lógica de negocio, y buenas prácticas.
Cada ejercicio aumenta en dificultad, completa totalmente cada ejercicio antes de pasar al siguiente. Valoraremos más que la solución entregada esté correcta, limpia y mantenible a que estén todos los ejercicios hechos.
Añade comentarios donde estimes oportuno.
Duración estimada: 3 horas
Versión recomendada de Odoo: 16 o 17
Entorno: Repositorio GitHub, sube commits pequeños con un pequeño mensaje acerca de la subida (max. 1 línea), lee TODO el ejercicio antes de empezar hacerlo.
La empresa ficticia Ingeos Solutions necesita un módulo para gestionar proyectos internos y tareas de empleados.
Tu objetivo será desarrollar el módulo ingeos_projects, siguiendo los apartados que se detallan a continuación.
Requisitos:
- Crear el módulo
ingeos_projectscon la estructura estándar de Odoo. - Crear un modelo
ingeos.projectcon los siguientes campos:- Nombre- Obligatorio
- Descripción
- Responsable: -> res.partner
- Fecha inicio
- Fecha fin
- Crear un menú principal Ingeos / Proyectos / Proyectos con vistas tree y form para gestionar proyectos.
Requisitos:
- Crear un modelo
ingeos.taskcon los campos:- Nombre
- Proyecto (
ingeos.project) - Asignado (res.partner)
- Horas utilizadas (registrará la fracción de horas usadas)
- Estado (Valores posibles: borrador, en curso, hecho) - Activar el tracking para este campo
- Añadir un
One2manyen el modeloingeos.projectpara listar las tareas. - Heredar el modelo
res.partner:- Campo
is_ingeos_employee(Boolean) - Campo
employee_code(Char, solo editable si el empleado está marcado como tal) - Campo
default_project_id(many2one, a ingeos.project)
- Campo
- Personalizar la vista de
res.partnerpara mostrar los nuevos campos. - El campo Responsable del proyecto solo podrá elegir partners marcados con el boolean de
is_ingeos_employee
Requisitos:
- En
ingeos.project, crear un campototal_hours(Float, compute) que sume las horas de todas las tareas del proyecto. - En
ingeos.task, crear botones:- “Iniciar tarea” → cambia el estado a
in_progress - “Finalizar tarea” → cambia el estado a
done
- “Iniciar tarea” → cambia el estado a
- Agregar un método
@api.onchange('project_id')que:- Si
assigned_idestá vacío, lo autocomplete con elresponsible_iddel proyecto.
- Si
Requisitos:
- En la vista formulario de proyecto:
- Mostrar un smart button con el número total de tareas, al pulsarlo abrir el tree de tareas.
- Añadir un notebook con una pestaña “Tareas” que muestre un tree editable inline.
- Crear una vista kanban para
ingeos.taskque muestre el estado visualmente. - Añadir un punto de menú Ingeos / Proyectos / Tareas con la vistas kanban, tree y form de tareas.
Requisitos:
- Implementar una automatización:
- Si la fecha de finalización (
end_date) de un proyecto ya pasó, todas sus tareas deben marcarse comodone. - Puedes hacerlo mediante un
crono lógica enwrite().
- Si la fecha de finalización (
- Definir grupos y reglas de acceso:
- Solo el grupo Ingeos Manager puede eliminar proyectos.
- El grupo Ingeos User puede crear tareas, pero no proyectos.
- El grupo Ingeos User solo verá las tareas y los proyectos en los que esté asignado.
- Si has leído hasta aquí muy bien, NO añadas el campo del Ejercicio 2,
default_project_idal modelo res.partner. - Escribir tests unitarios usando
odoo.tests.common.TransactionCasepara validar:- Cálculo correcto de
total_hours - Cambio de estado de tareas mediante botones
- Cálculo correcto de