[FIX] stock: assign move line to package_level_id
When the move lines reserved are assigned to a package level, it wasn't taking into account the package level of the parent move if it has any. So this could lead to package level state error, if we have two package level with the same package_id.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user