Skip to content

Commit 39d0661

Browse files
[FIX] repair_stock_consumption_step: cancel consumption picking when cancelling the repair
1 parent 350995f commit 39d0661

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

repair_stock_consumption_step/models/repair_order.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ def action_repair_done(self):
3838
RepairOrder, rec.with_context(dont_validate_repair_move=True)
3939
).action_repair_done()
4040
res.update(rec_res)
41-
moves = self.env["stock.move"].search([("repair_id", "=", rec.id)])
41+
moves = self.env["stock.move"].search(
42+
[("repair_id", "=", rec.id), ("state", "!=", "cancel")]
43+
)
4244
if not moves:
4345
continue
4446
picking = self.env["stock.picking"].create(
@@ -72,6 +74,15 @@ def action_repair_done(self):
7274
rec.state = "consumption"
7375
return res
7476

77+
def action_repair_cancel(self):
78+
res = super().action_repair_cancel()
79+
if self.consumption_picking_id and self.consumption_picking_id.state not in (
80+
"done",
81+
"cancel",
82+
):
83+
self.consumption_picking_id.action_cancel()
84+
return res
85+
7586
def action_repair_end(self):
7687
super().action_repair_end()
7788
need_consumption_step = self.filtered("consumption_picking_id")

repair_stock_consumption_step/tests/test_repair_stock_consumption_step.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,30 @@ def test_repair_done_with_consumption_step_invoice_after_repair(self):
4949
self.assertEqual(self.repair.state, "consumption")
5050
self._do_picking(self.repair.consumption_picking_id)
5151
self.assertEqual(self.repair.state, "2binvoiced")
52+
53+
def test_repair_cancelled(self):
54+
self.repair.action_repair_end()
55+
self.assertTrue(self.repair.consumption_picking_id)
56+
self.repair.action_repair_cancel()
57+
self.assertEqual(self.repair.consumption_picking_id.state, "cancel")
58+
self.assertTrue(
59+
all(
60+
state == "cancel"
61+
for state in self.repair.consumption_picking_id.move_ids.mapped("state")
62+
),
63+
)
64+
65+
# Case: Cancel -> draft -> New consumption
66+
# Ensure the old moves do not get transfered to the new consu pick
67+
previous_consumption_picking = self.repair.consumption_picking_id
68+
previous_consumption_picking_moves = self.repair.consumption_picking_id.move_ids
69+
self.repair.action_repair_cancel_draft()
70+
self.repair.action_validate()
71+
self.repair.action_repair_start()
72+
self.repair.action_repair_end()
73+
new_consumption_picking = self.repair.consumption_picking_id
74+
75+
self.assertNotEqual(previous_consumption_picking, new_consumption_picking)
76+
self.assertNotIn(
77+
previous_consumption_picking_moves, new_consumption_picking.move_ids
78+
)

0 commit comments

Comments
 (0)