fix(#69): Corregir error 'Expected singleton' en métodos de acción de stock.lot

- Modificar todos los métodos action_* para manejar múltiples registros
- Usar bucle 'for record in self:' en lugar de acceder directamente a self
- Afecta a: action_collect, action_receive, action_start_analysis,
  action_complete_analysis, action_store, action_dispose, action_cancel
- Previene el error cuando se llaman estos métodos con múltiples muestras
This commit is contained in:
Luis Ernesto Portillo Zaldivar 2025-07-16 21:49:50 -06:00
parent ac427ff778
commit 0637f0a9e3
3 changed files with 61 additions and 54 deletions

View File

@ -145,20 +145,22 @@ class StockLot(models.Model):
) )
def action_collect(self): def action_collect(self):
"""Mark sample as collected""" """Mark sample(s) as collected"""
old_state = self.state for record in self:
self.write({'state': 'collected', 'collection_date': fields.Datetime.now()}) old_state = record.state
self.message_post( record.write({'state': 'collected', 'collection_date': fields.Datetime.now()})
record.message_post(
body='Muestra recolectada por %s' % self.env.user.name, body='Muestra recolectada por %s' % self.env.user.name,
subject='Estado actualizado: Recolectada', subject='Estado actualizado: Recolectada',
message_type='notification' message_type='notification'
) )
def action_receive(self): def action_receive(self):
"""Mark sample as received in laboratory""" """Mark sample(s) as received in laboratory"""
old_state = self.state for record in self:
self.write({'state': 'received'}) old_state = record.state
self.message_post( record.write({'state': 'received'})
record.message_post(
body='Muestra recibida en laboratorio por %s' % self.env.user.name, body='Muestra recibida en laboratorio por %s' % self.env.user.name,
subject='Estado actualizado: Recibida', subject='Estado actualizado: Recibida',
message_type='notification' message_type='notification'
@ -166,9 +168,10 @@ class StockLot(models.Model):
def action_start_analysis(self): def action_start_analysis(self):
"""Start analysis process""" """Start analysis process"""
old_state = self.state for record in self:
self.write({'state': 'in_process'}) old_state = record.state
self.message_post( record.write({'state': 'in_process'})
record.message_post(
body='Análisis iniciado por %s' % self.env.user.name, body='Análisis iniciado por %s' % self.env.user.name,
subject='Estado actualizado: En Proceso', subject='Estado actualizado: En Proceso',
message_type='notification' message_type='notification'
@ -176,39 +179,43 @@ class StockLot(models.Model):
def action_complete_analysis(self): def action_complete_analysis(self):
"""Mark analysis as completed""" """Mark analysis as completed"""
old_state = self.state for record in self:
self.write({'state': 'analyzed'}) old_state = record.state
self.message_post( record.write({'state': 'analyzed'})
record.message_post(
body='Análisis completado por %s' % self.env.user.name, body='Análisis completado por %s' % self.env.user.name,
subject='Estado actualizado: Analizada', subject='Estado actualizado: Analizada',
message_type='notification' message_type='notification'
) )
def action_store(self): def action_store(self):
"""Store the sample""" """Store the sample(s)"""
old_state = self.state for record in self:
self.write({'state': 'stored'}) old_state = record.state
self.message_post( record.write({'state': 'stored'})
record.message_post(
body='Muestra almacenada por %s' % self.env.user.name, body='Muestra almacenada por %s' % self.env.user.name,
subject='Estado actualizado: Almacenada', subject='Estado actualizado: Almacenada',
message_type='notification' message_type='notification'
) )
def action_dispose(self): def action_dispose(self):
"""Dispose of the sample""" """Dispose of the sample(s)"""
old_state = self.state for record in self:
self.write({'state': 'disposed'}) old_state = record.state
self.message_post( record.write({'state': 'disposed'})
record.message_post(
body='Muestra desechada por %s. Motivo de disposición registrado.' % self.env.user.name, body='Muestra desechada por %s. Motivo de disposición registrado.' % self.env.user.name,
subject='Estado actualizado: Desechada', subject='Estado actualizado: Desechada',
message_type='notification' message_type='notification'
) )
def action_cancel(self): def action_cancel(self):
"""Cancel the sample""" """Cancel the sample(s)"""
old_state = self.state for record in self:
self.write({'state': 'cancelled'}) old_state = record.state
self.message_post( record.write({'state': 'cancelled'})
record.message_post(
body='Muestra cancelada por %s' % self.env.user.name, body='Muestra cancelada por %s' % self.env.user.name,
subject='Estado actualizado: Cancelada', subject='Estado actualizado: Cancelada',
message_type='notification' message_type='notification'