From f266856be424b9967dd8036f5db6a4ace1db075b Mon Sep 17 00:00:00 2001 From: Natalia Juszka Date: Mon, 13 Nov 2017 12:26:07 +0100 Subject: [PATCH] Check if last day of month when cloning an event --- .../events/management/controllers/cloning.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/indico/modules/events/management/controllers/cloning.py b/indico/modules/events/management/controllers/cloning.py index 0472d3756aa..d69949c65e7 100644 --- a/indico/modules/events/management/controllers/cloning.py +++ b/indico/modules/events/management/controllers/cloning.py @@ -17,7 +17,7 @@ from __future__ import unicode_literals from collections import OrderedDict -from datetime import datetime +from datetime import datetime, timedelta from dateutil import rrule from flask import flash, jsonify, request, session @@ -111,9 +111,17 @@ class IntervalCloneCalculator(CloneCalculator): form_class = CloneRepeatIntervalForm def _calculate(self, form): - args = {'dtstart': self._naivify(form.start_dt.data)} - args.update(self._calc_stop_criteria(form)) freq, interval = relativedelta_to_rrule_interval(form.recurrence.data) + # check if last day of month + dtstart = self._naivify(form.start_dt.data) + next_day = dtstart + timedelta(days=1) + if freq == rrule.MONTHLY and next_day.day == 1: + args = {'dtstart': next_day} + args.update(self._calc_stop_criteria(form)) + dates = rrule.rrule(freq, interval=interval, **args) + return self._tzify([date - timedelta(days=1) for date in dates]) + args = {'dtstart': dtstart} + args.update(self._calc_stop_criteria(form)) return self._tzify(rrule.rrule(freq, interval=interval, **args))