
- 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
101 lines
3.6 KiB
Python
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) |