Project

General

Profile

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

calebasse / calebasse / agenda / forms.py @ 36d6d03e

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
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 NewEventForm(forms.ModelForm):
79

    
80
    date = forms.DateField(label=u'Date')
81
    time = forms.TimeField(label=u'Heure de début')
82
    duration = forms.CharField(label=u'Durée',
83
            help_text=u'en minutes; vous pouvez utiliser la roulette de votre souris.')
84
    participants = make_ajax_field(EventAct, 'participants', 'worker', True)
85

    
86
    class Meta:
87
        model = Event
88
        fields = (
89
                'title',
90
                'date',
91
                'time',
92
                'duration',
93
                'room',
94
                'participants',
95
                'services',
96
                'event_type'
97
        )
98

    
99
    def __init__(self, instance, **kwargs):
100
        super(NewEventForm, self).__init__(instance=instance, **kwargs)
101
        self.fields['date'].css = 'datepicker'
102

    
103
    def clean_duration(self):
104
        duration = self.cleaned_data['duration']
105
        try:
106
            return int(duration)
107
        except:
108
            return None
109

    
110
    def save(self, commit=False):
111
        start_datetime = datetime.combine(self.cleaned_data['date'],
112
                    self.cleaned_data['time'])
113
        end_datetime = start_datetime + timedelta(
114
                minutes=self.cleaned_data['duration'])
115
        self.instance = Event.objects.create_event(
116
                title=self.cleaned_data['title'],
117
                event_type=self.cleaned_data['event_type'],
118
                participants=self.cleaned_data['participants'],
119
                services=self.cleaned_data['services'],
120
                start_datetime=start_datetime,
121
                end_datetime=end_datetime,
122
                description='',
123
                room=self.cleaned_data['room'],
124
                note=None,)
125
        return self.instance
126

    
(5-5/10)