Puntos 16 y 10: modulo de paquetes de sesiones (catalogo, saldo por paciente, descuento en agenda, venta en POS) + fix de auditoria silenciosa

This commit is contained in:
2026-09-24 17:17:29 +00:00
parent 09b4f25bb8
commit dcf2c367f1
18 changed files with 1892 additions and 17 deletions

View File

@@ -58,6 +58,7 @@ DEFAULT_MENU_ROLES = {
'/consultas': ['admin', 'recepcion', 'medico', 'gerencia'],
'/medicos': ['admin', 'recepcion', 'gerencia'],
'/servicios': ['admin', 'recepcion', 'medico', 'lectura', 'gerencia'],
'/paquetes': ['admin', 'recepcion', 'medico', 'lectura', 'gerencia'],
'/productos': ['admin', 'recepcion', 'lectura', 'gerencia'],
'/ventas': ['admin', 'recepcion', 'gerencia'],
'/tickets': ['admin', 'gerencia'],
@@ -115,12 +116,20 @@ def default_menu_roles():
def get_menu_roles(env):
"""Matriz vigente: la guardada en ir.config_parameter o los defaults."""
"""Matriz vigente: la guardada en ir.config_parameter o los defaults.
La matriz guardada manda sobre los defaults, PERO se completan en memoria
las rutas que no existan en ella. Sin eso, una ruta nueva (p. ej.
'/paquetes') no aparecería en la matriz guardada y el frontend la trataría
como "visible para todos" por no matchear ninguna llave.
"""
raw = env['ir.config_parameter'].sudo().get_param(MENU_ROLES_KEY)
if raw:
try:
val = json.loads(raw)
if isinstance(val, dict):
for href, roles in default_menu_roles().items():
val.setdefault(href, roles)
return val
except Exception:
pass