[FIX] stock_reserve: Avoid creation of pickings when confirming stock reservations

TT41080
This commit is contained in:
Víctor Martínez
2023-02-15 10:03:09 +01:00
parent 892ef3904e
commit 0333d5fcf7
2 changed files with 7 additions and 4 deletions

View File

@@ -122,8 +122,9 @@ class StockReservation(models.Model):
A date until which the product is reserved can be specified. A date until which the product is reserved can be specified.
""" """
self.write({"date_deadline": fields.Datetime.now()}) self.write({"date_deadline": fields.Datetime.now()})
self.mapped("move_id")._action_confirm(merge=False) # Don't call _action_confirm() method to prevent assign picking
self.mapped("move_id.picking_id").action_assign() self.mapped("move_id").write({"state": "confirmed"})
self.mapped("move_id")._action_assign()
return True return True
def release_reserve(self): def release_reserve(self):
@@ -132,8 +133,6 @@ class StockReservation(models.Model):
""" """
moves = self.mapped("move_id") moves = self.mapped("move_id")
moves._action_cancel() moves._action_cancel()
# HACK: For avoiding to accumulate all reservations in the same picking
moves.write({"picking_id": False})
return True return True
def _get_state_domain_release_reserve(self, mode): def _get_state_domain_release_reserve(self, mode):

View File

@@ -33,9 +33,11 @@ class TestStockReserve(common.TransactionCase):
def test_reservation_and_reservation_release(self): def test_reservation_and_reservation_release(self):
reservation_1 = self._create_stock_reservation(6) reservation_1 = self._create_stock_reservation(6)
reservation_1.reserve() reservation_1.reserve()
self.assertFalse(reservation_1.picking_id)
self.assertEqual(self.product.virtual_available, 4) self.assertEqual(self.product.virtual_available, 4)
reservation_2 = self._create_stock_reservation(1) reservation_2 = self._create_stock_reservation(1)
reservation_2.reserve() reservation_2.reserve()
self.assertFalse(reservation_2.picking_id)
self.assertEqual(self.product.virtual_available, 3) self.assertEqual(self.product.virtual_available, 3)
reservation_1.release_reserve() reservation_1.release_reserve()
self.assertEqual(self.product.virtual_available, 9) self.assertEqual(self.product.virtual_available, 9)
@@ -44,6 +46,7 @@ class TestStockReserve(common.TransactionCase):
reservation_1 = self._create_stock_reservation(6) reservation_1 = self._create_stock_reservation(6)
reservation_1.date_validity = fields.Date.from_string("2021-01-01") reservation_1.date_validity = fields.Date.from_string("2021-01-01")
reservation_1.reserve() reservation_1.reserve()
self.assertFalse(reservation_1.picking_id)
self.assertEqual(self.product.virtual_available, 4) self.assertEqual(self.product.virtual_available, 4)
cron = self.env.ref("stock_reserve.ir_cron_release_stock_reservation") cron = self.env.ref("stock_reserve.ir_cron_release_stock_reservation")
cron.method_direct_trigger() cron.method_direct_trigger()
@@ -52,6 +55,7 @@ class TestStockReserve(common.TransactionCase):
def test_cron_reserve(self): def test_cron_reserve(self):
reservation_1 = self._create_stock_reservation(11) reservation_1 = self._create_stock_reservation(11)
reservation_1.reserve() reservation_1.reserve()
self.assertFalse(reservation_1.picking_id)
self.assertEqual(reservation_1.state, "partially_available") self.assertEqual(reservation_1.state, "partially_available")
self.env["stock.quant"].create( self.env["stock.quant"].create(
{ {