diff --git a/addons/event/models/event_registration.py b/addons/event/models/event_registration.py index 8f940a2812e..3a85bee3e68 100644 --- a/addons/event/models/event_registration.py +++ b/addons/event/models/event_registration.py @@ -61,9 +61,21 @@ class EventRegistration(models.Model): def create(self, vals): registration = super(EventRegistration, self).create(vals) if registration._check_auto_confirmation(): - registration.sudo().confirm_registration() + registration.sudo().action_confirm() return registration + def write(self, vals): + ret = super(EventRegistration, self).write(vals) + + if vals.get('state') == 'open': + # auto-trigger after_sub (on subscribe) mail schedulers, if needed + onsubscribe_schedulers = self.mapped('event_id.event_mail_ids').filtered(lambda s: s.interval_type == 'after_sub') + onsubscribe_schedulers.execute() + elif vals.get('state') == 'done' and 'date_closed' not in vals: + vals['date_closed'] = fields.Datetime.now() + + return ret + @api.model def _prepare_attendee_values(self, registration): """ Method preparing the values to create new attendees based on a @@ -83,23 +95,38 @@ class EventRegistration(models.Model): data.update({key: value for key, value in registration.items() if key in self._fields}) return data - def do_draft(self): + def name_get(self): + """ Custom name_get implementation to better differentiate registrations + linked to a given partner but with different name (one partner buying + several registrations) + + * name, partner_id has no name -> take name + * partner_id has name, name void or same -> take partner name + * both have name: partner + name + """ + ret_list = [] + for registration in self: + if registration.partner_id.name: + if registration.name and registration.name != registration.partner_id.name: + name = '%s, %s' % (registration.partner_id.name, registration.name) + else: + name = registration.partner_id.name + else: + name = registration.name + ret_list.append((registration.id, name)) + return ret_list + + def action_set_draft(self): self.write({'state': 'draft'}) - def confirm_registration(self): + def action_confirm(self): self.write({'state': 'open'}) - # auto-trigger after_sub (on subscribe) mail schedulers, if needed - onsubscribe_schedulers = self.event_id.event_mail_ids.filtered( - lambda s: s.interval_type == 'after_sub') - onsubscribe_schedulers.execute() - - def button_reg_close(self): + def action_set_done(self): """ Close Registration """ - for registration in self: - registration.write({'state': 'done', 'date_closed': fields.Datetime.now()}) + self.write({'state': 'done'}) - def button_reg_cancel(self): + def action_cancel(self): self.write({'state': 'cancel'}) @api.onchange('partner_id') diff --git a/addons/event/tests/test_event_flow.py b/addons/event/tests/test_event_flow.py index 6c317b74a02..572e64a8231 100644 --- a/addons/event/tests/test_event_flow.py +++ b/addons/event/tests/test_event_flow.py @@ -47,10 +47,10 @@ class TestEventFlow(TestEventCommon): }) # EventUser validates registrations - test_reg1.button_reg_close() + test_reg1.action_set_done() self.assertEqual(test_reg1.state, 'done', 'Event: wrong state of attended registration') self.assertEqual(test_event.seats_used, 1, 'Event: incorrect number of attendees after closing registration') - test_reg2.button_reg_close() + test_reg2.action_set_done() self.assertEqual(test_reg1.state, 'done', 'Event: wrong state of attended registration') self.assertEqual(test_event.seats_used, 2, 'Event: incorrect number of attendees after closing registration') diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml index 62acfb7bba0..919c4251c43 100644 --- a/addons/event/views/event_views.xml +++ b/addons/event/views/event_views.xml @@ -291,18 +291,21 @@ event.event.tree event.event - + - - - - - - - - - - + + + + + + + + + + @@ -485,18 +488,20 @@ event.registration.tree event.registration - - + + + - + - - + + + -