diff --git a/addons/mrp/models/stock_move.py b/addons/mrp/models/stock_move.py
index f099d323595..742326a7f9f 100644
--- a/addons/mrp/models/stock_move.py
+++ b/addons/mrp/models/stock_move.py
@@ -72,6 +72,7 @@ class StockMove(models.Model):
'Quantity', compute='_qty_done_compute', inverse='_qty_done_set',
digits=dp.get_precision('Product Unit of Measure'))
move_lot_ids = fields.One2many('stock.move.lots', 'move_id', string='Lots')
+ active_move_lot_ids = fields.One2many('stock.move.lots', 'move_id', domain=[('done_wo', '=', True)], string='Lots')
bom_line_id = fields.Many2one('mrp.bom.line', 'BoM Line')
unit_factor = fields.Float('Unit Factor')
is_done = fields.Boolean(
@@ -93,7 +94,7 @@ class StockMove(models.Model):
def _qty_done_compute(self):
for move in self:
if move.has_tracking != 'none':
- move.quantity_done = sum(move.move_lot_ids.mapped('quantity_done'))
+ move.quantity_done = sum(move.move_lot_ids.filtered(lambda x: x.done_wo).mapped('quantity_done')) #TODO: change with active_move_lot_ids?
else:
move.quantity_done = move.quantity_done_store
@@ -170,6 +171,7 @@ class StockMove(models.Model):
moves = self._filter_closed_moves()
quant_obj = self.env['stock.quant']
moves_todo = self.env['stock.move']
+ moves_to_unreserve = self.env['stock.move']
uom_obj = self.env['product.uom']
for move in moves:
rounding = move.product_uom.rounding
@@ -188,6 +190,8 @@ class StockMove(models.Model):
# Need to do some kind of conversion here
qty_split = uom_obj._compute_qty(move.product_uom.id, move.product_uom_qty - move.quantity_done, move.product_id.uom_id.id)
new_move = move.split(qty_split)
+ # If you were already putting stock.move.lots on the next one in the work order, transfer those to the new move
+ move.move_lot_ids.filtered(lambda x: not x.done_wo).write({'move_id': new_move})
self.browse(new_move).quantity_done = 0.0
main_domain = [('qty', '>', 0)]
preferred_domain = [('reservation_id', '=', move.id)]
@@ -203,10 +207,11 @@ class StockMove(models.Model):
qty = uom_obj._compute_qty(move.product_uom.id, movelot.quantity_done, move.product_id.uom_id.id)
quants = quant_obj.quants_get_preferred_domain(qty, move, lot_id=movelot.lot_id.id, domain=main_domain, preferred_domain_list=preferred_domain_list)
self.env['stock.quant'].quants_move(quants, move, move.location_dest_id, lot_id = movelot.lot_id.id)
- move.quants_unreserve()
+ moves_to_unreserve |= move
# Next move in production order
if move.move_dest_id:
move.move_dest_id.action_assign()
+ moves_to_unreserve.quants_unreserve()
moves_todo.write({'state': 'done', 'date': fields.Datetime.now()})
return moves_todo
diff --git a/addons/mrp/views/stock_move_views.xml b/addons/mrp/views/stock_move_views.xml
index 41cf5d4fd38..6cd71dac6b2 100644
--- a/addons/mrp/views/stock_move_views.xml
+++ b/addons/mrp/views/stock_move_views.xml
@@ -28,7 +28,7 @@
-
+
@@ -37,6 +37,7 @@
+