fix(#58): Agregar permisos faltantes para sale.order.line

- Agregar permisos de lectura/escritura para recepcionista en sale.order.line
- Agregar permisos de solo lectura para técnico en sale.order y sale.order.line
- Agregar permisos completos para administrador en ambos modelos

Esto corrige el error "No puede ingresar a los registros 'Línea de pedido de venta'"
que impedía a la recepcionista ver las órdenes de laboratorio.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-15 23:08:12 -06:00
parent 87640b48e0
commit b35a4be5d9
4 changed files with 68 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -36,7 +36,6 @@ odoo_command = [
"-d", DB_NAME,
"-i", MODULES_TO_INSTALL,
"--load-language", "es_ES",
"--without-demo=", # Forzar carga de datos demo
"--stop-after-init"
]

View File

@ -6,6 +6,11 @@ access_product_template_parameter_manager,product.template.parameter.manager,mod
access_lims_parameter_range_user,lims.parameter.range.user,model_lims_parameter_range,base.group_user,1,0,0,0
access_lims_parameter_range_manager,lims.parameter.range.manager,model_lims_parameter_range,group_lims_admin,1,1,1,1
access_sale_order_receptionist,sale.order.receptionist,sale.model_sale_order,group_lims_receptionist,1,1,1,0
access_sale_order_line_receptionist,sale.order.line.receptionist,sale.model_sale_order_line,group_lims_receptionist,1,1,1,0
access_sale_order_technician,sale.order.technician,sale.model_sale_order,group_lims_technician,1,0,0,0
access_sale_order_line_technician,sale.order.line.technician,sale.model_sale_order_line,group_lims_technician,1,0,0,0
access_sale_order_admin,sale.order.admin,sale.model_sale_order,group_lims_admin,1,1,1,1
access_sale_order_line_admin,sale.order.line.admin,sale.model_sale_order_line,group_lims_admin,1,1,1,1
access_stock_lot_user,stock.lot.user,stock.model_stock_lot,base.group_user,1,1,1,1
access_lims_test_receptionist,lims.test.receptionist,model_lims_test,group_lims_receptionist,1,0,0,0
access_lims_test_technician,lims.test.technician,model_lims_test,group_lims_technician,1,1,1,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
6 access_lims_parameter_range_user lims.parameter.range.user model_lims_parameter_range base.group_user 1 0 0 0
7 access_lims_parameter_range_manager lims.parameter.range.manager model_lims_parameter_range group_lims_admin 1 1 1 1
8 access_sale_order_receptionist sale.order.receptionist sale.model_sale_order group_lims_receptionist 1 1 1 0
9 access_sale_order_line_receptionist sale.order.line.receptionist sale.model_sale_order_line group_lims_receptionist 1 1 1 0
10 access_sale_order_technician sale.order.technician sale.model_sale_order group_lims_technician 1 0 0 0
11 access_sale_order_line_technician sale.order.line.technician sale.model_sale_order_line group_lims_technician 1 0 0 0
12 access_sale_order_admin sale.order.admin sale.model_sale_order group_lims_admin 1 1 1 1
13 access_sale_order_line_admin sale.order.line.admin sale.model_sale_order_line group_lims_admin 1 1 1 1
14 access_stock_lot_user stock.lot.user stock.model_stock_lot base.group_user 1 1 1 1
15 access_lims_test_receptionist lims.test.receptionist model_lims_test group_lims_receptionist 1 0 0 0
16 access_lims_test_technician lims.test.technician model_lims_test group_lims_technician 1 1 1 0

63
test/check_demo_users.py Normal file
View File

@ -0,0 +1,63 @@
import odoo
import json
def check_demo_users(cr):
"""Verificar si los usuarios demo fueron creados"""
cr.execute("""
SELECT
u.id,
u.login,
u.name,
u.active,
array_agg(g.name) as groups
FROM res_users u
LEFT JOIN res_groups_users_rel rel ON rel.uid = u.id
LEFT JOIN res_groups g ON g.id = rel.gid
WHERE u.login IN ('recepcionista', 'tecnico', 'administrador')
GROUP BY u.id, u.login, u.name, u.active
ORDER BY u.login
""")
users = cr.fetchall()
print("\n=== USUARIOS DEMO CREADOS ===")
print("-" * 60)
if not users:
print("❌ NO se encontraron usuarios demo")
return
for user in users:
user_id, login, name, active, groups = user
status = "✓ Activo" if active else "✗ Inactivo"
print(f"\nUsuario: {login}")
print(f" ID: {user_id}")
print(f" Nombre: {name}")
print(f" Estado: {status}")
print(f" Grupos: {', '.join(groups) if groups[0] else 'Sin grupos'}")
print("\n" + "-" * 60)
print(f"Total usuarios demo encontrados: {len(users)}")
# Verificar contraseñas (solo para confirmar que pueden loguearse)
expected_users = {
'recepcionista': 'Recepcionista Demo',
'tecnico': 'Técnico Demo',
'administrador': 'Administrador Lab Demo'
}
missing = []
for login, expected_name in expected_users.items():
if not any(u[1] == login for u in users):
missing.append(login)
if missing:
print(f"\n⚠️ Usuarios faltantes: {', '.join(missing)}")
else:
print("\n✅ Todos los usuarios demo esperados fueron creados")
if __name__ == '__main__':
db_name = 'lims_demo'
registry = odoo.registry(db_name)
with registry.cursor() as cr:
check_demo_users(cr)