[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:
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user