diff options
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/calendar/models/calendar_recurrence.py | 10 | ||||
| -rw-r--r-- | addons/calendar/tests/test_event_recurrence.py | 19 |
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', |
