changeset 2f9e92d60164 in modules/sale_supply_drop_shipment:5.0
details:
https://hg.tryton.org/modules/sale_supply_drop_shipment?cmd=changeset;node=2f9e92d60164
description:
Do not rely on unique link between request and purchase or sale lines
The purchase request can be grouped into a single purchase lines.
And nothing prevent a custom module to merge request between different
sale lines.
issue9075
review315271002
(grafted from 2de777c46af5198c2ad1e40c0c163017e991b9a4)
diffstat:
stock.py | 25 ++++++++++++++-----------
1 files changed, 14 insertions(+), 11 deletions(-)
diffs (44 lines):
diff -r 4b686d2cbc45 -r 2f9e92d60164 stock.py
--- a/stock.py Sat Apr 04 18:03:23 2020 +0200
+++ b/stock.py Thu Apr 23 21:39:31 2020 +0200
@@ -511,26 +511,29 @@
requests += PurchaseRequest.search([
('purchase_line', 'in', list(sub_lines)),
])
- pline2request = {r.purchase_line: r for r in requests}
+ pline2requests = defaultdict(list)
+ for request in requests:
+ pline2requests[request.purchase_line].append(request)
sale_lines = SaleLine.search([
('purchase_request', 'in', [r.id for r in requests]),
])
- request2sline = {sl.purchase_request: sl for sl in sale_lines}
+ request2slines = defaultdict(list)
+ for sale_line in sale_lines:
+ request2slines[sale_line.purchase_request].append(sale_line)
to_save = []
for shipment in shipments:
for move in shipment.supplier_moves:
if not move.origin:
continue
- sale_line = request2sline.get(pline2request.get(move.origin))
- if not sale_line:
- continue
- for move in sale_line.moves:
- if (move.state not in ('cancel', 'done')
- and not move.shipment
- and move.from_location.type == 'drop'):
- move.shipment = shipment
- to_save.append(move)
+ for request in pline2requests[move.origin]:
+ for sale_line in request2slines[request]:
+ for move in sale_line.moves:
+ if (move.state not in ('cancel', 'done')
+ and not move.shipment
+ and move.from_location.type == 'drop'):
+ move.shipment = shipment
+ to_save.append(move)
Move.save(to_save)
cls._synchronize_moves(shipments)