clinical_laboratory/test/check_selection_issue.py
Luis Ernesto Portillo Zaldivar c959878a23 fix(#67): Simplificar implementación de campo selection
- Mantener campo value_selection como Char con validación
- Remover campos y métodos no utilizados (value_selection_field, _get_selection_values)
- Mostrar opciones disponibles debajo del campo para guiar al usuario
- La validación se mantiene en el constraint para asegurar valores válidos
2025-07-16 19:57:33 -06:00

101 lines
3.6 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script para diagnosticar por qué el selection muestra "Sin Opciones"
"""
import odoo
import logging
_logger = logging.getLogger(__name__)
def check_selection_issue(env):
"""Verificar el problema con las opciones de selección"""
print("=" * 80)
print("DIAGNÓSTICO DE PROBLEMA CON SELECTION")
print("=" * 80)
# Buscar el resultado específico mencionado por el usuario
result = env['lims.result'].browse(43)
if not result.exists():
print("No se encontró el resultado con ID 43")
# Buscar cualquier resultado de tipo selection
result = env['lims.result'].search([
('parameter_value_type', '=', 'selection')
], limit=1)
if result:
print(f"\nResultado encontrado:")
print(f" - ID: {result.id}")
print(f" - Parámetro: {result.parameter_id.name}")
print(f" - Tipo de valor: {result.parameter_value_type}")
print(f" - Valor actual: '{result.value_selection}'")
# Verificar el parámetro
param = result.parameter_id
print(f"\nInformación del parámetro:")
print(f" - ID: {param.id}")
print(f" - Nombre: {param.name}")
print(f" - Tipo de valor: {param.value_type}")
print(f" - Valores de selección (campo): '{param.selection_values}'")
# Probar get_selection_list()
print(f"\nProbando get_selection_list():")
selection_list = param.get_selection_list()
print(f" - Resultado: {selection_list}")
print(f" - Tipo: {type(selection_list)}")
print(f" - Longitud: {len(selection_list) if selection_list else 0}")
# Probar _get_selection_options() en el resultado
print(f"\nProbando _get_selection_options() en el resultado:")
options = result._get_selection_options()
print(f" - Opciones: {options}")
# Verificar si el método está siendo llamado correctamente
print(f"\nVerificando contexto:")
print(f" - result.parameter_id existe: {bool(result.parameter_id)}")
print(f" - result.parameter_value_type: '{result.parameter_value_type}'")
print(f" - Condición completa: {result.parameter_id and result.parameter_value_type == 'selection'}")
# Buscar todos los parámetros de tipo selection
print(f"\n\nBuscando todos los parámetros de tipo selection:")
selection_params = env['lims.analysis.parameter'].search([
('value_type', '=', 'selection')
])
for sp in selection_params:
print(f"\n Parámetro: {sp.name}")
print(f" - selection_values: '{sp.selection_values}'")
print(f" - get_selection_list(): {sp.get_selection_list()}")
else:
print("No se encontraron resultados de tipo selection")
if __name__ == '__main__':
# Configuración
db_name = 'lims_demo'
# Conectar a Odoo
odoo.tools.config.parse_config(['--database', db_name])
# Obtener el registro de la base de datos
registry = odoo.registry(db_name)
# Crear cursor y environment
with registry.cursor() as cr:
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
try:
# Verificar el problema
check_selection_issue(env)
# No guardar cambios
cr.rollback()
except Exception as e:
cr.rollback()
print(f"\n❌ Error durante el diagnóstico: {str(e)}")
_logger.error(f"Error: {str(e)}", exc_info=True)