summaryrefslogtreecommitdiff
path: root/addons/calendar/models
diff options
context:
space:
mode:
authorNasreddin (bon) <bon@odoo.com>2021-02-16 12:47:21 +0000
committerNasreddin (bon) <bon@odoo.com>2021-02-16 14:24:44 +0000
commit5e85ee521edb70d4d2c7cdbf59c29794a8cd98b9 (patch)
tree6596a662029f4d96c3cb2b8fca1eaae08fd827de /addons/calendar/models
parent261bf437e806fbf105597b66464c3a697e17e4d1 (diff)
[FIX] calendar: Add start week day to weekly recurrence rrule generator + unit test
Issue - Install 'Calendar' module - Create new event from Calendar view - Edit event - Set True to 'Recurrent' in options tab - Repeat every 2 weeks - Until : Number of repetitions 2 - Save and go back to calendar view - Events are shifted (+ 1 week) Cause The rrule.rrule (who create the generator with the recurrence ranges dates) use by default `calendar.firstweekday()` as first week day ('wkst'). Solution If recurrence frequency is 'weekly', get first week day based on user language, and add it as param ('wkst') to the rrule.rrule. https://dateutil.readthedocs.io/en/stable/rrule.html#classes opw-2448325 closes odoo/odoo#66265 Signed-off-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: LucasLefevre (lul) <lul@odoo.com>
Diffstat (limited to 'addons/calendar/models')
-rw-r--r--addons/calendar/models/calendar_recurrence.py10
1 files changed, 7 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)