Projet

Général

Profil

Télécharger (5,65 ko) Statistiques
| Branche: | Tag: | Révision:

calebasse / calebasse / actes / views.py @ a01d85be

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

    
3
import datetime
4

    
5
from django.http import HttpResponseRedirect, HttpResponse
6
from django.db.models import Q
7
from django.shortcuts import redirect
8

    
9
from calebasse.cbv import ListView, UpdateView, DeleteView
10
from calebasse.agenda.views import NewAppointmentView
11
from calebasse.agenda.models import EventWithAct
12
from calebasse.agenda.forms import UpdateAppointmentForm, NewAppointmentForm
13

    
14
import copy
15
import models
16
import forms
17

    
18
def redirect_today(request, service):
19
    '''If not date is given we redirect on the agenda for today'''
20
    return redirect(act_listing, date=datetime.date.today().strftime('%Y-%m-%d'),
21
            service=service)
22

    
23
class ActListingView(ListView):
24
    model = models.Act
25
    template_name = 'actes/act_listing.html'
26

    
27
    def get_queryset(self):
28
        qs = super(ActListingView, self).get_queryset()
29
        qs = qs.filter(patient__service=self.service)
30
        qs = qs.filter(date=self.date)
31
        self.search_form = forms.ActSearchForm(data=self.request.GET or None)
32
        last_name = self.request.GET.get('last_name')
33
        group = self.request.GET.get('group')
34
        patient_record_id = self.request.GET.get('patient_record_id')
35
        social_security_number = self.request.GET.get('social_security_number')
36
        doctor_name = self.request.GET.get('doctor_name')
37
        filters = self.request.GET.getlist('filters')
38
        if last_name:
39
            qs = qs.filter(patient__last_name__istartswith=last_name)
40
        if patient_record_id:
41
            qs = qs.filter(patient__id=int(patient_record_id))
42
        if doctor_name:
43
            qs = qs.filter(doctors__last_name__icontains=doctor_name)
44
        if 'valide' in filters:
45
            qs = qs.exclude(last_validation_state__state_name__exact='VALIDE')
46
        if 'group' in filters:
47
            qs = qs.filter(act_type__group=True)
48
        if 'pointe' in filters:
49
            qs = qs.filter(last_validation_state__isnull=False). \
50
                    exclude(last_validation_state__state_name__exact='NON_VALIDE')
51
        if 'non-pointe' in filters:
52
            qs = qs.filter(Q(last_validation_state__isnull=True) | \
53
                    Q(last_validation_state__state_name__exact='NON_VALIDE'))
54
        if 'absent-or-canceled' in filters:
55
            qs = qs.filter(last_validation_state__state_name__in=('ABS_NON_EXC',
56
                'ABS_EXC', 'ABS_INTER', 'ANNUL_NOUS',
57
                'ANNUL_FAMILLE', 'REPORTE', 'ABS_ESS_PPS', 'ENF_HOSP'))
58
        if 'is-billable' in filters:
59
            qs = qs.filter(
60
                    (Q(act_type__billable=True) & Q(switch_billable=False)) | \
61
                    (Q(act_type__billable=False) & Q(switch_billable=True))
62
                    )
63
        if 'switch-billable' in filters:
64
            qs = qs.filter(switch_billable=True)
65
        if 'lost' in filters:
66
            qs = qs.filter(is_lost=True)
67
        if 'pause-invoicing' in filters:
68
            qs = qs.filter(pause=True)
69
        if 'invoiced' in filters:
70
            qs = qs.filter(is_billed=True)
71

    
72
        return qs.select_related()
73

    
74
    def get_context_data(self, **kwargs):
75
        ctx = super(ActListingView, self).get_context_data(**kwargs)
76
        ctx['search_form'] = self.search_form
77
        self.request.record('acts-view', 'act listing by {user} from {ip}')
78
        return ctx
79

    
80
class NewAct(NewAppointmentView):
81
    success_url = '.'
82
    success_msg = u'Acte enregistré avec succès.'
83
    model = EventWithAct
84
    form_class = UpdateAppointmentForm
85

    
86
    def form_valid(self, form):
87
        result = super(NewAct, self).form_valid(form)
88
        self.object.act.save()
89
        self.request.record('new-act',
90
                            '{obj_id} created by {user} from {ip}',
91
                            obj_id=self.object.id)
92
        return result
93

    
94
act_listing = ActListingView.as_view()
95
act_new = NewAct.as_view()
96

    
97
class DeleteActView(DeleteView):
98
    model = models.Act
99
    template_name = 'actes/confirm_delete.html'
100
    success_url = '..'
101

    
102
    def delete(self, request, *args, **kwargs):
103
        self.object = self.get_object()
104
        if self.object.event:
105
            self.object.event.delete()
106
        if not self.object.is_billed:
107
            self.request.record('act-delete', '{obj_id} deleted by {user} from {ip}',
108
                                obj_id=self.object.id)
109
            self.object.delete()
110

    
111
        return HttpResponse(status=204)
112

    
113
delete_act = DeleteActView.as_view()
114

    
115
class UpdateActView(UpdateView):
116
    model = models.Act
117
    form_class = forms.ActUpdate
118
    template_name = 'actes/act_update.html'
119
    success_url = '..'
120

    
121
    def form_valid(self, form):
122
        result = super(UpdateView, self).form_valid(form)
123
        if self.object.event:
124
            doctors = copy.copy(self.object.doctors.all())
125
            self.object.event.participants =  doctors
126
            self.object.event.act_type =  self.object.act_type
127
            self.object.event.save()
128
            self.request.record('act-update',
129
                                '{obj_id} updated by {user} from {ip} with: {changes}',
130
                                obj_id=self.object.id,
131
                                changes={'participants': doctors, 'act_type': self.object.act_type})
132
        return result
133

    
134
update_act = UpdateActView.as_view()
135

    
136
class RebillActView(UpdateView):
137
    model = models.Act
138
    template_name = 'actes/act_rebill.html'
139
    success_url = '..'
140

    
141
    def post(self, request, *args, **kwarg):
142
        act = models.Act.objects.get(pk=kwarg['pk'])
143
        act.is_billed = False
144
        act.healthcare = None
145
        act.save()
146
        self.request.record('rebill-act', '{obj_id} rebilled by {user} from {ip}', obj_id=act.id)
147
        return super(RebillActView, self).post(request, *args, **kwarg)
148

    
149
rebill_act = RebillActView.as_view()
(9-9/9)