Projet

Général

Profil

« Précédent | Suivant » 

Révision ae79c334

Ajouté par Serghei Mihai il y a presque 10 ans

agenda: overlapping events marked in the availability bars

Closes #4143

Voir les différences:

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