diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index 829198e5ab5..70d59ca46c1 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -1282,7 +1282,7 @@ class MrpProduction(models.Model): for move in (self.move_raw_ids | self.move_finished_ids): if move.operation_id: move.write({ - 'workorder_id': workorder_per_operation[move.operation_id].id + 'workorder_id': workorder_per_operation[move.operation_id].id if move.operation_id in workorder_per_operation else False }) else: bom = move.bom_line_id.bom_id if (move.bom_line_id and move.bom_line_id.bom_id in workorder_boms) else self.bom_id diff --git a/addons/mrp/tests/test_order.py b/addons/mrp/tests/test_order.py index bc869b614a0..e95d1f85e09 100644 --- a/addons/mrp/tests/test_order.py +++ b/addons/mrp/tests/test_order.py @@ -3274,3 +3274,14 @@ class TestMrpOrder(TestMrpCommon): # Only duration from the workcenter specific capacity setup/cleanup times since there is one defined for this product. self.assertEqual(production.workorder_ids[0].duration_expected, 15.0, "Capacity setup time (5) + capacity cleanup time (10)") + + def test_unlink_workorder_with_consumed_operations(self): + self.bom_3.bom_line_ids[0].operation_id = self.bom_3.operation_ids[0].id + self.bom_3.bom_line_ids[1].operation_id = self.bom_3.operation_ids[1].id + mo_form = Form(self.env['mrp.production']) + mo_form.bom_id = self.bom_3 + mo = mo_form.save() + mo.workorder_ids[1].unlink() + mo.action_confirm() + self.assertEqual(mo.state, 'confirmed') + self.assertEqual(len(mo.workorder_ids), 2)