78 |
78 |
quarter = 0
|
79 |
79 |
interval = IntervalSet.between(start_datetime, end_datetime, False)
|
80 |
80 |
mins = quarter * 15
|
81 |
|
crossed_events = filter(lambda e: e.start_datetime <= start_datetime and e.end_datetime >= end_datetime, events)
|
|
81 |
crossed_events = self.overlap_occurences(start_datetime, events)
|
82 |
82 |
if len(crossed_events) > 1:
|
83 |
|
result[start_datetime.hour][quarter].append((mins, {'id': participant.id, 'dispo': 'common'}))
|
|
83 |
result[start_datetime.hour][quarter].append((mins, {'id': participant.id, 'dispo': 'overlap'}))
|
84 |
84 |
elif interval.intersection(events_intervals):
|
85 |
85 |
result[start_datetime.hour][quarter].append((mins, {'id': participant.id, 'dispo': 'busy'}))
|
86 |
86 |
elif interval.intersection(holidays_intervals):
|
... | ... | |
94 |
94 |
end_datetime += timedelta(minutes=15)
|
95 |
95 |
return result
|
96 |
96 |
|
|
97 |
def overlap_occurences(self, date_time=None, events=None):
|
|
98 |
"""
|
|
99 |
returns the list of overlapping event occurences which do not begin and end
|
|
100 |
at the same time and have the same act type
|
|
101 |
"""
|
|
102 |
date_time = date_time or datetime.now()
|
|
103 |
events = events or self.today_occurrences(date_time.date())
|
|
104 |
overlap = filter(lambda e: e.start_datetime <= date_time and e.end_datetime > date_time, events)
|
|
105 |
same_type_events = []
|
|
106 |
different_overlap = []
|
|
107 |
for event in overlap:
|
|
108 |
if different_overlap:
|
|
109 |
for e in different_overlap:
|
|
110 |
if event.start_datetime == e.start_datetime and \
|
|
111 |
event.end_datetime == e.end_datetime and \
|
|
112 |
event.act_type == e.act_type:
|
|
113 |
continue
|
|
114 |
different_overlap.append(event)
|
|
115 |
else:
|
|
116 |
different_overlap.append(event)
|
|
117 |
return different_overlap
|
|
118 |
|
97 |
119 |
|
98 |
120 |
class EventManager(PassThroughManager.for_queryset_class(EventQuerySet),
|
99 |
121 |
InheritanceManager):
|
agenda: overlapping events marked in the availability bars
Closes #4143