1.1 --- a/imipweb/event.py Wed Sep 13 00:09:24 2017 +0200
1.2 +++ b/imipweb/event.py Wed Sep 13 00:21:06 2017 +0200
1.3 @@ -25,7 +25,7 @@
1.4 from imiptools.mail import Messenger
1.5 from imipweb.data import EventPeriod, event_period_from_period, \
1.6 filter_duplicates, get_active_periods, \
1.7 - remove_from_collection, \
1.8 + get_removed_periods, remove_from_collection, \
1.9 get_period_control_values, set_period_control_values, \
1.10 PeriodError
1.11 from imipweb.resource import DateTimeFormUtilities, FormUtilities, ResourceClientForObject
1.12 @@ -1045,38 +1045,21 @@
1.13 excluded).
1.14 """
1.15
1.16 - args = self.env.get_args()
1.17 + # Get remaining periods and those whose removal is deferred.
1.18 +
1.19 + remaining, to_remove = get_removed_periods(periods,
1.20 + self.env.get_args().get("recur-remove", []))
1.21 +
1.22 + # Sort the deferred removal periods into categories.
1.23 +
1.24 to_unschedule = set()
1.25 to_exclude = set()
1.26
1.27 - # Get all periods that are not replaced.
1.28 -
1.29 - active_periods = get_active_periods(periods)
1.30 -
1.31 - for i in args.get("recur-remove", []):
1.32 - try:
1.33 - period = periods[int(i)]
1.34 - except (IndexError, ValueError):
1.35 - continue
1.36 -
1.37 - active_periods[period] -= 1
1.38 -
1.39 + for period in to_remove:
1.40 if not self.can_edit_recurrence(period) and self.is_organiser():
1.41 - l = to_unschedule
1.42 + to_unschedule.add(period)
1.43 else:
1.44 - l = to_exclude
1.45 -
1.46 - l.add(period)
1.47 -
1.48 - # Determine whether some periods are both removed and added.
1.49 -
1.50 - remaining = []
1.51 - for period, n in active_periods.items():
1.52 - if n > 0:
1.53 - remaining.append(period)
1.54 -
1.55 - to_unschedule.difference_update(remaining)
1.56 - to_exclude.difference_update(remaining)
1.57 + to_exclude.add(period)
1.58
1.59 return remaining, to_unschedule, to_exclude
1.60