diff --git a/comment_issue_67.txt b/comment_issue_67.txt new file mode 100644 index 0000000..214810c --- /dev/null +++ b/comment_issue_67.txt @@ -0,0 +1,26 @@ +## Información adicional tras investigación + +Se confirmó que el método get_selection_list() en lims.analysis.parameter **funciona correctamente**: + +```python +# Ejemplo de uso: +param = env['lims.analysis.parameter'].browse(36) # Prueba de Embarazo +param.selection_values # 'Negativo,Positivo' +param.get_selection_list() # ['Negativo', 'Positivo'] +``` + +### El problema real: + +1. **En el modelo lims.result**: + - value_selection es un campo Char simple + - No hay implementación para obtener las opciones dinámicamente + - En la línea 302-304 hay un comentario con pass que indica intención no implementada + +2. **En la vista lims_test_views.xml**: + - Usa widget="selection" en un campo Char + - El widget espera opciones pero no las recibe + +### Confirmación del bug: +- get_selection_list() está disponible y funciona +- El problema es que no se está usando para proporcionar opciones al widget +- Se necesita implementar la conexión entre el método y la vista \ No newline at end of file diff --git a/issue_bug_selection.txt b/issue_bug_selection.txt new file mode 100644 index 0000000..5487c43 --- /dev/null +++ b/issue_bug_selection.txt @@ -0,0 +1,48 @@ +## Descripción del problema + +Se detectó un bug en la vista de resultados de pruebas donde el campo value_selection con widget selection aparece vacío y no muestra las opciones disponibles definidas en el parámetro. + +## Detalles técnicos + +### Síntomas: +- En lims_test_views.xml, línea 92-93, el campo value_selection usa widget="selection" +- El widget aparece vacío sin opciones disponibles +- Los valores de selección están definidos en lims.analysis.parameter.selection_values (ej: 'Negativo,Positivo') +- El campo no puede recibir valores porque no tiene opciones visibles + +### Caso de ejemplo: +- Test ID: 33 +- Resultado ID: 46 +- Parámetro: "Prueba de Embarazo" +- Opciones en parámetro: 'Negativo,Positivo' +- Valor actual en resultado: 'False' (incorrecto) + +### Análisis realizado: +Se identificaron 12 parámetros de tipo selection con opciones definidas: +- Anticuerpos Hepatitis C: 'No Reactivo,Reactivo,Indeterminado' +- Prueba de Embarazo: 'Negativo,Positivo' +- Aspecto: 'Transparente,Ligeramente turbio,Turbio,Muy turbio' +- Etc. + +## Causa raíz + +El widget selection en Odoo espera un campo de tipo Selection con opciones predefinidas, pero value_selection es un campo Char. Las opciones dinámicas del parámetro (selection_values) no se propagan automáticamente al widget. + +## Impacto + +- Los usuarios no pueden seleccionar valores para resultados de tipo selection +- Los datos se guardan incorrectamente (ej: 'False' en lugar de 'Negativo' o 'Positivo') +- Afecta la calidad de los datos y la usabilidad del sistema + +## Soluciones propuestas + +1. **Opción 1**: Cambiar el widget a text para permitir entrada manual +2. **Opción 2**: Implementar un campo Selection dinámico que obtenga opciones del parámetro +3. **Opción 3**: Crear un widget personalizado que lea selection_values del parámetro relacionado + +## Archivos afectados +- lims_management/views/lims_test_views.xml (línea 92-93) +- lims_management/models/lims_result.py (campo value_selection) + +## Prioridad +Media-Alta: Afecta la funcionalidad básica de ingreso de resultados para ciertos tipos de análisis. \ No newline at end of file diff --git a/lims_management/models/__pycache__/sale_order.cpython-312.pyc b/lims_management/models/__pycache__/sale_order.cpython-312.pyc index cb430ed..61dbebf 100644 Binary files a/lims_management/models/__pycache__/sale_order.cpython-312.pyc and b/lims_management/models/__pycache__/sale_order.cpython-312.pyc differ diff --git a/lims_management/models/lims_result.py b/lims_management/models/lims_result.py index 19d840d..94ec921 100644 --- a/lims_management/models/lims_result.py +++ b/lims_management/models/lims_result.py @@ -96,6 +96,13 @@ class LimsResult(models.Model): string='Valor de Selección' ) + # Campo para mostrar las opciones disponibles + selection_options_display = fields.Char( + string='Opciones disponibles', + compute='_compute_selection_options_display', + help='Opciones válidas para este parámetro' + ) + value_boolean = fields.Boolean( string='Valor Sí/No' ) @@ -301,4 +308,17 @@ class LimsResult(models.Model): # Si es selección, obtener las opciones if self.parameter_value_type == 'selection' and self.parameter_id.selection_values: # Esto se usará en las vistas para mostrar las opciones dinámicamente - pass \ No newline at end of file + pass + + @api.depends('parameter_id', 'parameter_id.selection_values') + def _compute_selection_options_display(self): + """Calcula las opciones disponibles para mostrar al usuario.""" + for record in self: + if record.parameter_id and record.parameter_value_type == 'selection': + options = record.parameter_id.get_selection_list() + if options: + record.selection_options_display = ' | '.join(options) + else: + record.selection_options_display = 'Sin opciones definidas' + else: + record.selection_options_display = False \ No newline at end of file diff --git a/lims_management/views/lims_test_views.xml b/lims_management/views/lims_test_views.xml index f038c09..455232b 100644 --- a/lims_management/views/lims_test_views.xml +++ b/lims_management/views/lims_test_views.xml @@ -90,8 +90,15 @@ class="oe_edit_only"/> +