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):
|
def _action_cancel(self):
|
||||||
res = super()._action_cancel()
|
res = super()._action_cancel()
|
||||||
self.mapped("allocation_ids.stock_request_id").check_done()
|
self.mapped("allocation_ids.stock_request_id").check_cancel()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _action_done(self, cancel_backorder=False):
|
def _action_done(self, cancel_backorder=False):
|
||||||
|
|||||||
@@ -236,6 +236,7 @@ class StockRequest(models.Model):
|
|||||||
def action_cancel(self):
|
def action_cancel(self):
|
||||||
self.sudo().mapped("move_ids")._action_cancel()
|
self.sudo().mapped("move_ids")._action_cancel()
|
||||||
self.write({"state": "cancel"})
|
self.write({"state": "cancel"})
|
||||||
|
self.mapped("order_id").check_cancel()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def action_done(self):
|
def action_done(self):
|
||||||
@@ -243,6 +244,12 @@ class StockRequest(models.Model):
|
|||||||
self.mapped("order_id").check_done()
|
self.mapped("order_id").check_done()
|
||||||
return True
|
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):
|
def check_done(self):
|
||||||
precision = self.env["decimal.precision"].precision_get(
|
precision = self.env["decimal.precision"].precision_get(
|
||||||
"Product Unit of Measure"
|
"Product Unit of Measure"
|
||||||
@@ -259,11 +266,13 @@ class StockRequest(models.Model):
|
|||||||
>= 0
|
>= 0
|
||||||
):
|
):
|
||||||
request.action_done()
|
request.action_done()
|
||||||
elif request._check_done_allocation():
|
elif request._check_cancel_allocation():
|
||||||
request.action_done()
|
# If qty_done=0 and qty_cancelled>0 it's cancelled
|
||||||
|
request.write({"state": "cancel"})
|
||||||
|
request.mapped("order_id").check_cancel()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _check_done_allocation(self):
|
def _check_cancel_allocation(self):
|
||||||
precision = self.env["decimal.precision"].precision_get(
|
precision = self.env["decimal.precision"].precision_get(
|
||||||
"Product Unit of Measure"
|
"Product Unit of Measure"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -249,6 +249,12 @@ class StockRequestOrder(models.Model):
|
|||||||
rec.action_done()
|
rec.action_done()
|
||||||
return
|
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):
|
def action_view_transfer(self):
|
||||||
action = self.env["ir.actions.act_window"]._for_xml_id(
|
action = self.env["ir.actions.act_window"]._for_xml_id(
|
||||||
"stock.action_picking_tree_all"
|
"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_in_progress, 0)
|
||||||
self.assertEqual(stock_request_2.qty_done, 0)
|
self.assertEqual(stock_request_2.qty_done, 0)
|
||||||
self.assertEqual(stock_request_2.qty_cancelled, 6)
|
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):
|
def test_cancel_request(self):
|
||||||
expected_date = fields.Datetime.now()
|
expected_date = fields.Datetime.now()
|
||||||
@@ -1064,8 +1064,11 @@ class TestStockRequestBase(TestStockRequest):
|
|||||||
sr2.refresh()
|
sr2.refresh()
|
||||||
sr3.refresh()
|
sr3.refresh()
|
||||||
self.assertEqual(sr1.state, "done")
|
self.assertEqual(sr1.state, "done")
|
||||||
|
self.assertEqual(sr1.qty_done, 5)
|
||||||
self.assertEqual(sr1.qty_cancelled, 0)
|
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(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)
|
self.assertEqual(sr3.qty_cancelled, 5)
|
||||||
|
|||||||
Reference in New Issue
Block a user