Révision ae79c334
Ajouté par Serghei Mihai il y a presque 10 ans
calebasse/agenda/managers.py | ||
---|---|---|
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): |
Formats disponibles : Unified diff
agenda: overlapping events marked in the availability bars
Closes #4143