feat(#51): Task 6 completada - Actualizar generación automática de resultados
- Implementado método _generate_test_results() en lims.test - Genera automáticamente líneas de lims.result basadas en product.template.parameter - Se ejecuta al crear una nueva prueba - Respeta el orden (sequence) y las instrucciones de cada parámetro - Agregado action_regenerate_results() para regenerar manualmente - Botón en la vista con confirmación para regenerar resultados - Logging de información sobre resultados generados 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
5bee8e79df
commit
79373a01a1
|
@ -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()
|
||||
|
|
|
@ -24,6 +24,10 @@
|
|||
<button name="action_draft" string="Volver a Borrador"
|
||||
type="object"
|
||||
invisible="state != 'cancelled'"/>
|
||||
<button name="action_regenerate_results" string="Regenerar Resultados"
|
||||
type="object"
|
||||
invisible="state not in ['draft', 'in_process']"
|
||||
confirm="¿Está seguro de regenerar los resultados? Esto eliminará los resultados actuales."/>
|
||||
<field name="state" widget="statusbar"
|
||||
statusbar_visible="draft,in_process,result_entered,validated"/>
|
||||
</header>
|
||||
|
|
Loading…
Reference in New Issue
Block a user