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)