From df62b583413c4d33ea77c8409834e6c82609ff16 Mon Sep 17 00:00:00 2001 From: Leonardo Pavan Rocha Date: Thu, 26 Oct 2023 16:53:16 +0200 Subject: [PATCH] [FIX] calendar: yearly recurrence was being shown as custom weekly In calendar, we use the interval value of the event to define if the rrule_type_ui is custom or not. However, since a yearly recurrence in odoo becomes a monthly recurrence every 12 months, we were showing the rrule_type_ui as custom. At the same time, we were getting the wrong rrule_type. Instead of being a monthly rrule type, it was being set as weekly (the default rrule_type). This commit fixes this by getting the correct rrule_type, however we still show it as custom as internally the yearly recurrence is a monthly one with interval set to 12. task-3570053 Part-of: odoo/odoo#139736 --- addons/calendar/models/calendar_event.py | 3 ++- addons/calendar/tests/test_event_recurrence.py | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/addons/calendar/models/calendar_event.py b/addons/calendar/models/calendar_event.py index 31afcc3aa6f..42180c5fed7 100644 --- a/addons/calendar/models/calendar_event.py +++ b/addons/calendar/models/calendar_event.py @@ -431,6 +431,7 @@ class Meeting(models.Model): default_rrule_values = self.recurrence_id.default_get(recurrence_fields) for event in self: if event.recurrency: + current_rrule = (event.rrule_type if event.rrule_type_ui == "custom" else event.rrule_type_ui) event.update(defaults) # default recurrence values are needed to correctly compute the recurrence params event_values = event._get_recurrence_params() rrule_values = { @@ -439,7 +440,7 @@ class Meeting(models.Model): if event.recurrence_id[field] } rrule_values = rrule_values or default_rrule_values - rrule_values['rrule_type'] = (event.rrule_type if event.rrule_type_ui == "custom" else event.rrule_type_ui) or defaults.pop('rrule_type') + rrule_values['rrule_type'] = current_rrule or rrule_values.get('rrule_type') or defaults['rrule_type'] event.update({**false_values, **defaults, **event_values, **rrule_values}) else: event.update(false_values) diff --git a/addons/calendar/tests/test_event_recurrence.py b/addons/calendar/tests/test_event_recurrence.py index 689c46ae1a8..7be8971160f 100644 --- a/addons/calendar/tests/test_event_recurrence.py +++ b/addons/calendar/tests/test_event_recurrence.py @@ -932,6 +932,8 @@ class TestUpdateMonthlyByDate(TestRecurrentEvents): (datetime(2019, 6, 23, 16), datetime(2019, 6, 23, 17)), (datetime(2019, 6, 24, 16, 0), datetime(2019, 6, 24, 17)), ]) + self.assertEqual(event.rrule_type_ui, 'daily') + self.assertEqual(event.count, 2) def test_recurring_ui_options_monthly(self): with Form(self.env['calendar.event']) as calendar_form: @@ -947,6 +949,8 @@ class TestUpdateMonthlyByDate(TestRecurrentEvents): (datetime(2019, 6, 11, 16), datetime(2019, 6, 11, 17)), (datetime(2019, 7, 11, 16), datetime(2019, 7, 11, 17)), ]) + self.assertEqual(event.rrule_type_ui, 'monthly') + self.assertEqual(event.count, 2) def test_recurring_ui_options_yearly(self): with Form(self.env['calendar.event']) as calendar_form: @@ -961,3 +965,8 @@ class TestUpdateMonthlyByDate(TestRecurrentEvents): (datetime(2019, 6, 11, 16), datetime(2019, 6, 11, 17)), (datetime(2020, 6, 11, 16), datetime(2020, 6, 11, 17)), ]) + # set to custom because a yearly recurrence, becomes a monthly recurrence every 12 months + self.assertEqual(event.rrule_type_ui, 'custom') + self.assertEqual(event.count, 2) + self.assertEqual(event.interval, 12) + self.assertEqual(event.rrule_type, 'monthly')