[FIX] quality_control_stock: Fix qc.trigger creation

Several use cases:

- Triggers were created for all created picking types, not only active ones.
- If picking types are activated/deactivated, this is not reflected on qc.trigger
  records.
This commit is contained in:
Pedro M. Baeza
2020-10-19 13:58:34 +02:00
parent 1e24cf9c3c
commit c5bf6e18b2
2 changed files with 33 additions and 7 deletions

View File

@@ -22,16 +22,27 @@ class StockPickingType(models.Model):
@api.model_create_multi
def create(self, val_list):
picking_types = super(StockPickingType, self).create(val_list)
picking_types._create_qc_trigger()
picking_types.filtered("active")._create_qc_trigger()
return picking_types
@api.multi
def write(self, vals):
res = super(StockPickingType, self).write(vals)
qc_trigger_model = self.env['qc.trigger'].sudo()
if vals.get('name') or vals.get('warehouse_id'):
qc_trigger_model = self.env['qc.trigger'].sudo()
for rec in self:
qc_triggers = qc_trigger_model.search(
[('picking_type_id', '=', rec.id)])
qc_triggers.write({'name': rec.name})
if "active" in vals:
if vals["active"]:
for record in self:
if not qc_trigger_model.search(
[('picking_type_id', '=', record.id)]
):
record._create_qc_trigger()
else:
qc_trigger_model.search(
[('picking_type_id', 'in', self.ids)]
).unlink()
return res

View File

@@ -242,17 +242,32 @@ class TestQualityControl(TransactionCase):
'code': 'outgoing',
'sequence_id': self.sequence.id
})
trigger = self.qc_trigger_model.search(
[('picking_type_id', '=', picking_type.id)])
domain = [('picking_type_id', '=', picking_type.id)]
trigger = self.qc_trigger_model.search(domain)
self.assertEqual(len(trigger), 1,
'One trigger must have been created.')
self.assertEqual(trigger.name, picking_type.name,
'Trigger name must match picking type name.')
picking_type.write({
'name': 'Test Name Change',
})
picking_type.write({'name': 'Test Name Change'})
self.assertEqual(trigger.name, picking_type.name,
'Trigger name must match picking type name.')
picking_type.write({"active": False})
trigger = self.qc_trigger_model.search(domain)
self.assertFalse(trigger)
picking_type.write({"active": True})
trigger = self.qc_trigger_model.search(domain)
self.assertTrue(trigger)
def test_picking_type_inactive(self):
picking_type = self.picking_type_model.create({
'name': 'Test Picking Type',
'code': 'outgoing',
"active": False,
'sequence_id': self.sequence.id
})
trigger = self.qc_trigger_model.search(
[('picking_type_id', '=', picking_type.id)])
self.assertFalse(trigger)
def test_qc_inspection_picking(self):
self.inspection1.write({