changeset cec950fc25c3 in modules/purchase:default
details: https://hg.tryton.org/modules/purchase?cmd=changeset&node=cec950fc25c3
description:
        Process purchase when move is done without shipment

        issue11125
        review393371002
diffstat:

 stock.py |  39 +++++++++++++++++++++++++--------------
 1 files changed, 25 insertions(+), 14 deletions(-)

diffs (61 lines):

diff -r f5b6151aa9f0 -r cec950fc25c3 stock.py
--- a/stock.py  Sat Dec 18 16:31:10 2021 +0100
+++ b/stock.py  Thu Jan 20 19:02:06 2022 +0100
@@ -134,18 +134,22 @@
         super(ShipmentInReturn, cls).done(shipments)
 
 
-def process_purchase_move(func):
-    @wraps(func)
-    def wrapper(cls, moves):
-        pool = Pool()
-        Purchase = pool.get('purchase.purchase')
-        with Transaction().set_context(_check_access=False):
-            purchases = set(
-                m.purchase for m in cls.browse(moves) if m.purchase)
-        func(cls, moves)
-        if purchases:
-            Purchase.__queue__.process(purchases)
-    return wrapper
+def process_purchase_move(without_shipment=False):
+    def _process_purchase_move(func):
+        @wraps(func)
+        def wrapper(cls, moves):
+            pool = Pool()
+            Purchase = pool.get('purchase.purchase')
+            with Transaction().set_context(_check_access=False):
+                p_moves = cls.browse(moves)
+                if without_shipment:
+                    p_moves = [m for m in p_moves if not m.shipment]
+                purchases = set(m.purchase for m in p_moves if m.purchase)
+            func(cls, moves)
+            if purchases:
+                Purchase.__queue__.process(purchases)
+        return wrapper
+    return _process_purchase_move
 
 
 class Move(metaclass=PoolMeta):
@@ -232,13 +236,20 @@
 
     @classmethod
     @ModelView.button
+    @Workflow.transition('done')
+    @process_purchase_move(without_shipment=True)
+    def do(cls, moves):
+        super().do(moves)
+
+    @classmethod
+    @ModelView.button
     @Workflow.transition('cancelled')
-    @process_purchase_move
+    @process_purchase_move(without_shipment=True)
     def cancel(cls, moves):
         super(Move, cls).cancel(moves)
 
     @classmethod
-    @process_purchase_move
+    @process_purchase_move()
     def delete(cls, moves):
         super(Move, cls).delete(moves)
 

Reply via email to