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 @@