diff --git a/addons/event/models/event_event.py b/addons/event/models/event_event.py
index 42e55b83e1b..dc6ea19677d 100644
--- a/addons/event/models/event_event.py
+++ b/addons/event/models/event_event.py
@@ -135,7 +135,7 @@ class EventEvent(models.Model):
string='Maximum Attendees Number',
help="For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.")
seats_availability = fields.Selection(
- [('limited', 'Limited'), ('unlimited', 'Unlimited')],
+ [('unlimited', 'Unlimited'), ('limited', 'Limited')],
'Maximum Attendees', required=True, default='unlimited')
seats_min = fields.Integer(
string='Minimum Attendees',
@@ -170,12 +170,13 @@ class EventEvent(models.Model):
date_end = fields.Datetime(string='End Date', required=True, tracking=True)
date_begin_located = fields.Char(string='Start Date Located', compute='_compute_date_begin_tz')
date_end_located = fields.Char(string='End Date Located', compute='_compute_date_end_tz')
+ is_ongoing = fields.Boolean('Is Ongoing', compute='_compute_is_ongoing', search='_search_is_ongoing')
is_one_day = fields.Boolean(compute='_compute_field_is_one_day')
start_sale_date = fields.Date('Start sale date', compute='_compute_start_sale_date')
# Location and communication
is_online = fields.Boolean('Online Event')
address_id = fields.Many2one(
- 'res.partner', string='Location', tracking=True,
+ 'res.partner', string='Venue', tracking=True,
default=lambda self: self.env.company.partner_id,
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
country_id = fields.Many2one('res.country', 'Country', related='address_id.country_id', store=True, readonly=False)
@@ -219,7 +220,7 @@ class EventEvent(models.Model):
@api.depends('date_end', 'seats_available', 'seats_availability', 'event_ticket_ids.sale_available')
def _compute_event_registrations_open(self):
for event in self:
- event.event_registrations_open = (event.date_end > fields.Datetime.now()) and \
+ event.event_registrations_open = event.date_end and (event.date_end > fields.Datetime.now()) and \
(event.seats_available or event.seats_availability == 'unlimited') and \
(not event.event_ticket_ids or any(ticket.sale_available for ticket in event.event_ticket_ids))
@@ -251,6 +252,25 @@ class EventEvent(models.Model):
else:
event.date_end_located = False
+ @api.depends('date_begin', 'date_end')
+ def _compute_is_ongoing(self):
+ now = fields.Datetime.now()
+ for event in self:
+ event.is_ongoing = event.date_begin <= now < event.date_end
+
+ def _search_is_ongoing(self, operator, value):
+ if operator not in ['=', '!=']:
+ raise ValueError(_('This operator is not supported'))
+ if not isinstance(value, bool):
+ raise ValueError(_('Value should be True or False (not %s)'), value)
+ now = fields.Datetime.now()
+ if (operator == '=' and value) or (operator == '!=' and not value):
+ domain = [('date_begin', '<=', now), ('date_end', '>', now)]
+ else:
+ domain = ['|', ('date_begin', '>', now), ('date_end', '<=', now)]
+ event_ids = self.env['event.event']._search(domain)
+ return [('id', 'in', event_ids)]
+
@api.depends('date_begin', 'date_end', 'date_tz')
def _compute_field_is_one_day(self):
for event in self:
diff --git a/addons/event/models/event_registration.py b/addons/event/models/event_registration.py
index 575e3442786..5f6c32a620b 100644
--- a/addons/event/models/event_registration.py
+++ b/addons/event/models/event_registration.py
@@ -29,7 +29,7 @@ class EventRegistration(models.Model):
partner_id = fields.Many2one(
'res.partner', string='Contact',
states={'done': [('readonly', True)]})
- name = fields.Char(string='Attendee Name', index=True)
+ name = fields.Char(string='Attendee Name', index=True, required=True, tracking=True)
email = fields.Char(string='Email')
phone = fields.Char(string='Phone')
mobile = fields.Char(string='Mobile')
@@ -133,8 +133,6 @@ class EventRegistration(models.Model):
return ret_list
def _check_auto_confirmation(self):
- if self._context.get('registration_force_draft'):
- return False
if any(not registration.event_id.auto_confirm or
(not registration.event_id.seats_available and registration.event_id.seats_availability == 'limited') for registration in self):
return False
@@ -249,6 +247,12 @@ class EventRegistration(models.Model):
else:
return _('on ') + format_datetime(self.env, self.event_begin_date, tz=self.event_id.date_tz, dt_format='medium')
- def summary(self):
+ def _get_registration_summary(self):
self.ensure_one()
- return {'information': []}
+ return {
+ 'id': self.id,
+ 'partner_id': self.partner_id.id,
+ 'ticket_name': self.event_ticket_id.name or _('None'),
+ 'name': self.name,
+ 'event_name': self.event_id.name,
+ }
diff --git a/addons/event/tests/test_event_internals.py b/addons/event/tests/test_event_internals.py
index f19090f791c..ad07e4b0b1c 100644
--- a/addons/event/tests/test_event_internals.py
+++ b/addons/event/tests/test_event_internals.py
@@ -21,7 +21,7 @@ class TestEventData(TestEventCommon):
event = self.event_0.with_user(self.env.user)
event.write({
- 'registration_ids': [(0, 0, {'partner_id': self.customer.id})],
+ 'registration_ids': [(0, 0, {'partner_id': self.customer.id, 'name': 'test_reg'})],
'date_begin': datetime(2020, 1, 31, 15, 0, 0),
'date_end': datetime(2020, 4, 5, 18, 0, 0),
})
@@ -79,15 +79,18 @@ class TestEventData(TestEventCommon):
self.assertTrue(event.auto_confirm)
for x in range(5):
reg = self.env['event.registration'].create({
- 'event_id': event.id
+ 'event_id': event.id,
+ 'name': 'reg_open',
})
self.assertEqual(reg.state, 'open')
reg_draft = self.env['event.registration'].create({
- 'event_id': event.id
+ 'event_id': event.id,
+ 'name': 'reg_draft',
})
reg_draft.write({'state': 'draft'})
reg_done = self.env['event.registration'].create({
- 'event_id': event.id
+ 'event_id': event.id,
+ 'name': 'reg_done',
})
reg_done.write({'state': 'done'})
self.assertEqual(event.seats_available, event.event_type_id.default_registration_max - 6)
diff --git a/addons/event/tests/test_event_security.py b/addons/event/tests/test_event_security.py
index ef056c438b5..d2ac6d275a3 100644
--- a/addons/event/tests/test_event_security.py
+++ b/addons/event/tests/test_event_security.py
@@ -83,8 +83,8 @@ class TestEventSecurity(TestEventCommon):
event._onchange_type()
event.flush()
- registration = self.env['event.registration'].create({'event_id': event.id})
- registration.write({'name': 'Myself'})
+ registration = self.env['event.registration'].create({'event_id': event.id, 'name': 'Myself'})
+ registration.write({'name': 'Myself2'})
stage = self.env.ref('event.event_stage_done')
stage.write({'name': 'ManagerEnded'})
diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml
index be2bdacf90d..c355af5473f 100644
--- a/addons/event/views/event_views.xml
+++ b/addons/event/views/event_views.xml
@@ -227,8 +227,8 @@
@@ -525,7 +536,7 @@