diff --git a/lims_management/models/lims_test.py b/lims_management/models/lims_test.py index a098d79..70d2de0 100644 --- a/lims_management/models/lims_test.py +++ b/lims_management/models/lims_test.py @@ -146,7 +146,46 @@ class LimsTest(models.Model): for vals in vals_list: if vals.get('name', 'Nuevo') == 'Nuevo': vals['name'] = self.env['ir.sequence'].next_by_code('lims.test') or 'Nuevo' - return super().create(vals_list) + + tests = super().create(vals_list) + # Generar resultados automáticamente + tests._generate_test_results() + return tests + + def _generate_test_results(self): + """Genera automáticamente las líneas de resultado basadas en los parámetros configurados del análisis.""" + for test in self: + if test.result_ids: + # Si ya tiene resultados, no generar nuevos + continue + + # Obtener el product.template del análisis + product_tmpl = test.product_id.product_tmpl_id + + # Buscar los parámetros configurados para este análisis + template_parameters = self.env['product.template.parameter'].search([ + ('product_tmpl_id', '=', product_tmpl.id) + ], order='sequence, id') + + # Crear una línea de resultado por cada parámetro + for param_config in template_parameters: + result_vals = { + 'test_id': test.id, + 'parameter_id': param_config.parameter_id.id, + 'sequence': param_config.sequence, + 'notes': param_config.instructions or '' + } + + # Inicializar valores según el tipo + if param_config.parameter_value_type == 'boolean': + result_vals['value_boolean'] = False + + self.env['lims.result'].create(result_vals) + + if template_parameters: + _logger.info(f"Generados {len(template_parameters)} resultados para la prueba {test.name}") + else: + _logger.warning(f"No se encontraron parámetros configurados para el análisis {product_tmpl.name}") def action_start_process(self): """Inicia el proceso de análisis.""" @@ -236,6 +275,28 @@ class LimsTest(models.Model): return True + def action_regenerate_results(self): + """Regenera los resultados basados en la configuración actual del análisis.""" + self.ensure_one() + if self.state not in ['draft', 'in_process']: + raise UserError(_('Solo se pueden regenerar resultados en pruebas en borrador o en proceso.')) + + # Confirmar con el usuario + if self.result_ids: + # En producción, aquí se mostraría un wizard de confirmación + # Por ahora, eliminamos los resultados existentes + self.result_ids.unlink() + + # Regenerar + self._generate_test_results() + + self.message_post( + body=_('Resultados regenerados por %s') % self.env.user.name, + subject=_('Resultados Regenerados') + ) + + return True + def action_draft(self): """Regresa a borrador.""" self.ensure_one() diff --git a/lims_management/views/lims_test_views.xml b/lims_management/views/lims_test_views.xml index 2b7c5f8..9cc6360 100644 --- a/lims_management/views/lims_test_views.xml +++ b/lims_management/views/lims_test_views.xml @@ -24,6 +24,10 @@