From 61eaaae4a6d2fee800eabc27fd2fbb9855bf5606 Mon Sep 17 00:00:00 2001 From: Arnaud Joset Date: Thu, 19 Oct 2023 10:31:22 +0200 Subject: [PATCH] [FIX] calendar: prevent userError when base_event is not defined Before this commit, the follwing traceback was sometimes raised. Error message ERROR: TestCalendar.test_event_creation_mail Traceback (most recent call last): File "/data/build/odoo/addons/calendar/tests/test_calendar.py", line 339, in test_event_creation_mail m.write({ File "/data/build/odoo/addons/calendar/models/calendar_event.py", line 574, in write self._rewrite_recurrence(values, time_values, recurrence_values) File "/data/build/odoo/addons/calendar/models/calendar_event.py", line 1084, in _rewrite_recurrence update_dict = self._get_time_update_dict(base_event, time_values) File "/data/build/odoo/addons/calendar/models/calendar_event.py", line 993, in _get_time_update_dict raise UserError(_("You can't update a recurrence without base event.")) odoo.exceptions.UserError: You can't update a recurrence without base event. closes odoo/odoo#139486 X-original-commit: bd1c46a79ea3d41a374fac47dd16af802d18045d Signed-off-by: Arnaud Joset (arj) --- addons/calendar/models/calendar_event.py | 5 +++-- addons/calendar/tests/test_calendar.py | 9 ++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/calendar/models/calendar_event.py b/addons/calendar/models/calendar_event.py index 6e46121c572..31afcc3aa6f 100644 --- a/addons/calendar/models/calendar_event.py +++ b/addons/calendar/models/calendar_event.py @@ -1150,7 +1150,8 @@ class Meeting(models.Model): deactivate the detached events except for the updated event and apply recurrence values. """ self.ensure_one() - update_dict = self._get_time_update_dict(self, time_values) + base_event = self + update_dict = self._get_time_update_dict(base_event, time_values) time_values.update(update_dict) # Get base values from the previous recurrence and update the start date weekday field. start_date = time_values['start'].date() if 'start' in time_values else self.start.date() @@ -1183,7 +1184,7 @@ class Meeting(models.Model): def _rewrite_recurrence(self, values, time_values, recurrence_values): """ Delete the current recurrence, reactivate base event and apply updated recurrence values. """ self.ensure_one() - base_event = self.recurrence_id.base_event_id + base_event = self.recurrence_id.base_event_id or self.recurrence_id._get_first_event(include_outliers=False) update_dict = self._get_time_update_dict(base_event, time_values) time_values.update(update_dict) diff --git a/addons/calendar/tests/test_calendar.py b/addons/calendar/tests/test_calendar.py index d0064c548e3..8e70d5ad2eb 100644 --- a/addons/calendar/tests/test_calendar.py +++ b/addons/calendar/tests/test_calendar.py @@ -316,15 +316,14 @@ class TestCalendar(SavepointCaseWithUserDemo): self.env['res.partner'].create({'name': 'testuser1', 'email': u'alice@example.com'}), ] partner_ids = [(6, False, [p.id for p in partners]),] - now = fields.Datetime.context_timestamp(partners[0], fields.Datetime.now()) m = self.CalendarEvent.create({ 'name': "mailTest1", 'allday': False, 'rrule': u'FREQ=DAILY;INTERVAL=1;COUNT=5', 'recurrency': True, 'partner_ids': partner_ids, - 'start': fields.Datetime.to_string(now + timedelta(days=10)), - 'stop': fields.Datetime.to_string(now + timedelta(days=15)), + 'start': "2023-10-29 08:00:00", + 'stop': "2023-11-03 08:00:00", }) # every partner should have 1 mail sent @@ -351,8 +350,8 @@ class TestCalendar(SavepointCaseWithUserDemo): 'allday': False, 'recurrency': False, 'partner_ids': partner_ids, - 'start': fields.Datetime.to_string(now - timedelta(days=10)), - 'stop': fields.Datetime.to_string(now - timedelta(days=9)), + 'start': "2023-10-09 08:00:00", + 'stop': "2023-10-10 08:00:00", }) # no more email should be sent