Split process method to avoid create/write in loop

issue10801
review372071002
This commit is contained in:
Cédric Krier committed 2021-10-08 19:21:06 +02:00
1 parent 7a64fa6d47
commit 1da0d185fd
2 files changed
+23 -18

No files matched your search

+13 -9
View File
@@ -147,18 +147,22 @@ class Purchase(metaclass=PoolMeta):
'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()
+10 -9
View File
@@ -82,21 +82,22 @@ class Sale(metaclass=PoolMeta):
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
def create_drop_shipment_moves(self):
@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):
moves = []
for line in self.lines:
moves += line.get_drop_moves()
Move.save(moves)
return moves
class Line(metaclass=PoolMeta):