1 |
f2ac4430
|
Jérôme Schneider
|
# -*- coding: utf-8 -*-
|
2 |
|
|
|
3 |
d7c741db
|
Benjamin Dauvergne
|
import datetime
|
4 |
|
|
|
5 |
40cdcb8b
|
Jérôme Schneider
|
from django.http import HttpResponseRedirect, HttpResponse
|
6 |
8416b9da
|
Jérôme Schneider
|
from django.db.models import Q
|
7 |
d7c741db
|
Benjamin Dauvergne
|
from django.shortcuts import redirect
|
8 |
|
|
|
9 |
3c5df84d
|
Jérôme Schneider
|
from calebasse.cbv import ListView, UpdateView, DeleteView
|
10 |
7cd2f6fb
|
Jérôme Schneider
|
from calebasse.agenda.views import NewAppointmentView
|
11 |
d3cfbd19
|
Serghei MIHAI
|
from calebasse.agenda.models import EventWithAct
|
12 |
|
|
from calebasse.agenda.forms import UpdateAppointmentForm, NewAppointmentForm
|
13 |
d7c741db
|
Benjamin Dauvergne
|
|
14 |
c5614b87
|
Jérôme Schneider
|
import copy
|
15 |
d7c741db
|
Benjamin Dauvergne
|
import models
|
16 |
7d7d5da8
|
Benjamin Dauvergne
|
import forms
|
17 |
d7c741db
|
Benjamin Dauvergne
|
|
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 |
3c5df84d
|
Jérôme Schneider
|
model = models.Act
|
25 |
|
|
template_name = 'actes/act_listing.html'
|
26 |
d7c741db
|
Benjamin Dauvergne
|
|
27 |
|
|
def get_queryset(self):
|
28 |
|
|
qs = super(ActListingView, self).get_queryset()
|
29 |
76974b6f
|
Benjamin Dauvergne
|
qs = qs.filter(patient__service=self.service)
|
30 |
7d7d5da8
|
Benjamin Dauvergne
|
qs = qs.filter(date=self.date)
|
31 |
36dd6ab2
|
Jérôme Schneider
|
self.search_form = forms.ActSearchForm(data=self.request.GET or None)
|
32 |
|
|
last_name = self.request.GET.get('last_name')
|
33 |
9b1f1c3a
|
Serghei MIHAI
|
group = self.request.GET.get('group')
|
34 |
36dd6ab2
|
Jérôme Schneider
|
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 |
8416b9da
|
Jérôme Schneider
|
if 'valide' in filters:
|
45 |
981abc28
|
Jérôme Schneider
|
qs = qs.exclude(last_validation_state__state_name__exact='VALIDE')
|
46 |
9b1f1c3a
|
Serghei MIHAI
|
if 'group' in filters:
|
47 |
|
|
qs = qs.filter(act_type__group=True)
|
48 |
981abc28
|
Jérôme Schneider
|
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 |
567c18f5
|
Jérôme Schneider
|
if 'absent-or-canceled' in filters:
|
55 |
981abc28
|
Jérôme Schneider
|
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 |
8416b9da
|
Jérôme Schneider
|
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 |
567c18f5
|
Jérôme Schneider
|
if 'switch-billable' in filters:
|
64 |
|
|
qs = qs.filter(switch_billable=True)
|
65 |
36dd6ab2
|
Jérôme Schneider
|
if 'lost' in filters:
|
66 |
|
|
qs = qs.filter(is_lost=True)
|
67 |
8416b9da
|
Jérôme Schneider
|
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 |
567c18f5
|
Jérôme Schneider
|
return qs.select_related()
|
73 |
d7c741db
|
Benjamin Dauvergne
|
|
74 |
7d7d5da8
|
Benjamin Dauvergne
|
def get_context_data(self, **kwargs):
|
75 |
|
|
ctx = super(ActListingView, self).get_context_data(**kwargs)
|
76 |
|
|
ctx['search_form'] = self.search_form
|
77 |
a01d85be
|
Serghei MIHAI
|
self.request.record('acts-view', 'act listing by {user} from {ip}')
|
78 |
7d7d5da8
|
Benjamin Dauvergne
|
return ctx
|
79 |
|
|
|
80 |
b9ed3c11
|
Jérôme Schneider
|
class NewAct(NewAppointmentView):
|
81 |
|
|
success_url = '.'
|
82 |
f2ac4430
|
Jérôme Schneider
|
success_msg = u'Acte enregistré avec succès.'
|
83 |
d3cfbd19
|
Serghei MIHAI
|
model = EventWithAct
|
84 |
|
|
form_class = UpdateAppointmentForm
|
85 |
b9ed3c11
|
Jérôme Schneider
|
|
86 |
|
|
def form_valid(self, form):
|
87 |
f2ac4430
|
Jérôme Schneider
|
result = super(NewAct, self).form_valid(form)
|
88 |
b9ed3c11
|
Jérôme Schneider
|
self.object.act.save()
|
89 |
f2ac4430
|
Jérôme Schneider
|
return result
|
90 |
b9ed3c11
|
Jérôme Schneider
|
|
91 |
d7c741db
|
Benjamin Dauvergne
|
act_listing = ActListingView.as_view()
|
92 |
b9ed3c11
|
Jérôme Schneider
|
act_new = NewAct.as_view()
|
93 |
8416b9da
|
Jérôme Schneider
|
|
94 |
40cdcb8b
|
Jérôme Schneider
|
class DeleteActView(DeleteView):
|
95 |
|
|
model = models.Act
|
96 |
|
|
template_name = 'actes/confirm_delete.html'
|
97 |
|
|
success_url = '..'
|
98 |
|
|
|
99 |
|
|
def delete(self, request, *args, **kwargs):
|
100 |
|
|
self.object = self.get_object()
|
101 |
|
|
if self.object.event:
|
102 |
|
|
self.object.event.delete()
|
103 |
|
|
if not self.object.is_billed:
|
104 |
|
|
self.object.delete()
|
105 |
|
|
|
106 |
|
|
return HttpResponse(status=204)
|
107 |
|
|
|
108 |
|
|
delete_act = DeleteActView.as_view()
|
109 |
|
|
|
110 |
eb086941
|
Jérôme Schneider
|
class UpdateActView(UpdateView):
|
111 |
|
|
model = models.Act
|
112 |
|
|
form_class = forms.ActUpdate
|
113 |
|
|
template_name = 'actes/act_update.html'
|
114 |
|
|
success_url = '..'
|
115 |
|
|
|
116 |
c5614b87
|
Jérôme Schneider
|
def form_valid(self, form):
|
117 |
95a3734b
|
Frédéric Péters
|
result = super(UpdateActView, self).form_valid(form)
|
118 |
c5614b87
|
Jérôme Schneider
|
if self.object.event:
|
119 |
|
|
doctors = copy.copy(self.object.doctors.all())
|
120 |
|
|
self.object.event.participants = doctors
|
121 |
076f8c7d
|
Mikaël Ates
|
self.object.event.act_type = self.object.act_type
|
122 |
|
|
self.object.event.save()
|
123 |
a01d85be
|
Serghei MIHAI
|
self.request.record('act-update',
|
124 |
|
|
'{obj_id} updated by {user} from {ip} with: {changes}',
|
125 |
|
|
obj_id=self.object.id,
|
126 |
|
|
changes={'participants': doctors, 'act_type': self.object.act_type})
|
127 |
c5614b87
|
Jérôme Schneider
|
return result
|
128 |
|
|
|
129 |
eb086941
|
Jérôme Schneider
|
update_act = UpdateActView.as_view()
|
130 |
|
|
|
131 |
52829527
|
Mikaël Ates
|
class RebillActView(UpdateView):
|
132 |
|
|
model = models.Act
|
133 |
|
|
template_name = 'actes/act_rebill.html'
|
134 |
|
|
success_url = '..'
|
135 |
|
|
|
136 |
|
|
def post(self, request, *args, **kwarg):
|
137 |
|
|
act = models.Act.objects.get(pk=kwarg['pk'])
|
138 |
|
|
act.is_billed = False
|
139 |
|
|
act.healthcare = None
|
140 |
|
|
act.save()
|
141 |
a01d85be
|
Serghei MIHAI
|
self.request.record('rebill-act', '{obj_id} rebilled by {user} from {ip}', obj_id=act.id)
|
142 |
52829527
|
Mikaël Ates
|
return super(RebillActView, self).post(request, *args, **kwarg)
|
143 |
|
|
|
144 |
|
|
rebill_act = RebillActView.as_view()
|