🎯 Cómo forzar al usuario a completar el "Motivo de pérdida" al marcar una tarea como Perdida en Odoo
En muchas implementaciones de Odoo, especialmente en flujos de ventas o postventa, hay etapas donde es crucial que el usuario indique por qué una oportunidad o tarea fue perdida. Sin embargo, Odoo no obliga a llenar este campo, lo que puede dejar datos incompletos.
En este artículo te mostraré cómo puedes hacer que, al mover una tarea a la etapa "Perdido", se abra automáticamente una ventana emergente que solicite completar el campo Motivo de pérdida. Esto lo logramos sin desarrollar módulos, solo usando:
- Odoo Studio
- Una vista personalizada
- Una acción de servidor
- Un botón para controlar el flujo
🧩 El problema
Tu equipo está marcando tareas como "Perdidas" pero no completan el campo Motivo de pérdida. Alguien se olvida, otro lo deja para después... y al final los reportes están vacíos.
Queremos que al pasar la tarea a "Perdido", Odoo abra una ventana que obligue a completar el campo antes de continuar.
🔧 Paso 1: Crea la vista personalizada con el campo requerido
- Activa el modo desarrollador
- Ve a Ajustes > Técnicos > Vistas
- Crea una nueva vista del tipo
form
- Asocia la vista al modelo
project.task
- Pega el siguiente contenido XML:
<form string="Motivo de pérdida">
<sheet>
<group>
<field name="x_studio_motivo_perdida"/>
</group>
</sheet>
</form>
💡 Guarda y anota el ID interno de la vista (por ejemplo, 2230).
🖱️ Paso 2: Crea un botón con Odoo Studio
- Abre el formulario de la tarea
- Activa Odoo Studio
- Agrega un botón nuevo (por ejemplo: “Marcar como Perdido”)
- Asócialo a una acción de servidor que crearemos a continuación
⚙️ Paso 3: Crea la acción de servidor que abre el modal
Desde Ajustes > Técnicos > Acciones > Acciones de servidor, crea una nueva acción sobre el modelo project.task
con el siguiente código:
if not record.x_studio_motivo_perdida:
action = {
'type': 'ir.actions.act_window',
'name': 'Completa el Motivo de Pérdida',
'res_model': 'project.task',
'res_id': record.id,
'view_mode': 'form',
'views': [(2230, 'form')],
'target': 'new',
'context': {
'force_edit': True
}
}
record.write({
'stage_id': env.ref('nombre_del_xml_id_de_etapa_perdido').id,
'state': '1_done'
})
✔️ Reemplaza nombre_del_xml_id_de_etapa_perdido
por el External ID real de la etapa "Perdido".
🛑 ¡Cuidado!
- Si usas tareas recurrentes, asegúrate de que el campo Motivo de pérdida tenga
copy=False
para que no se herede - Este flujo debe usarse mediante botón, no directamente cambiando de etapa desde el kanban
✅ Resultado
Ahora, cuando el usuario haga clic en el botón “Marcar como Perdido”, Odoo validará si el campo está vacío. Si es así, abrirá la ventana emergente con tu formulario personalizado. Una vez completado, la tarea se actualizará a la etapa "Perdido" y al estado 1_done
.
💡 Conclusión
Este tipo de microinteracciones elevan la calidad del flujo comercial en Odoo. Obligar al usuario a completar datos clave, sin interrumpir demasiado el proceso, es posible gracias al uso conjunto de vistas personalizadas, acciones de servidor y Odoo Studio.
🔗 ¿Quieres ver cómo se construye este tipo de ventana emergente desde cero?
Lee nuestro artículo: “Cómo abrir un formulario personalizado en ventana modal en Odoo” para aprender el patrón general reutilizable.
Cómo forzar al usuario a completar el "Motivo de pérdida" al marcar una tarea como Perdida en Odoo