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):