Project

General

Profile

Download (6.13 KB) Statistics
| Branch: | Tag: | Revision:

calebasse / calebasse / agenda / forms.py @ 72dbfaca

1
# -*- coding: utf-8 -*-
2

    
3
from datetime import datetime, timedelta
4

    
5
from django import forms
6

    
7
from calebasse.dossiers.models import PatientRecord
8
from calebasse.personnes.models import Worker
9
from calebasse.actes.models import EventAct
10
from calebasse.agenda.models import Event, EventType
11
from calebasse.ressources.models import ActType
12
from calebasse.middleware.request import get_request
13

    
14
from ajax_select import make_ajax_field
15

    
16
class NewAppointmentForm(forms.ModelForm):
17
    date = forms.DateField(label=u'Date')
18
    time = forms.TimeField(label=u'Heure de début')
19
    duration = forms.CharField(label=u'Durée',
20
            help_text=u'en minutes; vous pouvez utiliser la roulette de votre souris.')
21

    
22
    participants = make_ajax_field(EventAct, 'participants', 'worker', True)
23
    patient = make_ajax_field(EventAct, 'patient', 'patientrecord', False)
24

    
25
    class Meta:
26
        model = EventAct
27
        fields = (
28
                'date',
29
                'time',
30
                'duration',
31
                'patient',
32
                'participants',
33
                'room',
34
                'act_type',
35
        )
36

    
37

    
38
    def __init__(self, instance, service=None, **kwargs):
39
        self.service = None
40
        super(NewAppointmentForm, self).__init__(instance=instance, **kwargs)
41
        self.fields['date'].css = 'datepicker'
42
        if service:
43
            self.service = service
44
            self.fields['participants'].queryset = \
45
                    Worker.objects.for_service(service)
46
            self.fields['patient'].queryset = \
47
                    PatientRecord.objects.for_service(service)
48
            self.fields['act_type'].queryset = \
49
                    ActType.objects.for_service(service)
50

    
51
    def clean_duration(self):
52
        duration = self.cleaned_data['duration']
53
        try:
54
            return int(duration)
55
        except:
56
            return None
57

    
58
    def save(self, commit=False):
59
        start_datetime = datetime.combine(self.cleaned_data['date'],
60
                    self.cleaned_data['time'])
61
        end_datetime = start_datetime + timedelta(
62
                minutes=self.cleaned_data['duration'])
63
        patient = self.cleaned_data['patient']
64
        creator = get_request().user
65
        self.instance = EventAct.objects.create_patient_appointment(
66
                creator=creator,
67
                title=patient.display_name,
68
                patient=patient,
69
                participants=self.cleaned_data['participants'],
70
                act_type=self.cleaned_data['act_type'],
71
                service=self.service,
72
                start_datetime=start_datetime,
73
                end_datetime=end_datetime,
74
                description='',
75
                room=self.cleaned_data['room'],
76
                note=None,)
77
        return self.instance
78

    
79
class UpdateAppointmentForm(NewAppointmentForm):
80

    
81
    def __init__(self, instance, service=None, occurrence=None, **kwargs):
82
        super(UpdateAppointmentForm, self).__init__(instance=instance, **kwargs)
83
        self.occurrence = occurrence
84

    
85

    
86
    def save(self):
87
        self.occurrence.start_time = datetime.combine(
88
                self.cleaned_data['date'],
89
                self.cleaned_data['time'])
90
        self.occurrence.end_time = self.occurrence.start_time + timedelta(
91
                minutes=self.cleaned_data['duration'])
92
        self.occurrence.save()
93
        patient = self.cleaned_data['patient']
94
        creator = get_request().user
95
        self.instance.title = patient.display_name
96
        self.instance.participants = self.cleaned_data['participants']
97
        self.instance.save()
98
        return self.instance
99

    
100

    
101
class NewEventForm(forms.ModelForm):
102

    
103
    date = forms.DateField(label=u'Date')
104
    time = forms.TimeField(label=u'Heure de début')
105
    duration = forms.CharField(label=u'Durée',
106
            help_text=u'en minutes; vous pouvez utiliser la roulette de votre souris.')
107
    participants = make_ajax_field(EventAct, 'participants', 'worker', True)
108

    
109
    class Meta:
110
        model = Event
111
        widgets = {'services': forms.CheckboxSelectMultiple}
112
        fields = (
113
                'title',
114
                'date',
115
                'time',
116
                'duration',
117
                'room',
118
                'participants',
119
                'services',
120
                'event_type'
121
        )
122

    
123
    def __init__(self, instance, **kwargs):
124
        super(NewEventForm, self).__init__(instance=instance, **kwargs)
125
        self.fields['date'].css = 'datepicker'
126
        self.fields['event_type'].queryset = \
127
                    EventType.objects.exclude(id=1).exclude(id=3)
128

    
129
    def clean_duration(self):
130
        duration = self.cleaned_data['duration']
131
        try:
132
            return int(duration)
133
        except:
134
            return None
135

    
136
    def save(self, commit=False):
137
        start_datetime = datetime.combine(self.cleaned_data['date'],
138
                    self.cleaned_data['time'])
139
        end_datetime = start_datetime + timedelta(
140
                minutes=self.cleaned_data['duration'])
141
        self.instance = Event.objects.create_event(
142
                title=self.cleaned_data['title'],
143
                event_type=self.cleaned_data['event_type'],
144
                participants=self.cleaned_data['participants'],
145
                services=self.cleaned_data['services'],
146
                start_datetime=start_datetime,
147
                end_datetime=end_datetime,
148
                description='',
149
                room=self.cleaned_data['room'],
150
                note=None,)
151
        return self.instance
152

    
153
class UpdateEventForm(NewEventForm):
154

    
155
    def __init__(self, instance, occurrence=None, **kwargs):
156
        super(UpdateEventForm, self).__init__(instance=instance, **kwargs)
157
        self.occurrence = occurrence
158

    
159
    def save(self):
160
        self.occurrence.start_time = datetime.combine(
161
                self.cleaned_data['date'],
162
                self.cleaned_data['time'])
163
        self.occurrence.end_time = self.occurrence.start_time + timedelta(
164
                minutes=self.cleaned_data['duration'])
165
        self.occurrence.save()
166
        creator = get_request().user
167
        self.instance.participants = self.cleaned_data['participants']
168
        self.instance.services = self.cleaned_data['services']
169
        self.instance.save()
170
        return self.instance
171

    
(5-5/10)