From 6a6dd72691838ef07f8cd05e6527af8bed917cf8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Alix?= <sebastien.alix@camptocamp.com>
Date: Mon, 5 Aug 2024 11:41:05 +0200
Subject: [PATCH] fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup!
 fixup! sale_stock_available_to_promise_release_block: add Unblock Release
 wizard

---
 .../tests/test_sale_block_release.py          | 22 +++++++++++++++++++
 .../wizards/unblock_release.py                | 15 +++++++++----
 2 files changed, 33 insertions(+), 4 deletions(-)

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: