diff --git a/sale_stock_available_to_promise_release_block/tests/test_sale_block_release.py b/sale_stock_available_to_promise_release_block/tests/test_sale_block_release.py index 700036b446..b97b546887 100644 --- a/sale_stock_available_to_promise_release_block/tests/test_sale_block_release.py +++ b/sale_stock_available_to_promise_release_block/tests/test_sale_block_release.py @@ -90,6 +90,28 @@ def test_unblock_release_contextual(self): all(not m.release_blocked for m in (existing_moves | new_moves)) ) + def test_unblock_release_contextual_order_not_eligible(self): + self._set_stock(self.line.product_id, self.line.product_uom_qty) + self.sale.block_release = True + self.sale.action_confirm() + # Unblock deliveries through the wizard, opened from another SO + new_sale = self._create_sale_order() + self.env["sale.order.line"].create( + { + "order_id": new_sale.id, + "product_id": self.product.id, + "product_uom_qty": 50, + "product_uom": self.uom_unit.id, + } + ) + new_sale.action_cancel() + wiz = self._create_unblock_release_wizard( + self.sale.order_line, + from_order=new_sale, + date_deadline=fields.Datetime.now(), + ) + self.assertEqual(wiz.option, "manual") + def test_unblock_release_contextual_different_shipping_policy(self): self._set_stock(self.line.product_id, self.line.product_uom_qty) self.sale.block_release = True diff --git a/sale_stock_available_to_promise_release_block/wizards/unblock_release.py b/sale_stock_available_to_promise_release_block/wizards/unblock_release.py index 211bd93250..a1bc7232b2 100644 --- a/sale_stock_available_to_promise_release_block/wizards/unblock_release.py +++ b/sale_stock_available_to_promise_release_block/wizards/unblock_release.py @@ -43,12 +43,20 @@ def _constrains_date_deadline(self): _("You cannot reschedule deliveries in the past.") ) + def _get_contextual_order(self): + """Return the current and eligible sale order from the context.""" + from_sale_order_id = self.env.context.get("from_sale_order_id") + order = self.env["sale.order"].browse(from_sale_order_id).exists() + if order and order.state not in ("sale", "done", "cancel"): + return order + def _selection_option(self): options = [ ("manual", "Manual"), ("automatic", "Automatic / As soon as possible"), ] - if self.env.context.get("from_sale_order_id"): + order = self._get_contextual_order() + if order: options.append(("contextual", "Based on current order")) return options @@ -68,10 +76,9 @@ def default_get(self, fields_list): res = super().default_get(fields_list) active_model = self.env.context.get("active_model") active_ids = self.env.context.get("active_ids") - from_sale_order_id = self.env.context.get("from_sale_order_id") - from_sale_order = self.env["sale.order"].browse(from_sale_order_id).exists() + from_sale_order = self._get_contextual_order() if from_sale_order: - res["order_id"] = from_sale_order_id + res["order_id"] = from_sale_order.id if active_model == "sale.order.line" and active_ids: res["order_line_ids"] = [(6, 0, active_ids)] if active_model == "stock.move" and active_ids: