From c812122d5e12a7272580f378bbd7c2f2b5a91616 Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Wed, 25 Apr 2018 10:57:57 +0200 Subject: [PATCH] [FIX] stock: picking: do_unreserve When a scrapped move is part of an open picking, it was not possible to unreserve the picking. A scrapped move is done and scrapped ; this combination should be allowed. opw-1835186 --- addons/stock/models/stock_move.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/addons/stock/models/stock_move.py b/addons/stock/models/stock_move.py index f0b5ac65196..ca88ab26ef7 100644 --- a/addons/stock/models/stock_move.py +++ b/addons/stock/models/stock_move.py @@ -486,9 +486,19 @@ class StockMove(models.Model): } def _do_unreserve(self): - if any(move.state in ('done', 'cancel') for move in self): - raise UserError(_('Cannot unreserve a done move')) - self.mapped('move_line_ids').unlink() + moves_to_unreserve = self.env['stock.move'] + for move in self: + if move.state == 'cancel': + # We may have cancelled move in an open picking in a "propagate_cancel" scenario. + continue + if move.state == 'done': + if move.scrapped: + # We may have done move in an open picking in a scrap scenario. + continue + else: + raise UserError(_('Cannot unreserve a done move')) + moves_to_unreserve |= move + moves_to_unreserve.mapped('move_line_ids').unlink() return True def _push_apply(self):