Project

General

Profile

« Previous | Next » 

Revision 5f372104

Added by Jérôme Schneider over 12 years ago

Agenda: add appointments management

  • agenda/appointments.py: add a class to display appointments * agenda/managers.py: add serives maangement to OccurtenceManager * agenda/views.py: small fix * personnes/models.py: cosmetic

View differences:

calebasse/agenda/appointments.py
1

  
2
from calebasse.agenda.models import Occurence
3
from calebasse.personnes.models import TimeTable
4

  
5
class Appointment(object):
6

  
7
    def __init__(self, title=None, begin_hour=None, type=None,
8
            length=None, description=None, room=None, convocation_sent=None,
9
            service_name=None):
10
        """ """
11
        self.title = title
12
        self.begin_hour = begin_hour
13
        self.type = type
14
        self.length = length
15
        self.description = description
16
        self.room = room
17
        self.convocation_sent = None
18
        self.service_name = None
19

  
20
    def load_from_occurence(self, occurence, service):
21
        """ """
22
        delta = occurence.end_time - occurence.start_time
23
        self.length = (delta.hours * 60) + dela.minutes
24
        self.title = occurence.title
25
        self.begin_hour = occurence.start_time.hours
26
        if service in occurence.services:
27
            self.type = "busy-here"
28
        else:
29
            self.type = "busy-elsewhere"
30
            self.service_name = service.name
31
        self.room = occurence.room.name
32
        self.convocation_sent = occurence.convocation_sent
33
        self.description = occurence.description
34

  
35
def get_daily_appointments(date, worker, service):
36
    """
37
    """
38
    weekday_mapping = {
39
            '0': 'dimanche',
40
            '1': 'lundi',
41
            '2': 'mardi',
42
            '3': 'mercredi',
43
            '4': 'jeudi',
44
            '5': 'vendredi'
45
            '6': 'samedi'
46
            }
47
    weekday = weekday_mapping[date.strftime("%w")]
48
    time_tables = TimeTable.objects.filter(worker=worker).\
49
            filter(service=service).\
50
            filter(weekday=weekday).\
51
            filter(start_date__lte=date).\
52
            filter(end_date__gte=date)
53
    occurences = Occurence.objects.daily_occurrences(date, [worker])
54

  
55

  
calebasse/agenda/managers.py
81 81

  
82 82
    #use_for_related_fields = True
83 83

  
84
    def daily_occurrences(self, date=None, participants=None):
84
    def daily_occurrences(self, date, participants=None, services=None):
85 85
        '''
86 86
        Returns a queryset of for instances that have any overlap with a 
87 87
        particular day.
......
110 110
        )
111 111

  
112 112
        if participants:
113
            return qs.filter(event__participants__in=participants)
114
        else:
115
            return qs
113
            qs = qs.filter(event__participants__in=participants)
114
        if services:
115
            qs = qs.filter(services__in=services)
116
        return qs
116 117

  
117 118
    def daily_disponiblity(self, date, participants):
118 119
        start_datetime = datetime(date.year, date.month, date.day, 8, 0)
calebasse/agenda/views.py
31 31
            context['workers_agenda'].append({'worker': worker,
32 32
                    'agenda': Occurrence.objects.daily_occurrences(context['date'], [worker])})
33 33

  
34
        context['disponnibility'] = Occurrence.objects.daily_disponiblity(context['date'], context['workers'])
34
        context['disponnibility'] = Occurrence.objects.daily_disponiblity(context['date'], workers)
35 35
        return context
calebasse/personnes/models.py
26 26
            return self.filter(services__in=[service]).filter(type=type)
27 27
        else:
28 28
            return self.filter(services__in=[service])
29
    
30 29

  
31 30
class Worker(People):
32 31
    objects = WorkerManager()

Also available in: Unified diff