summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/calendar/models/calendar_recurrence.py10
-rw-r--r--addons/calendar/tests/test_event_recurrence.py19
2 files changed, 26 insertions, 3 deletions
diff --git a/addons/calendar/models/calendar_recurrence.py b/addons/calendar/models/calendar_recurrence.py
index 6c5edfe839c..b25cdb9a34c 100644
--- a/addons/calendar/models/calendar_recurrence.py
+++ b/addons/calendar/models/calendar_recurrence.py
@@ -345,11 +345,14 @@ class RecurrenceRule(models.Model):
data['end_type'] = 'forever'
return data
+ def _get_lang_week_start(self):
+ lang = self.env['res.lang']._lang_get(self.env.user.lang)
+ week_start = int(lang.week_start) # lang.week_start ranges from '1' to '7'
+ return rrule.weekday(week_start - 1) # rrule expects an int from 0 to 6
+
def _get_start_of_period(self, dt):
if self.rrule_type == 'weekly':
- lang = self.env['res.lang']._lang_get(self.env.user.lang)
- week_start = int(lang.week_start) # lang.week_start ranges from '1' to '7'
- week_start = rrule.weekday(week_start - 1) # expects an int from 0 to 6
+ week_start = self._get_lang_week_start()
start = dt + relativedelta(weekday=week_start(-1))
elif self.rrule_type == 'monthly':
start = dt + relativedelta(day=1)
@@ -461,6 +464,7 @@ class RecurrenceRule(models.Model):
if not weekdays:
raise UserError(_("You have to choose at least one day in the week"))
rrule_params['byweekday'] = weekdays
+ rrule_params['wkst'] = self._get_lang_week_start()
if self.end_type == 'count': # e.g. stop after X occurence
rrule_params['count'] = min(self.count, MAX_RECURRENT_EVENT)
diff --git a/addons/calendar/tests/test_event_recurrence.py b/addons/calendar/tests/test_event_recurrence.py
index c622cdd6a2e..73ef7c67f95 100644
--- a/addons/calendar/tests/test_event_recurrence.py
+++ b/addons/calendar/tests/test_event_recurrence.py
@@ -74,6 +74,25 @@ class TestCreateRecurrentEvents(TestRecurrentEvents):
(datetime(2019, 11, 5, 8, 0), datetime(2019, 11, 7, 18, 0)),
])
+ def test_weekly_interval_2_week_start_sunday(self):
+ lang = self.env['res.lang']._lang_get(self.env.user.lang)
+ lang.week_start = '7' # Sunday
+
+ self.event._apply_recurrence_values({
+ 'interval': 2,
+ 'rrule_type': 'weekly',
+ 'tu': True,
+ 'count': 2,
+ 'event_tz': 'UTC',
+ })
+ recurrence = self.env['calendar.recurrence'].search([('base_event_id', '=', self.event.id)])
+ events = recurrence.calendar_event_ids
+ self.assertEventDates(events, [
+ (datetime(2019, 10, 22, 8, 0), datetime(2019, 10, 24, 18, 0)),
+ (datetime(2019, 11, 5, 8, 0), datetime(2019, 11, 7, 18, 0)),
+ ])
+ lang.week_start = '1' # Monday
+
def test_weekly_until(self):
self.event._apply_recurrence_values({
'rrule_type': 'weekly',