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):
calebasse/agenda/views.py
630 630

  
631 631
            if events:
632 632
                for event in events:
633
                    if event.start_datetime <= start_datetime and event.end_datetime >= end_datetime:
633
                    overlap_events = Event.objects.overlap_occurences(start_datetime, events)
634
                    if len(overlap_events) > 1:
635
                        dispo = 'overlap'
636
                    elif event.start_datetime <= start_datetime and event.end_datetime >= end_datetime:
634 637
                        dispo = 'busy'
635
                        crossed_events = filter(lambda e: e.start_datetime <= start_datetime and e.end_datetime >= end_datetime, events)
636
                        if len(crossed_events) > 1:
637
                            dispo = 'common'
638 638
                disponibility[start_datetime.hour][quarter].append((mins, {'id': ressource_id, 'dispo': dispo}))
639 639
            quarter += 1
640 640
            start_datetime += datetime.timedelta(minutes=15)
calebasse/static/css/agenda.css
178 178
    background: #ccc;
179 179
}
180 180

  
181
li.common {
181
li.overlap {
182 182
    background: #d500a5;
183 183
}
184 184

  

Formats disponibles : Unified diff