diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 66197571b12..9c24a04c0f4 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -666,10 +666,8 @@ class Picking(models.Model): @api.multi def do_unreserve(self): - for move in self: - for move_line in move.move_lines: - move_line._do_unreserve() - self.write({'state': 'confirmed'}) + for picking in self: + picking.move_lines._do_unreserve() @api.multi def button_validate(self): diff --git a/addons/stock/tests/test_move2.py b/addons/stock/tests/test_move2.py index f3bb72268c2..a3a6b0ae46b 100644 --- a/addons/stock/tests/test_move2.py +++ b/addons/stock/tests/test_move2.py @@ -648,6 +648,23 @@ class TestPickShip(TestStockCommon): self.assertEqual(picking_client.move_lines.state, 'confirmed', 'The move should be confirmed since all the origin moves are processed.') self.assertEqual(picking_client.state, 'confirmed', 'The picking should be confirmed since all the moves are confirmed.') + def test_unreserve(self): + picking_pick, picking_client = self.create_pick_ship() + + self.assertEqual(picking_pick.state, 'confirmed') + picking_pick.do_unreserve() + self.assertEqual(picking_pick.state, 'confirmed') + location = self.env['stock.location'].browse(self.stock_location) + self.env['stock.quant']._update_available_quantity(self.productA, location, 10.0) + picking_pick.action_assign() + self.assertEqual(picking_pick.state, 'assigned') + picking_pick.do_unreserve() + self.assertEqual(picking_pick.state, 'confirmed') + + self.assertEqual(picking_client.state, 'waiting') + picking_client.do_unreserve() + self.assertEqual(picking_client.state, 'waiting') + class TestSinglePicking(TestStockCommon): def test_backorder_1(self):