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 @@
+