summaryrefslogtreecommitdiff
path: root/addons/project/models
diff options
context:
space:
mode:
authorVictor Feyens <vfe@odoo.com>2020-12-17 10:54:53 +0000
committerVictor Feyens <vfe@odoo.com>2020-12-17 11:17:25 +0000
commite7be857bea964628b80d4d3c1314dc231e0da947 (patch)
treeb6d0b8b0de189700a2f4406f441b2571fa49487d /addons/project/models
parent893a3e63101fcbaad34b915c84cbf0f148ad8cc8 (diff)
[FIX] project: fix infinite recurring tasks creation
For recurrences of repeat_type = 'after', the daily cron would create tasks infinitely. * The cron creates recurring task for all recurrences for which next_recurrence_date < today. * next_recurrence_date was never updated. This commit ensures that next_recurrence_date is set to False for repeat_type = 'after' recurrences, when the last recurrence is created.
Diffstat (limited to 'addons/project/models')
-rw-r--r--addons/project/models/project_task_recurrence.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/addons/project/models/project_task_recurrence.py b/addons/project/models/project_task_recurrence.py
index c997b2c1d16..14be6ca224c 100644
--- a/addons/project/models/project_task_recurrence.py
+++ b/addons/project/models/project_task_recurrence.py
@@ -226,10 +226,19 @@ class ProjectTaskRecurrence(models.Model):
def _set_next_recurrence_date(self):
today = fields.Date.today()
tomorrow = today + relativedelta(days=1)
- for recurrence in self.filtered(lambda r: r.repeat_type == 'after' and r.recurrence_left > 0 or r.repeat_type == 'until' and r.repeat_until >= today or r.repeat_type == 'forever'):
- next_date = self._get_next_recurring_dates(tomorrow, recurrence.repeat_interval, recurrence.repeat_unit, recurrence.repeat_type, recurrence.repeat_until, recurrence.repeat_on_month, recurrence.repeat_on_year, recurrence._get_weekdays(), recurrence.repeat_day, recurrence.repeat_week, recurrence.repeat_month, count=1)
- recurrence.next_recurrence_date = next_date[0] if next_date else False
+ for recurrence in self.filtered(
+ lambda r:
+ r.repeat_type == 'after' and r.recurrence_left >= 0
+ or r.repeat_type == 'until' and r.repeat_until >= today
+ or r.repeat_type == 'forever'
+ ):
+ if recurrence.repeat_type == 'after' and recurrence.recurrence_left == 0:
+ recurrence.next_recurrence_date = False
+ else:
+ next_date = self._get_next_recurring_dates(tomorrow, recurrence.repeat_interval, recurrence.repeat_unit, recurrence.repeat_type, recurrence.repeat_until, recurrence.repeat_on_month, recurrence.repeat_on_year, recurrence._get_weekdays(), recurrence.repeat_day, recurrence.repeat_week, recurrence.repeat_month, count=1)
+ recurrence.next_recurrence_date = next_date[0] if next_date else False
+ @api.model
def _cron_create_recurring_tasks(self):
if not self.env.user.has_group('project.group_project_recurring_tasks'):
return