diff --git a/addons/event_sale/models/sale_order.py b/addons/event_sale/models/sale_order.py index fd589e41e8a..60b84a2eaf0 100644 --- a/addons/event_sale/models/sale_order.py +++ b/addons/event_sale/models/sale_order.py @@ -29,6 +29,10 @@ class SaleOrder(models.Model): ._for_xml_id('event_sale.action_sale_order_event_registration') return res + def action_cancel(self): + self.order_line._cancel_associated_registrations() + return super(SaleOrder, self).action_cancel() + def action_view_attendee_list(self): action = self.env["ir.actions.actions"]._for_xml_id("event.event_registration_action_tree") action['domain'] = [('sale_order_id', 'in', self.ids)] @@ -128,6 +132,9 @@ class SaleOrderLine(models.Model): self._unlink_associated_registrations() return super(SaleOrderLine, self).unlink() + def _cancel_associated_registrations(self): + self.env['event.registration'].search([('sale_order_line_id', 'in', self.ids)]).action_cancel() + def _unlink_associated_registrations(self): self.env['event.registration'].search([('sale_order_line_id', 'in', self.ids)]).unlink() diff --git a/addons/event_sale/tests/test_event_sale.py b/addons/event_sale/tests/test_event_sale.py index 65a777ef6b0..b4d5bd9e23e 100644 --- a/addons/event_sale/tests/test_event_sale.py +++ b/addons/event_sale/tests/test_event_sale.py @@ -270,3 +270,13 @@ class TestEventSale(TestEventSaleCommon): self.assertEqual(event.seats_expected, 1) self.sale_order.order_line.unlink() self.assertEqual(event.seats_expected, 0) + + @users('user_salesman') + def test_cancel_so(self): + """ This test ensures that when canceling a sale order, if the latter is linked to an event registration, + the number of expected seats will be correctly updated """ + event = self.env['event.event'].browse(self.event_0.ids) + self.register_person.action_make_registration() + self.assertEqual(event.seats_expected, 1) + self.sale_order.action_cancel() + self.assertEqual(event.seats_expected, 0)