--- a/trytond/trytond/modules/stock/move.py +++ b/trytond/trytond/modules/stock/move.py @@ -949,6 +949,8 @@ child_locations = {} to_write = [] to_assign = [] + to_copy = [] + to_copy_values = {} success = True for move in moves: if move.state != 'draft': @@ -1012,13 +1014,21 @@ to_assign.append(move) first = False else: - with Transaction().set_context(_stock_move_split=True): - to_assign.extend(cls.copy([move], default=values)) + to_copy.append(move) + to_copy_values[move.id] = values qty_default_uom = Uom.compute_qty(move.uom, qty, move.product.default_uom, round=False) pbl[key] = pbl.get(key, 0.0) - qty_default_uom + if to_copy: + with Transaction().set_context(_stock_move_split=True): + to_assign.extend(cls.copy(to_copy, default={ + 'from_location': lambda d: ( + to_copy_values[d['id']]['from_location']), + 'quantity': lambda d: ( + to_copy_values[d['id']]['quantity']), + })) if to_write: cls.write(*to_write) if to_assign: