From b35a4be5d9b8100cfec2fa8255fe6be0ac71db1f Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Tue, 15 Jul 2025 23:08:12 -0600 Subject: [PATCH] fix(#58): Agregar permisos faltantes para sale.order.line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- documents/logs/Screenshot_3.png | Bin 0 -> 18486 bytes init_odoo.py | 1 - lims_management/security/ir.model.access.csv | 5 ++ test/check_demo_users.py | 63 +++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 documents/logs/Screenshot_3.png create mode 100644 test/check_demo_users.py diff --git a/documents/logs/Screenshot_3.png b/documents/logs/Screenshot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2e0f7b41bf94081ede5463a949c8dc3f699cf8 GIT binary patch literal 18486 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 SBisdb=s?`tEx$Q={(k^0&1OXa literal 0 HcmV?d00001 diff --git a/init_odoo.py b/init_odoo.py index 46e197f..a10b3c9 100644 --- a/init_odoo.py +++ b/init_odoo.py @@ -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" ] diff --git a/lims_management/security/ir.model.access.csv b/lims_management/security/ir.model.access.csv index ef28518..fbe8000 100644 --- a/lims_management/security/ir.model.access.csv +++ b/lims_management/security/ir.model.access.csv @@ -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 diff --git a/test/check_demo_users.py b/test/check_demo_users.py new file mode 100644 index 0000000..82704c3 --- /dev/null +++ b/test/check_demo_users.py @@ -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) \ No newline at end of file