diff --git a/rma/models/rma_order_line.py b/rma/models/rma_order_line.py
index e1f777e0..9e058f19 100644
--- a/rma/models/rma_order_line.py
+++ b/rma/models/rma_order_line.py
@@ -231,6 +231,7 @@ class RmaOrderLine(models.Model):
("to_approve", "To Approve"),
("approved", "Approved"),
("done", "Done"),
+ ("canceled", "Canceled"),
],
string="State",
default="draft",
@@ -620,6 +621,25 @@ class RmaOrderLine(models.Model):
self.write({"state": "done"})
return True
+ def check_cancel(self):
+ for move in self.move_ids:
+ if move.state == "done":
+ raise UserError(
+ _("Unable to cancel %s as some receptions have already been done.")
+ % (self.name)
+ )
+
+ def action_rma_cancel(self):
+ for order in self:
+ order.check_cancel()
+ order.write({"state": "canceled"})
+ order.move_ids._action_cancel()
+ shipments = order._get_in_pickings()
+ shipments |= order._get_out_pickings()
+ for ship in shipments:
+ ship.action_cancel()
+ return True
+
@api.model
def create(self, vals):
if not vals.get("name") or vals.get("name") == "/":
diff --git a/rma/views/rma_order_line_view.xml b/rma/views/rma_order_line_view.xml
index d2c8db38..eca2a38f 100644
--- a/rma/views/rma_order_line_view.xml
+++ b/rma/views/rma_order_line_view.xml
@@ -318,7 +318,14 @@
name="action_rma_done"
type="object"
string="Done"
- attrs="{'invisible':[('state', 'in', ('done', 'draft'))]}"
+ attrs="{'invisible':[('state', 'in', ('done', 'draft', 'canceled'))]}"
+ groups="rma.group_rma_customer_user"
+ />
+
@@ -682,5 +689,15 @@ if records.filtered(lambda x: x.state == "draft"):
+
+ Cancel
+
+
+ code
+
+ records.action_rma_cancel()
+
+
+