From 875a90a6aa6b79b4d7a84f1d41bf432afaaf1791 Mon Sep 17 00:00:00 2001 From: Luis Ernesto Portillo Zaldivar Date: Wed, 16 Jul 2025 19:34:17 -0600 Subject: [PATCH] =?UTF-8?q?fix(#67):=20Implementar=20validaci=C3=B3n=20de?= =?UTF-8?q?=20opciones=20de=20selecci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Mantener campo value_selection como Char para flexibilidad - Agregar validación en constrains para verificar valores válidos - Mostrar opciones disponibles debajo del campo para guiar al usuario - El campo ahora valida que solo se ingresen valores de la lista definida --- lims_management/models/lims_result.py | 14 ++- lims_management/views/lims_test_views.xml | 9 +- test/verify_selection_widget_fix.py | 141 ++++++++++++++++++++++ 3 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 test/verify_selection_widget_fix.py diff --git a/lims_management/models/lims_result.py b/lims_management/models/lims_result.py index 28b8ba5..46878bd 100644 --- a/lims_management/models/lims_result.py +++ b/lims_management/models/lims_result.py @@ -92,9 +92,9 @@ class LimsResult(models.Model): string='Valor de Texto' ) - value_selection = fields.Selection( - string='Valor de Selección', - selection='_get_selection_options' + # Keep as Char but add domain validation + value_selection = fields.Char( + string='Valor de Selección' ) # Campo para mostrar las opciones disponibles @@ -283,6 +283,14 @@ class LimsResult(models.Model): raise ValidationError( _('Para parámetros de selección solo se debe elegir una opción.') ) + # Validar que el valor seleccionado sea válido + if has_value and record.parameter_id: + valid_options = record.parameter_id.get_selection_list() + if valid_options and record.value_selection not in valid_options: + raise ValidationError( + _('El valor "%s" no es una opción válida. Opciones disponibles: %s') % + (record.value_selection, ', '.join(valid_options)) + ) elif value_type == 'boolean': has_value = True # Boolean siempre tiene valor (True o False) if (record.value_numeric not in [False, 0.0]) or record.value_text or record.value_selection: diff --git a/lims_management/views/lims_test_views.xml b/lims_management/views/lims_test_views.xml index d0729bd..1986aea 100644 --- a/lims_management/views/lims_test_views.xml +++ b/lims_management/views/lims_test_views.xml @@ -90,7 +90,14 @@ class="oe_edit_only"/> + placeholder="Escriba para buscar..." + class="oe_edit_only"/> +