diff --git a/addons/event/data/event_demo.xml b/addons/event/data/event_demo.xml
index e51e5f0ecd3..51b83ab1420 100644
--- a/addons/event/data/event_demo.xml
+++ b/addons/event/data/event_demo.xml
@@ -144,6 +144,7 @@
+ Europe/London
diff --git a/addons/event/models/event_event.py b/addons/event/models/event_event.py
index 6458f4e6177..797e5fd36ca 100644
--- a/addons/event/models/event_event.py
+++ b/addons/event/models/event_event.py
@@ -191,6 +191,9 @@ class EventEvent(models.Model):
address_id = fields.Many2one(
'res.partner', string='Venue', default=lambda self: self.env.company.partner_id.id,
tracking=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
+ address_inline = fields.Char(
+ string='Venue (formatted for one line uses)', compute='_compute_address_inline',
+ compute_sudo=True)
country_id = fields.Many2one(
'res.country', 'Country', related='address_id.country_id', readonly=False, store=True)
# ticket reports
@@ -494,6 +497,18 @@ class EventEvent(models.Model):
is_html_empty(event.event_type_id.ticket_instructions):
event.ticket_instructions = event.event_type_id.ticket_instructions
+ @api.depends('address_id')
+ def _compute_address_inline(self):
+ """Use venue address if available, otherwise its name, finally ''. """
+ for event in self:
+ if (event.address_id.contact_address or '').strip():
+ event.address_inline = ', '.join(
+ frag.strip()
+ for frag in event.address_id.contact_address.split('\n') if frag.strip()
+ )
+ else:
+ event.address_inline = event.address_id.name or ''
+
@api.constrains('seats_max', 'seats_available', 'seats_limited')
def _check_seats_limit(self):
for event in self:
@@ -585,7 +600,7 @@ class EventEvent(models.Model):
cal_event.add('dtend').value = event.date_end.astimezone(pytz.timezone(event.date_tz))
cal_event.add('summary').value = event.name
if event.address_id:
- cal_event.add('location').value = event.sudo().address_id.contact_address
+ cal_event.add('location').value = event.address_inline
result[event.id] = cal.serialize().encode('utf-8')
return result
diff --git a/addons/event/models/event_registration.py b/addons/event/models/event_registration.py
index 7a733869c82..7a48123bcb5 100644
--- a/addons/event/models/event_registration.py
+++ b/addons/event/models/event_registration.py
@@ -4,7 +4,7 @@
from dateutil.relativedelta import relativedelta
from odoo import _, api, fields, models, SUPERUSER_ID
-from odoo.tools import format_datetime
+from odoo.tools import format_date
from odoo.exceptions import AccessError, ValidationError
@@ -296,7 +296,7 @@ class EventRegistration(models.Model):
# TOOLS
# ------------------------------------------------------------
- def get_date_range_str(self):
+ def get_date_range_str(self, lang_code=False):
self.ensure_one()
today = fields.Datetime.now()
event_date = self.event_begin_date
@@ -312,7 +312,7 @@ class EventRegistration(models.Model):
elif event_date.month == (today + relativedelta(months=+1)).month:
return _('next month')
else:
- return _('on %(date)s', date=format_datetime(self.env, self.event_begin_date, tz=self.event_id.date_tz, dt_format='medium'))
+ return _('on %(date)s', date=format_date(self.env, self.event_begin_date, lang_code=lang_code, date_format='medium'))
def _get_registration_summary(self):
self.ensure_one()
diff --git a/addons/event/tests/test_event_internals.py b/addons/event/tests/test_event_internals.py
index 2b1b3b9b546..e8601effe50 100644
--- a/addons/event/tests/test_event_internals.py
+++ b/addons/event/tests/test_event_internals.py
@@ -79,7 +79,7 @@ class TestEventData(TestEventInternalsCommon):
self.assertEqual(registration.get_date_range_str(), u'next month')
event.date_begin = datetime(2020, 3, 1, 10, 0, 0)
- self.assertEqual(registration.get_date_range_str(), u'on Mar 1, 2020, 11:00:00 AM')
+ self.assertEqual(registration.get_date_range_str(), u'on Mar 1, 2020')
# Is actually 8:30 to 20:00 in Mexico
event.write({
diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml
index b140429a001..8ce556e4379 100644
--- a/addons/event/views/event_views.xml
+++ b/addons/event/views/event_views.xml
@@ -572,8 +572,8 @@
-
-
+
+
diff --git a/addons/event_sms/data/sms_data.xml b/addons/event_sms/data/sms_data.xml
index 39629dd993d..2ee5fcc769c 100644
--- a/addons/event_sms/data/sms_data.xml
+++ b/addons/event_sms/data/sms_data.xml
@@ -11,7 +11,8 @@
Event: Reminder
- {{ object.event_id.organizer_id.name or object.event_id.company_id.name or user.env.company.name }}: We are excited to remind you that the {{ object.event_id.name }} event is starting {{ object.get_date_range_str() }}. We confirm your registration and hope to meet you there.
+ Ready for "{{ object.event_id.name }}" {{ object.get_date_range_str(object.partner_id.lang) }}?
+{{ 'It starts at %s' % format_time(time=object.event_begin_date, tz=object.event_id.date_tz, time_format='short', lang_code=object.partner_id.lang) + (', at %s' % object.event_id.address_inline if object.event_id.address_inline else '') + '.\nSee you there!' if object.event_id.address_inline or 'website_published' not in object.event_id._fields else 'Join us on %s/event/%i !' % (object.get_base_url(), object.event_id.id) }}
{{ object.partner_id.lang }}
diff --git a/addons/website_event/models/event_event.py b/addons/website_event/models/event_event.py
index 4e28ef71678..4b6e5c33532 100644
--- a/addons/website_event/models/event_event.py
+++ b/addons/website_event/models/event_event.py
@@ -417,7 +417,7 @@ class Event(models.Model):
'details': self.name,
}
if self.address_id:
- params.update(location=self.sudo().address_id.contact_address.replace('\n', ' '))
+ params.update(location=self.address_inline)
encoded_params = werkzeug.urls.url_encode(params)
google_url = GOOGLE_CALENDAR_URL + encoded_params
iCal_url = '/event/%d/ics?%s' % (self.id, encoded_params)