From e08d8a343dd5c810818e2a7e62a0aad8b7661ee9 Mon Sep 17 00:00:00 2001 From: yhu-odoo Date: Fri, 17 Dec 2021 16:02:40 +0000 Subject: [PATCH] [FIX] mrp: skip cancelled WOs in _start_nextworkorder When start_nextworkorder, if the WO is already cancelled, we should try to check next one the this WO. Task-2678388 closes odoo/odoo#83566 X-original-commit: 30fcfcc6c6ebb6fe9620d29475e1a7b6f1a46923 Related: odoo/enterprise#23819 Signed-off-by: Arnold Moyaux Signed-off-by: Yuchen Huang (yhu) --- addons/mrp/models/mrp_workorder.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/mrp/models/mrp_workorder.py b/addons/mrp/models/mrp_workorder.py index 149279ec24a..534bfd6ff59 100644 --- a/addons/mrp/models/mrp_workorder.py +++ b/addons/mrp/models/mrp_workorder.py @@ -497,8 +497,12 @@ class MrpWorkorder(models.Model): return self.production_id.move_finished_ids.filtered(lambda x: (x.product_id.id != self.production_id.product_id.id) and (x.state not in ('done', 'cancel'))) def _start_nextworkorder(self): - if self.state == 'done' and self.next_work_order_id.state == 'pending': - self.next_work_order_id.state = 'ready' if self.next_work_order_id.production_availability == 'assigned' else 'waiting' + if self.state == 'done': + next_order = self.next_work_order_id + while next_order and next_order.state == 'cancel': + next_order = next_order.next_work_order_id + if next_order.state == 'pending': + next_order.state = 'ready' if next_order.production_availability == 'assigned' else 'waiting' @api.model def gantt_unavailability(self, start_date, end_date, scale, group_bys=None, rows=None):