[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:
Pierre Masereel
2018-07-19 16:42:08 +02:00
parent 1f7a39964b
commit 5f83c59f75
2 changed files with 14 additions and 7 deletions
+1 -1
View File
@@ -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,
+13 -6
View File
@@ -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