Project

General

Profile

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

calebasse / calebasse / agenda / forms.py @ c8d74e1a

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
    time = forms.TimeField(label=u'Heure de début')
18
    duration = forms.CharField(label=u'Durée',
19
            help_text=u'en minutes; vous pouvez utiliser la roulette de votre souris.')
20

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

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

    
36

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

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

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

    
78
class UpdateAppointmentForm(NewAppointmentForm):
79

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

    
84

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

    
99

    
100
class NewEventForm(forms.ModelForm):
101

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

    
108
    class Meta:
109
        model = Event
110
        fields = (
111
                'title',
112
                'date',
113
                'time',
114
                'duration',
115
                'room',
116
                'participants',
117
                'services',
118
                'event_type'
119
        )
120

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

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

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

    
152
class UpdateEventForm(NewEventForm):
153

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

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

    
(5-5/10)