From 7807f7e1825cfe9f40d5f67a18f0e7c0c62b7e3a Mon Sep 17 00:00:00 2001 From: Bernat Brunet Torruella Date: Thu, 31 Oct 2019 15:12:59 +0100 Subject: [PATCH] Improve issue8775 patch makeing it more generic and ensure that it will work on all clients. --- issue8775.diff | 73 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/issue8775.diff b/issue8775.diff index 4df75ea..3591bf0 100644 --- a/issue8775.diff +++ b/issue8775.diff @@ -1,70 +1,91 @@ -diff -r 183e40c3a037 trytond/trytond/modules/stock/move.py ---- a/trytond/trytond/modules/stock/move.py Tue Oct 29 10:51:12 2019 +0100 -+++ b/trytond/trytond/modules/stock/move.py Tue Oct 29 12:08:55 2019 +0100 -@@ -889,6 +889,7 @@ +diff -r f3de4ca13568 move.py +--- a/trytond/trytond/modules/stock/move.py Thu Oct 31 08:46:27 2019 +0100 ++++ b/trytond/trytond/modules/stock/move.py Thu Oct 31 09:00:13 2019 +0100 +@@ -892,6 +892,9 @@ first = False else: with Transaction().set_context(_stock_move_split=True): -+ values.update({'origin': 'stock.move,%s' % move.origin.id}) ++ if move.origin and isinstance(move.origin, cls): ++ values.update({'origin': "stock.move,%s" % ++ move.origin.id}) to_assign.extend(cls.copy([move], default=values)) - + qty_default_uom = Uom.compute_qty(move.uom, qty, -diff -r 183e40c3a037 trytond/trytond/modules/stock/shipment.py ---- a/trytond/trytond/modules/stock/shipment.py Tue Oct 29 10:51:12 2019 +0100 -+++ b/trytond/trytond/modules/stock/shipment.py Tue Oct 29 12:08:55 2019 +0100 -@@ -1177,8 +1177,8 @@ +diff -r f3de4ca13568 shipment.py +--- a/trytond/trytond/modules/stock/shipment.py Thu Oct 31 08:46:27 2019 +0100 ++++ b/trytond/trytond/modules/stock/shipment.py Thu Oct 31 09:00:13 2019 +0100 +@@ -1166,6 +1166,9 @@ + pool = Pool() + Move = pool.get('stock.move') + Uom = pool.get('product.uom') ++ origins = Move._get_origin() ++ keep_origin = True if 'stock.move' in origins else False ++ + for shipment in shipments: + if shipment.warehouse_storage == shipment.warehouse_output: + # Do not create inventory moves +@@ -1175,30 +1178,34 @@ + for move in shipment.outgoing_moves: + if move.state == 'cancel': continue ++ key = ((move.product.id, move) if keep_origin ++ else move.product.id) quantity = Uom.compute_qty(move.uom, move.quantity, move.product.default_uom, round=False) - outgoing_qty.setdefault(move.product.id, 0.0) - outgoing_qty[move.product.id] += quantity -+ outgoing_qty.setdefault((move.product.id, move), 0.0) -+ outgoing_qty[(move.product.id, move)] += quantity - ++ outgoing_qty.setdefault(key, 0.0) ++ outgoing_qty[key] += quantity + to_create = [] for move in shipment.inventory_moves: -@@ -1187,18 +1187,18 @@ + if move.state == 'cancel': + continue ++ key = ((move.product.id, move.origin) if keep_origin ++ else move.product.id) qty_default_uom = Uom.compute_qty(move.uom, move.quantity, move.product.default_uom, round=False) # Check if the outgoing move doesn't exist already - if outgoing_qty.get(move.product.id): -+ if outgoing_qty.get((move.product.id, move.origin)): ++ if outgoing_qty.get(key): # If it exist, decrease the sum - if qty_default_uom <= outgoing_qty[move.product.id]: - outgoing_qty[move.product.id] -= qty_default_uom -+ if qty_default_uom <= outgoing_qty[(move.product.id, move.origin)]: -+ outgoing_qty[(move.product.id, move.origin)] -= qty_default_uom ++ if qty_default_uom <= outgoing_qty[key]: ++ outgoing_qty[key] -= qty_default_uom continue # Else create the complement else: out_quantity = (qty_default_uom - - outgoing_qty[move.product.id]) -+ - outgoing_qty[(move.product.id, move.origin)]) ++ - outgoing_qty[key]) out_quantity = Uom.compute_qty( move.product.default_uom, out_quantity, move.uom) - outgoing_qty[move.product.id] = 0.0 -+ outgoing_qty[(move.product.id, move.origin)] = 0.0 ++ outgoing_qty[key] = 0.0 else: out_quantity = move.quantity - -@@ -1216,9 +1216,9 @@ + +@@ -1216,9 +1223,11 @@ for move in shipment.outgoing_moves: if move.state == 'cancel': continue - if outgoing_qty.get(move.product.id, 0.0) > 0.0: -+ if outgoing_qty.get((move.product.id, move), 0.0) > 0.0: ++ key = ((move.product.id, move) if keep_origin ++ else move.product.id) ++ if outgoing_qty.get(key, 0.0) > 0.0: exc_qty = Uom.compute_qty(move.product.default_uom, - outgoing_qty[move.product.id], move.uom) -+ outgoing_qty[(move.product.id, move)], move.uom) ++ outgoing_qty[key], move.uom) removed_qty = Uom.compute_qty(move.uom, min(exc_qty, move.quantity), move.product.default_uom, round=False) -@@ -1228,7 +1228,7 @@ +@@ -1228,7 +1237,7 @@ 0.0, move.uom.round(move.quantity - exc_qty)), }) - outgoing_qty[move.product.id] -= removed_qty -+ outgoing_qty[(move.product.id, move)] -= removed_qty - ++ outgoing_qty[key] -= removed_qty + @classmethod @ModelView.button