diff --git a/purchase.py b/purchase.py index 9d2234442a..6ef327b25f 100644 --- a/purchase.py +++ b/purchase.py @@ -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() diff --git a/sale.py b/sale.py index afe2d10e66..26746df170 100644 --- a/sale.py +++ b/sale.py @@ -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):