mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
[IMP] stock_request: Set with cancelled state the stock moves that are cancelled.
Example use case: - Create a stock.request (or stock.request.order) - Confirm. - Cancel the stock move. - stock.request and stock.request.order must be set with status cancelled. TT41827
This commit is contained in:
@@ -69,7 +69,7 @@ class StockMove(models.Model):
|
||||
|
||||
def _action_cancel(self):
|
||||
res = super()._action_cancel()
|
||||
self.mapped("allocation_ids.stock_request_id").check_done()
|
||||
self.mapped("allocation_ids.stock_request_id").check_cancel()
|
||||
return res
|
||||
|
||||
def _action_done(self, cancel_backorder=False):
|
||||
|
||||
@@ -236,6 +236,7 @@ class StockRequest(models.Model):
|
||||
def action_cancel(self):
|
||||
self.sudo().mapped("move_ids")._action_cancel()
|
||||
self.write({"state": "cancel"})
|
||||
self.mapped("order_id").check_cancel()
|
||||
return True
|
||||
|
||||
def action_done(self):
|
||||
@@ -243,6 +244,12 @@ class StockRequest(models.Model):
|
||||
self.mapped("order_id").check_done()
|
||||
return True
|
||||
|
||||
def check_cancel(self):
|
||||
for request in self:
|
||||
if request._check_cancel_allocation():
|
||||
request.write({"state": "cancel"})
|
||||
request.mapped("order_id").check_cancel()
|
||||
|
||||
def check_done(self):
|
||||
precision = self.env["decimal.precision"].precision_get(
|
||||
"Product Unit of Measure"
|
||||
@@ -259,11 +266,13 @@ class StockRequest(models.Model):
|
||||
>= 0
|
||||
):
|
||||
request.action_done()
|
||||
elif request._check_done_allocation():
|
||||
request.action_done()
|
||||
elif request._check_cancel_allocation():
|
||||
# If qty_done=0 and qty_cancelled>0 it's cancelled
|
||||
request.write({"state": "cancel"})
|
||||
request.mapped("order_id").check_cancel()
|
||||
return True
|
||||
|
||||
def _check_done_allocation(self):
|
||||
def _check_cancel_allocation(self):
|
||||
precision = self.env["decimal.precision"].precision_get(
|
||||
"Product Unit of Measure"
|
||||
)
|
||||
|
||||
@@ -249,6 +249,12 @@ class StockRequestOrder(models.Model):
|
||||
rec.action_done()
|
||||
return
|
||||
|
||||
def check_cancel(self):
|
||||
for rec in self:
|
||||
if not rec.stock_request_ids.filtered(lambda r: r.state != "cancel"):
|
||||
rec.write({"state": "cancel"})
|
||||
return
|
||||
|
||||
def action_view_transfer(self):
|
||||
action = self.env["ir.actions.act_window"]._for_xml_id(
|
||||
"stock.action_picking_tree_all"
|
||||
|
||||
@@ -680,7 +680,7 @@ class TestStockRequestBase(TestStockRequest):
|
||||
self.assertEqual(stock_request_2.qty_in_progress, 0)
|
||||
self.assertEqual(stock_request_2.qty_done, 0)
|
||||
self.assertEqual(stock_request_2.qty_cancelled, 6)
|
||||
self.assertEqual(stock_request_2.state, "done")
|
||||
self.assertEqual(stock_request_2.state, "cancel")
|
||||
|
||||
def test_cancel_request(self):
|
||||
expected_date = fields.Datetime.now()
|
||||
@@ -1064,8 +1064,11 @@ class TestStockRequestBase(TestStockRequest):
|
||||
sr2.refresh()
|
||||
sr3.refresh()
|
||||
self.assertEqual(sr1.state, "done")
|
||||
self.assertEqual(sr1.qty_done, 5)
|
||||
self.assertEqual(sr1.qty_cancelled, 0)
|
||||
self.assertEqual(sr2.state, "done")
|
||||
self.assertEqual(sr2.state, "cancel")
|
||||
self.assertEqual(sr2.qty_done, 1)
|
||||
self.assertEqual(sr2.qty_cancelled, 4)
|
||||
self.assertEqual(sr3.state, "done")
|
||||
self.assertEqual(sr3.state, "cancel")
|
||||
self.assertEqual(sr3.qty_done, 0)
|
||||
self.assertEqual(sr3.qty_cancelled, 5)
|
||||
|
||||
Reference in New Issue
Block a user