1.1 --- a/imipweb/data.py Sun Oct 15 01:04:11 2017 +0200
1.2 +++ b/imipweb/data.py Sun Oct 15 01:04:32 2017 +0200
1.3 @@ -28,7 +28,7 @@
1.4 format_datetime, get_datetime, \
1.5 get_datetime_attributes, get_end_of_day, \
1.6 to_date, to_utc_datetime, to_timezone
1.7 -from imiptools.period import RecurringPeriod
1.8 +from imiptools.period import get_overlapping_members, RecurringPeriod
1.9 from itertools import chain
1.10
1.11 # General editing abstractions.
1.12 @@ -239,10 +239,11 @@
1.13 """
1.14
1.15 self.state["period_errors"] = errors = {}
1.16 +
1.17 + # Basic validation.
1.18 +
1.19 try:
1.20 periods = event_periods_from_periods(self.state.get("periods"))
1.21 - self.state["periods"] = form_periods_from_periods(periods)
1.22 - return periods
1.23
1.24 except PeriodError, exc:
1.25
1.26 @@ -256,6 +257,21 @@
1.27 l.append(err)
1.28 raise
1.29
1.30 + # Check for overlapping periods.
1.31 +
1.32 + overlapping = get_overlapping_members(periods)
1.33 +
1.34 + for period in overlapping:
1.35 + for index, p in enumerate(periods):
1.36 + if period is p:
1.37 + errors[index] = ["overlap"]
1.38 +
1.39 + if overlapping:
1.40 + raise PeriodError
1.41 +
1.42 + self.state["periods"] = form_periods_from_periods(periods)
1.43 + return periods
1.44 +
1.45 # Update result computation.
1.46
1.47 def classify_attendee_changes(self):