[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
This commit is contained in:
Leonardo Pavan Rocha
2023-11-04 00:38:21 +00:00
parent f2579aa30c
commit df62b58341
2 changed files with 11 additions and 1 deletions
+2 -1
View File
@@ -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)
@@ -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')