changeset cbf861fec31e in modules/sale_supply_drop_shipment:default
details: 
https://hg.tryton.org/modules/sale_supply_drop_shipment?cmd=changeset&node=cbf861fec31e
description:
        Split process method to avoid create/write in loop

        issue10801
        review372071002
diffstat:

 purchase.py |  22 +++++++++++++---------
 sale.py     |  21 +++++++++++----------
 2 files changed, 24 insertions(+), 19 deletions(-)

diffs (71 lines):

diff -r 4e0c709a1136 -r cbf861fec31e purchase.py
--- a/purchase.py       Sun Oct 03 13:45:11 2021 +0200
+++ b/purchase.py       Fri Oct 08 19:21:06 2021 +0200
@@ -147,18 +147,22 @@
                     'purchase': self.rec_name,
                     })
 
-    def create_move(self, move_type):
+    @classmethod
+    def _process_shipment(cls, purchases):
         pool = Pool()
         DropShipment = pool.get('stock.shipment.drop')
 
-        moves = super(Purchase, self).create_move(move_type)
-        if moves and self.customer and move_type == 'in':
-            drop_shipment = self.create_drop_shipment()
-            drop_shipment.supplier_moves = moves
-            drop_shipment.save()
-            DropShipment.wait([drop_shipment])
-
-        return moves
+        drop_shipments = []
+        for purchase in purchases:
+            if purchase.customer:
+                moves = purchase.create_move('in')
+                if moves:
+                    drop_shipment = purchase.create_drop_shipment()
+                    drop_shipment.supplier_moves = moves
+                    drop_shipments.append(drop_shipment)
+        DropShipment.save(drop_shipments)
+        DropShipment.wait(drop_shipments)
+        super()._process_shipment(purchases)
 
     def create_drop_shipment(self):
         pool = Pool()
diff -r 4e0c709a1136 -r cbf861fec31e sale.py
--- a/sale.py   Sun Oct 03 13:45:11 2021 +0200
+++ b/sale.py   Fri Oct 08 19:21:06 2021 +0200
@@ -82,21 +82,22 @@
     get_drop_shipments = get_shipments_returns('stock.shipment.drop')
     search_drop_shipments = search_shipments_returns('stock.shipment.drop')
 
-    def create_shipment(self, shipment_type):
-        shipments = super(Sale, self).create_shipment(shipment_type)
-        if shipment_type == 'out':
-            with Transaction().set_context(_drop_shipment=True):
-                self.create_drop_shipment_moves()
-        return shipments
+    @classmethod
+    def _process_shipment(cls, sales):
+        pool = Pool()
+        Move = pool.get('stock.move')
+        super()._process_shipment(sales)
+        moves = []
+        with Transaction().set_context(_drop_shipment=True):
+            for sale in sales:
+                moves.extend(sale.create_drop_shipment_moves())
+        Move.save(moves)
 
     def create_drop_shipment_moves(self):
-        pool = Pool()
-        Move = pool.get('stock.move')
-
         moves = []
         for line in self.lines:
             moves += line.get_drop_moves()
-        Move.save(moves)
+        return moves
 
 
 class Line(metaclass=PoolMeta):

Reply via email to