diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 0bf9e32e580..de9917f453d 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -977,7 +977,8 @@ class stock_picking(osv.osv): def do_recompute_remaining_quantities(self, cr, uid, picking_ids, context=None): def _create_link_for_product(product_id, qty): qty_to_assign = qty - for move in picking.move_lines: + active_lines = [x for x in picking.move_lines if x.state not in ['done', 'cancel']] + for move in active_lines: if move.product_id.id == product_id: qty_on_link = min(move.remaining_qty, qty_to_assign) link_obj.create(cr, uid, {'move_id': move.id, 'operation_id': op.id, 'qty': qty_on_link}, context=context) @@ -1060,12 +1061,12 @@ class stock_picking(osv.osv): if move.remaining_qty == 0: if move.state in ('draft', 'assigned', 'confirmed'): todo_move_ids.append(move.id) - elif move.remaining_qty > 0: + elif move.remaining_qty > 0 and move.state not in ['done', 'cancel']: new_move = stock_move_obj.split(cr, uid, move, move.remaining_qty, context=context) todo_move_ids.append(move.id) #Assign move as it was assigned before toassign_move_ids.append(new_move) - else: + elif move.state not in ['done', 'cancel']: #this should never happens raise self.rereserve_quants(cr, uid, picking, move_ids=todo_move_ids, context=context) diff --git a/addons/stock/wizard/stock_move_view.xml b/addons/stock/wizard/stock_move_view.xml index 9eeb56821fd..a47782414c0 100644 --- a/addons/stock/wizard/stock_move_view.xml +++ b/addons/stock/wizard/stock_move_view.xml @@ -49,7 +49,8 @@ - + @@ -66,6 +67,7 @@ Scrap Move ir.actions.act_window stock.move.scrap + form form new