From 66693a8cb3fb9f6a28afd399f22c62c935470082 Mon Sep 17 00:00:00 2001 From: "Laurent Mignonn (ACSONE)" Date: Mon, 14 Oct 2024 16:56:04 +0200 Subject: [PATCH] [FIX] stock_available_to_promise_release: normal outgoing moves are mergeable outgoing moves from unreleasable pickings are mergeable by default. This fix is required to avoid to disalbe the merge of moves from outgoing picking when the module is installed but the associated stock.rule is not configured to defer the pull of not available qty --- .../models/stock_move.py | 9 ++++----- .../tests/test_merge_moves.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/stock_available_to_promise_release/models/stock_move.py b/stock_available_to_promise_release/models/stock_move.py index d59d90eb59..946593abe4 100644 --- a/stock_available_to_promise_release/models/stock_move.py +++ b/stock_available_to_promise_release/models/stock_move.py @@ -57,8 +57,9 @@ class StockMove(models.Model): @api.depends("need_release", "rule_id", "rule_id.available_to_promise_defer_pull") def _compute_unrelease_allowed(self): + user_is_allowed = self.env.user.has_group("stock.group_stock_user") for move in self: - unrelease_allowed = move._is_unreleaseable() + unrelease_allowed = user_is_allowed and move._is_unreleaseable() if unrelease_allowed: iterator = move._get_chained_moves_iterator("move_orig_ids") next(iterator) # skip the current move @@ -79,10 +80,8 @@ def _is_unreleaseable(self): _is_unrelease_allowed_on_origin_moves. """ self.ensure_one() - user_is_allowed = self.env.user.has_group("stock.group_stock_user") return ( - user_is_allowed - and not self.need_release + not self.need_release and self.state not in ("done", "cancel") and self.picking_type_id.code == "outgoing" and self.rule_id.available_to_promise_defer_pull @@ -787,7 +786,7 @@ def write(self, vals): def _is_mergeable(self): self.ensure_one() return self.state not in ("done", "cancel") and ( - self.picking_type_id.code != "outgoing" or self.unrelease_allowed + not self._is_unreleaseable() or self.unrelease_allowed ) def _update_candidate_moves_list(self, candidate_moves): diff --git a/stock_available_to_promise_release/tests/test_merge_moves.py b/stock_available_to_promise_release/tests/test_merge_moves.py index 5e08bd8642..9002bf7591 100644 --- a/stock_available_to_promise_release/tests/test_merge_moves.py +++ b/stock_available_to_promise_release/tests/test_merge_moves.py @@ -136,3 +136,17 @@ def test_unrelease_at_move_merge_merged(self): self.assertEqual(1, len(move)) self.assertEqual(2 + original_qty_1 + original_qty_2, move.product_uom_qty) self.assertEqual(2, move.move_line_ids.qty_done) + + def test_default_merge(self): + # check that the merge is still working when the available_to_promise_defer_pull + # is False + self.wh.delivery_route_id.write( + { + "available_to_promise_defer_pull": False, + } + ) + original_qty = self.shipping1.move_ids.product_uom_qty + # run a new procurement for the same product in the shipment 1 + self._procure(2) + self.assertEqual(1, len(self.shipping1.move_ids)) + self.assertEqual(original_qty + 2, self.shipping1.move_ids.product_uom_qty)