diff --git a/addons/mrp/models/mrp_workorder.py b/addons/mrp/models/mrp_workorder.py
index 7a85d10d996..4783a0879c8 100644
--- a/addons/mrp/models/mrp_workorder.py
+++ b/addons/mrp/models/mrp_workorder.py
@@ -657,6 +657,7 @@ class MrpWorkorder(models.Model):
def action_cancel(self):
self.leave_id.unlink()
+ self.end_all()
return self.write({'state': 'cancel'})
def action_replan(self):
diff --git a/addons/mrp/tests/test_order.py b/addons/mrp/tests/test_order.py
index 6be0eca0919..87591b6c72f 100644
--- a/addons/mrp/tests/test_order.py
+++ b/addons/mrp/tests/test_order.py
@@ -2736,3 +2736,21 @@ class TestMrpOrder(TestMrpCommon):
mo_2.action_confirm()
mo_2.button_plan()
self.assertEqual(mo_2.workorder_ids[0].workcenter_id.id, workcenter_2.id, 'workcenter_2 is faster than workcenter_1 to manufacture 4 units')
+
+ def test_timers_after_cancelling_mo(self):
+ """
+ Check that the timers in the workorders are stopped after the cancellation of the MO
+ """
+ mo_form = Form(self.env['mrp.production'])
+ mo_form.bom_id = self.bom_2
+ mo_form.product_qty = 1
+ mo = mo_form.save()
+ mo.action_confirm()
+ mo.button_plan()
+
+ wo = mo.workorder_ids
+ wo.button_start()
+ mo.action_cancel()
+ self.assertEqual(mo.state, 'cancel', 'Manufacturing order should be cancelled.')
+ self.assertEqual(wo.state, 'cancel', 'Workorders should be cancelled.')
+ self.assertTrue(mo.workorder_ids.time_ids.date_end, 'The timers must stop after the cancellation of the MO')
diff --git a/addons/mrp/views/mrp_production_views.xml b/addons/mrp/views/mrp_production_views.xml
index 11b4c8a4d98..ae0afb42029 100644
--- a/addons/mrp/views/mrp_production_views.xml
+++ b/addons/mrp/views/mrp_production_views.xml
@@ -110,7 +110,7 @@
confirm="There are no components to consume. Are you still sure you want to continue?"/>
-
+
diff --git a/addons/mrp/views/mrp_workorder_views.xml b/addons/mrp/views/mrp_workorder_views.xml
index 9c69a8dfca0..b2449798990 100644
--- a/addons/mrp/views/mrp_workorder_views.xml
+++ b/addons/mrp/views/mrp_workorder_views.xml
@@ -95,9 +95,9 @@
+ attrs="{'invisible': ['|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked')]}"/>
+ attrs="{'invisible': ['|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked')]}"/>