From e121edc9ec5c8fa4709bb2e098336f357cd92a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 18 Dec 2022 15:40:10 +0100 Subject: [PATCH] Ignore explicitly stock moves for assignation Closes #11945 --- modules/stock/shipment.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/modules/stock/shipment.py b/modules/stock/shipment.py index c5c436f5c1..42f9f600e5 100644 --- a/modules/stock/shipment.py +++ b/modules/stock/shipment.py @@ -64,16 +64,26 @@ class ShipmentAssignMixin(ShipmentMixin): cls.assign(shipments) @dualmethod - def assign_ignore(cls, shipments): + def assign_ignore(cls, shipments, moves=None): pool = Pool() Move = pool.get('stock.move') - Move.write([ - m for s in shipments for m in s.assign_moves - if m.assignation_required - and m.state in {'staging', 'draft'}], { + assign_moves = { + m for s in shipments for m in s.assign_moves + if m.assignation_required and m.state in {'staging', 'draft'}} + if moves is None: + moves = list(assign_moves) + else: + moves = [m for m in moves if m in assign_moves] + Move.write(moves, { 'quantity': 0, }) - cls.assign(shipments) + to_assign = [ + s for s in shipments + if all( + m.state not in {'staging', 'draft'} + for m in s.assign_moves if m.assignation_required)] + if to_assign: + cls.assign(to_assign) @classmethod def _get_assign_domain(cls): @@ -2856,7 +2866,7 @@ class Assign(Wizard): return 'end' def transition_ignore(self): - self.record.assign_ignore() + self.record.assign_ignore(self.partial.moves) return 'end'