El módulo añade banners configurables para las vistas de formulario del backend. Define reglas por modelo (y opcionalmente por vista) para mostrar alertas contextuales con una severidad elegida (info/warning/danger).
Los mensajes pueden ser texto plano con \${placeholders} o HTML totalmente personalizado; la visibilidad, la severidad y los valores se calculan en el servidor mediante una expresión Python segura.
Los banners se inyectan justo antes o después de un nodo destino (por defecto: //sheet) y se actualizan al cargar, guardar o recargar el formulario.
Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.
auto_awesome Qué hace este módulo
Generado por IA a partir del código · Odoo 19.0Permite a los administradores definir reglas que muestran banners de alerta configurables (info, warning o danger) en las vistas de formulario del backend, con mensajes calculados a partir de los datos del registro y actualizados en vivo mientras el usuario edita.
Este módulo añade una nueva pantalla de configuración, "Form Banner Rules", donde un administrador crea reglas que colocan banners de alerta de colores dentro de las vistas de formulario estándar de Odoo.
Para cada regla se elige el modelo de destino, opcionalmente vistas de formulario específicas, dónde se inserta el banner (por defecto justo antes del área principal del formulario, o después de ella), y la severidad por defecto: info, warning o danger.
- El mensaje puede ser texto plano con ${placeholders} o HTML sin procesar.
- Una pequeña expresión de Python, evaluada en el servidor, decide si el banner es visible, su severidad, los valores de los placeholders y/o el HTML final. Puede usar el registro actual, el usuario actual, el entorno, ayudantes de fecha, ayudantes de redondeo y un ayudante que construye un enlace al formulario de un registro.
- Los "Trigger Fields" opcionales hacen que el banner se recalcule en vivo mientras el usuario edita esos campos, incluso en registros nuevos sin guardar.
- Los banners se actualizan cuando se abre, guarda, descarta o duplica un formulario, o cuando el usuario pasa a otro registro.
Las reglas están ordenadas y se pueden archivar. La lista de reglas se puede buscar y agrupar por modelo o severidad. Solo los administradores del sistema pueden crear o modificar reglas; los demás usuarios internos, usuarios del portal y usuarios públicos solo pueden leerlas. El módulo afecta a la carga genérica de la vista de formulario para todos los modelos y al modelo web.form.banner.rule.
Depende de
Menús que añade
Modelos y campos (2)
- base · amplía un modelo existente
- web.form.banner.rule · modelo nuevoname, active, message, model_id, position, sequence, severity (Default Severity), view_ids (Views), model_name (Model Name), target_xpath (Target XPath), message_is_html (HTML), trigger_field_ids (Trigger Fields), message_value_code
Texto generado por IA (DeepSeek) al leer el código de la versión 19.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub
Disponibilidad por versión
Revisado: 2026-11-03Estado de confirmación: 3 confirmadas, 6 sin información de 9 versiones.
Fuentes · Odoo 16.0
Confirmado el 2026-11-03 en la rama 16.0 de OCA/web.
terminal Instalación y uso
Documentación de OCA · Odoo 19.0- Vaya a Ajustes \> Técnico \> Interfaz de usuario \> Form Banner Rules y cree una regla.
- Elija Model, seleccione Trigger Fields (opcional), establezca Default Severity, seleccione Views (opcional), actualice Target XPath (punto de inserción) y Position, y configure el mensaje.
- Guarde. Abra cualquier registro de formulario que coincida: el banner aparecerá y se actualizará automáticamente tras cargar/guardar/recargar.
Uso de los campos de mensaje:
- Message (message): Texto mostrado en el banner. Admite \${placeholders} rellenados con los valores devueltos por message_value_code. Se ignora si message_value_code devuelve un valor html.
- HTML (message_is_html): Si está habilitado, la cadena del mensaje se renderiza como HTML; de lo contrario, se trata como texto plano.
- Message Value Code (message_value_code): Expresión Python segura evaluada por registro. Devuelva un dict como {"visible": True, "severity": "warning", "values": {"name": record.name}}. Use message o html (desde este código), no ambos. Hay varias variables de contexto de evaluación disponibles.
Variables de contexto de evaluación disponibles en Message Value Code:
env: Entorno de Odoo para acceso ORM.user: Usuario actual (env.user).ctx: Copia del contexto actual (dict(env.context)).record: Registro actual (el registro del formulario).draft: Los valores de campo persistidos del registro ORM (antes de aplicar los cambios sin guardar del formulario actual) + los cambios sin guardar actuales en los campos trigger. Debe usarse en lugar de record cuando su regla se active dinámicamente por una actualización de un campo trigger. No incluye ningún valor de campos complejos (one2many/reference, etc).record_id: Id entero del registro que se está editando, o False si el formulario está creando un registro nuevo.model: Atajo al modelo actual (env[record._name]).url_for(obj): Helper that returns a backend form URL forobj.context_today(ts=None): "Hoy" en la zona horaria del usuario (date) para comparaciones de fechas fiables.- time,
datetime: Módulos estándar de Python time/datetime. dateutil: { "parser": dateutil.parser, "relativedelta": dateutil.relativedelta }timezone: pytz.timezone para el manejo de zonas horarias.- float_compare, float_is_zero,
float_round: Utilidades float de Odoo para comparaciones/redondeos con precisión segura.
Todo lo anterior es inyectado por el módulo en los locals de safe_eval.
Trigger Fields
Trigger Fields es una lista opcional de campos del modelo que, cuando se modifican en el formulario abierto, provocan que el banner se recalcule en vivo. Si se deja vacía, el banner no se actualiza automáticamente mientras el usuario edita el formulario.
Cuando se dispara un trigger, el módulo envía los valores borrador actuales al servidor, los sanea, construye un registro de evaluación y vuelve a ejecutar su message_value_code.
Debe usar draft en lugar de record para acceder a los valores actuales del formulario si su regla se activa en función de una actualización de un campo trigger.
Ejemplos de configuración de mensajes:
A) Falta el email en el contacto (warning)
- Model: res.partner
- Message: This contact has no email.
- Message Value Code:
{"visible": not bool(record.email)}B) Mostrar el comentario del partner si está disponible
- Model: purchase.order
- Message: Vendor Comments: \${comment}
- Message Value Code (expresión única):
{
"visible": bool(record.partner_id.comment),
"values": {"comment": record.partner_id.comment},
}También es posible usar "convenience placeholders" sin una clave values explícita:
{
"visible": bool(record.partner_id.comment),
"comment": record.partner_id.comment,
}C) Pedido de venta de alto valor (severidad dinámica)
- Model: sale.order
- Message: High-value order: \${amount_total}
- Message Value Code:
{
"visible": record.amount_total >= 30000,
"severity": "danger" if record.amount_total >= 100000 else "warning",
"values": {"amount_total": record.amount_total},
}D) Presupuesto con fecha de validez superada
- Model: sale.order
- Message: This quotation is past its validity date (\${validity_date}).
- Message Value Code:
{
"visible": bool(record.validity_date and context_today() > record.validity_date and record.state in ["draft", "sent"]),
"values": {"validity_date": record.validity_date},
}E) Actividades pendientes en una tarea (usa env)
- Model: project.task
- Message: There are \${cnt} pending activities.
- Message Value Code (multilínea con resultado):
cnt = env["mail.activity"].search_count([("res_model","=",record._name),("res_id","=",record.id)])
result = {"visible": cnt > 0, "values": {"cnt": cnt}}F) Al producto le falta la referencia interna (usa trigger fields)
- Model: product.template
- Trigger Fields: default_code
- Message: Make sure to set an internal reference!
- Message Value Code:
{"visible": not bool(draft.default_code)}G) Banner HTML con enlace al último pedido de venta del cliente (usa trigger fields)
- Model: sale.order
- Trigger Fields: partner_id
- Message: (dejar en blanco; html proporcionado por Message Value Code)
- Message Value Code (multilínea con resultado):
domain = [("partner_id", "=", draft.partner_id.id)]
if record_id:
domain += [("id", "<", record_id)]
last = model.search(domain, order="date_order desc, id desc", limit=1)
if last:
html = "<strong>Previous order:</strong> <a href='%s'>%s</a>" % (url_for(last), last.name)
result = {"visible": True, "html": html}
else:
result = {"visible": False}Si configuramos las reglas para un registro de partner como se muestra a continuación:
Los banners se mostrarán en la vista de formulario del partner:
Una vez que se rellenen los valores, los banners desaparecerán:
Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Instalación, Configuración.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.