Optimize update of customer move when drop shipment is set to waiting

By using One2Many fields, it is possible to avoid custom search and use nested
single loop to update the customer moves.
This commit is contained in:
Cédric Krier committed 2023-10-25 18:11:34 +02:00
1 parent 4344f77ac5
commit 37e43d6573
1 file changed
+6 -25
+6 -25
View File
@@ -15,7 +15,6 @@ from trytond.modules.sale.stock import process_sale
from trytond.modules.stock.shipment import ShipmentCheckQuantity, ShipmentMixin
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval, Id, If
from trytond.tools import grouped_slice
from trytond.transaction import Transaction
@@ -468,37 +467,19 @@ class ShipmentDrop(
@Workflow.transition('waiting')
def wait(cls, shipments):
pool = Pool()
PurchaseRequest = pool.get('purchase.request')
SaleLine = pool.get('sale.line')
PurchaseLine = pool.get('purchase.line')
Move = pool.get('stock.move')
requests = []
for sub_lines in grouped_slice([m.origin.id for s in shipments
for m in s.supplier_moves if m.origin]):
requests += PurchaseRequest.search([
('purchase_line', 'in', list(sub_lines)),
])
pline2requests = defaultdict(list)
for request in requests:
pline2requests[request.purchase_line].append(request)
sale_lines = []
for sub_requests in grouped_slice([r.id for r in requests]):
sale_lines += SaleLine.search([
('purchase_request', 'in', list(sub_requests)),
])
request2slines = defaultdict(list)
for sale_line in sale_lines:
request2slines[sale_line.purchase_request].append(sale_line)
to_save = []
for shipment in shipments:
for s_move in shipment.supplier_moves:
if not s_move.origin:
if not isinstance(s_move.origin, PurchaseLine):
continue
for request in pline2requests[s_move.origin]:
for sale_line in request2slines[request]:
p_line = s_move.origin
for request in p_line.requests:
for sale_line in request.sale_lines:
for c_move in sale_line.moves:
if (c_move.state not in ('cancelled', 'done')
if (c_move.state not in {'cancelled', 'done'}
and not c_move.shipment
and c_move.from_location.type == 'drop'):
c_move.shipment = shipment