[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:
Víctor Martínez
2023-02-22 08:47:22 +01:00
parent 6ca4b96390
commit ceac314f7b
4 changed files with 25 additions and 7 deletions

View File

@@ -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):

View File

@@ -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"
)

View File

@@ -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"

View File

@@ -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)