diff --git a/addons/stock/models/stock_package_level.py b/addons/stock/models/stock_package_level.py index ff25957641d..2e2e8b2bc51 100644 --- a/addons/stock/models/stock_package_level.py +++ b/addons/stock/models/stock_package_level.py @@ -49,7 +49,7 @@ class StockPackageLevel(models.Model): if corresponding_ml: corresponding_ml[0].qty_done = corresponding_ml[0].qty_done + quant.quantity else: - corresponding_move = package_level.move_ids.filtered(lambda m: m.product_id == quant.product_id) + corresponding_move = package_level.move_ids.filtered(lambda m: m.product_id == quant.product_id)[:1] self.env['stock.move.line'].create({ 'location_id': package_level.picking_id.location_id.id, 'location_dest_id': package_level.picking_id.location_dest_id.id, diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 955c1500912..dd78c8dd1f0 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -540,7 +540,7 @@ class Picking(models.Model): @api.multi def action_confirm(self): - self.mapped('package_level_ids').filtered(lambda pl: pl.state == 'draft')._generate_moves() + self.mapped('package_level_ids').filtered(lambda pl: pl.state == 'draft' and not pl.move_ids)._generate_moves() # call `_action_confirm` on every draft move self.mapped('move_lines')\ .filtered(lambda move: move.state == 'draft')\ @@ -647,9 +647,9 @@ class Picking(models.Model): origin_packages = picking.move_line_ids.mapped("package_id") for pack in origin_packages: if picking._check_move_lines_map_quant_package(pack): - package_level = picking.package_level_ids.filtered(lambda pl: pl.package_id == pack) + package_level_ids = picking.package_level_ids.filtered(lambda pl: pl.package_id == pack) move_lines_to_pack = picking.move_line_ids.filtered(lambda ml: ml.package_id == pack) - if not package_level: + if not package_level_ids: self.env['stock.package_level'].create({ 'picking_id': picking.id, 'package_id': pack.id, @@ -657,13 +657,20 @@ class Picking(models.Model): 'location_dest_id': picking.move_line_ids.filtered(lambda ml: ml.package_id == pack).mapped('location_dest_id')[:1].id, 'move_line_ids': [(6, 0, move_lines_to_pack.ids)] }) - picking.move_line_ids.filtered(lambda ml: ml.package_id == pack).write({ + move_lines_to_pack.write({ 'result_package_id': pack.id, }) else: - picking.move_line_ids.filtered(lambda ml: ml.package_id == pack).write({ + move_lines_in_package_level = move_lines_to_pack.filtered(lambda ml: ml.move_id.package_level_id != False) + move_lines_without_package_level = move_lines_to_pack - move_lines_in_package_level + for ml in move_lines_in_package_level: + ml.write({ + 'result_package_id': pack.id, + 'package_level_id': ml.move_id.package_level_id.id, + }) + move_lines_without_package_level.write({ 'result_package_id': pack.id, - 'package_level_id': package_level.id, + 'package_level_id': package_level_ids[0].id, }) @api.multi