From dfc853aaadc8edacd4a198e8a8836400ef43bbee Mon Sep 17 00:00:00 2001 From: "Nasreddin Boulif (bon)" Date: Tue, 31 Aug 2021 12:43:34 +0000 Subject: [PATCH] [FIX] project: Calculate the right task next occurrences dates Steps to reproduce: - Install "Field Service" module - Go to settings and activate "Recurring Tasks" - Go to Field Service -> All tasks and create new one - Set for Planned Date : 10/01/2021 14:00 -> 10/02/2021 14:30 - Check Recurrent and go to Recurrence tab - Select repeat every 1 weeks - Select Monday Issue: Wrong date for next occurrences (first occurrence is 09/06 instead of 10/04). Cause: Calculation based on today date. Solution: Calculate next occurrences based on planned_start_date if set. opw-2628777 closes odoo/odoo#76092 X-original-commit: 86060f9426eef6516db6dda7829ae17050f0fcc3 Related: odoo/enterprise#20659 Signed-off-by: LTU-Odoo Signed-off-by: bon-odoo --- addons/project/models/project.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/project/models/project.py b/addons/project/models/project.py index 9f94bf60ac4..76c8fd22e56 100644 --- a/addons/project/models/project.py +++ b/addons/project/models/project.py @@ -1218,6 +1218,9 @@ class Task(models.Model): return [fn(n) for day, fn in DAYS.items() if self[day]] return [DAYS.get(self.repeat_weekday)(n)] + def _get_recurrence_start_date(self): + return fields.Date.today() + @api.depends( 'recurring_task', 'repeat_interval', 'repeat_unit', 'repeat_type', 'repeat_until', 'repeat_number', 'repeat_on_month', 'repeat_on_year', 'mon', 'tue', 'wed', 'thu', 'fri', @@ -1225,7 +1228,7 @@ class Task(models.Model): def _compute_recurrence_message(self): self.recurrence_message = False for task in self.filtered(lambda t: t.recurring_task and t._is_recurrence_valid()): - date = fields.Date.today() + date = self._get_recurrence_start_date() recurrence_left = task.recurrence_id.recurrence_left if task.recurrence_id else task.repeat_number number_occurrences = min(5, recurrence_left if task.repeat_type == 'after' else 5) delta = task.repeat_interval if task.repeat_unit == 'day' else 1