details:   https://code.tryton.org/tryton/commit/eda700aaa0c7
branch:    7.0
user:      Cédric Krier <[email protected]>
date:      Thu Sep 10 14:22:34 2026 +0200
description:
        Replace typing of stock move origin by sale and purchase Function field

        The origin may not always be a sale or purchase line like with product 
kit.
        So such test must be extendable by other modules implicitly. This can be
        achieved by using the Function fields.

        Closes #15084
        (grafted from 84761faccad43bc56a11a2e8bb8cf2977ba8e8db)
diffstat:

 modules/purchase/stock.py             |  8 ++------
 modules/sale/stock.py                 |  8 ++------
 modules/sale_advance_payment/stock.py |  9 ++++-----
 3 files changed, 8 insertions(+), 17 deletions(-)

diffs (78 lines):

diff -r cab4ef5c7c83 -r eda700aaa0c7 modules/purchase/stock.py
--- a/modules/purchase/stock.py Thu Sep 10 08:11:03 2026 +0200
+++ b/modules/purchase/stock.py Thu Sep 10 14:22:34 2026 +0200
@@ -52,11 +52,9 @@
     @ModelView.button
     @Workflow.transition('draft')
     def draft(cls, shipments):
-        PurchaseLine = Pool().get('purchase.line')
         for shipment in shipments:
             for move in shipment.incoming_moves:
-                if (move.state == 'cancelled'
-                        and isinstance(move.origin, PurchaseLine)):
+                if move.state == 'cancelled' and move.purchase:
                     raise AccessError(
                         gettext('purchase.msg_purchase_move_reset_draft',
                             move=move.rec_name))
@@ -91,11 +89,9 @@
     @ModelView.button
     @Workflow.transition('draft')
     def draft(cls, shipments):
-        PurchaseLine = Pool().get('purchase.line')
         for shipment in shipments:
             for move in shipment.moves:
-                if (move.state == 'cancelled'
-                        and isinstance(move.origin, PurchaseLine)):
+                if move.state == 'cancelled' and move.purchase:
                     raise AccessError(
                         gettext('purchase.msg_purchase_move_reset_draft',
                             move=move.rec_name))
diff -r cab4ef5c7c83 -r eda700aaa0c7 modules/sale/stock.py
--- a/modules/sale/stock.py     Thu Sep 10 08:11:03 2026 +0200
+++ b/modules/sale/stock.py     Thu Sep 10 14:22:34 2026 +0200
@@ -38,11 +38,9 @@
     @ModelView.button
     @Workflow.transition('draft')
     def draft(cls, shipments):
-        SaleLine = Pool().get('sale.line')
         for shipment in shipments:
             for move in shipment.outgoing_moves:
-                if (move.state == 'cancelled'
-                        and isinstance(move.origin, SaleLine)):
+                if move.state == 'cancelled' and move.sale:
                     raise AccessError(
                         gettext('sale.msg_sale_move_reset_draft',
                             move=move.rec_name))
@@ -71,11 +69,9 @@
     @ModelView.button
     @Workflow.transition('draft')
     def draft(cls, shipments):
-        SaleLine = Pool().get('sale.line')
         for shipment in shipments:
             for move in shipment.incoming_moves:
-                if (move.state == 'cancelled'
-                        and isinstance(move.origin, SaleLine)):
+                if move.state == 'cancelled' and move.sale:
                     raise AccessError(
                         gettext('sale.msg_sale_move_reset_draft',
                             move=move.rec_name))
diff -r cab4ef5c7c83 -r eda700aaa0c7 modules/sale_advance_payment/stock.py
--- a/modules/sale_advance_payment/stock.py     Thu Sep 10 08:11:03 2026 +0200
+++ b/modules/sale_advance_payment/stock.py     Thu Sep 10 14:22:34 2026 +0200
@@ -17,12 +17,11 @@
     def pack(cls, shipments):
         pool = Pool()
         Sale = pool.get('sale.sale')
-        SaleLine = pool.get('sale.line')
 
-        sales = {move.origin.sale
-            for shipment in shipments for move in shipment.moves
-            if isinstance(move.origin, SaleLine)}
-        for sale in Sale.browse([s.id for s in sales]):
+        sales = {
+            move.sale for shipment in shipments for move in shipment.moves
+            if move.sale}
+        for sale in Sale.browse(sales):
             if sale.shipping_blocked:
                 raise ShippingBlocked(
                     gettext('sale_advance_payment.msg_shipping_blocked',

Reply via email to