diff --git a/addons/calendar/models/calendar_event.py b/addons/calendar/models/calendar_event.py index e0c276ca395..f82c128927b 100644 --- a/addons/calendar/models/calendar_event.py +++ b/addons/calendar/models/calendar_event.py @@ -352,13 +352,14 @@ class Meeting(models.Model): defaults = self.env['calendar.recurrence'].default_get(recurrence_fields) for event in self: if event.recurrency: + event.update(defaults) # default recurrence values are needed to correctly compute the recurrence params event_values = event._get_recurrence_params() rrule_values = { field: event.recurrence_id[field] for field in recurrence_fields if event.recurrence_id[field] } - event.update({**false_values, **defaults, **event_values, **rrule_values}) + event.update({**false_values, **event_values, **rrule_values}) else: event.update(false_values) @@ -1082,8 +1083,8 @@ class Meeting(models.Model): """ if not self.start: return fields.Date.today() - if self.recurrence_id.event_tz: - tz = pytz.timezone(self.recurrence_id.event_tz) + if self.recurrency and self.event_tz: + tz = pytz.timezone(self.event_tz) # Ensure that all day events date are not calculated around midnight. TZ shift would potentially return bad date start = self.start if not self.allday else self.start.replace(hour=12) return pytz.utc.localize(start).astimezone(tz).date() diff --git a/addons/calendar/tests/test_calendar.py b/addons/calendar/tests/test_calendar.py index 473db2dc702..8dfc6bfb89d 100644 --- a/addons/calendar/tests/test_calendar.py +++ b/addons/calendar/tests/test_calendar.py @@ -5,6 +5,7 @@ import datetime from datetime import datetime, timedelta, time from odoo import fields, Command +from odoo.tests import Form from odoo.addons.base.tests.common import SavepointCaseWithUserDemo import pytz import re @@ -186,6 +187,14 @@ class TestCalendar(SavepointCaseWithUserDemo): self.assertEqual(d.hour, 15) self.assertEqual(d.minute, 30) + def test_recurring_ny(self): + self.env.user.tz = 'US/Eastern' + f = Form(self.CalendarEvent.with_context(tz='US/Eastern')) + f.name = 'test' + f.start = '2022-07-07 01:00:00' # This is in UTC. In NY, it corresponds to the 6th of july at 9pm. + f.recurrency = True + self.assertEqual(f.weekday, 'WED') + def test_event_activity_timezone(self): activty_type = self.env['mail.activity.type'].create({ 'name': 'Meeting',