Projet

Général

Profil

Télécharger (4,72 ko) Statistiques
| Branche: | Tag: | Révision:

calebasse / calebasse / actes / views.py @ 9b1f1c3a

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

    
12
import copy
13
import models
14
import forms
15

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

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

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

    
70
        return qs.select_related()
71

    
72
    def get_context_data(self, **kwargs):
73
        ctx = super(ActListingView, self).get_context_data(**kwargs)
74
        ctx['search_form'] = self.search_form
75
        return ctx
76

    
77
class NewAct(NewAppointmentView):
78
    success_url = '.'
79
    success_msg = u'Acte enregistré avec succès.'
80

    
81
    def form_valid(self, form):
82
        result = super(NewAct, self).form_valid(form)
83
        self.object.act.save()
84
        return result
85

    
86
act_listing = ActListingView.as_view()
87
act_new = NewAct.as_view()
88

    
89
class DeleteActView(DeleteView):
90
    model = models.Act
91
    template_name = 'actes/confirm_delete.html'
92
    success_url = '..'
93

    
94
    def delete(self, request, *args, **kwargs):
95
        self.object = self.get_object()
96
        if self.object.event:
97
            self.object.event.delete()
98
        if not self.object.is_billed:
99
            self.object.delete()
100

    
101
        return HttpResponse(status=204)
102

    
103
delete_act = DeleteActView.as_view()
104

    
105
class UpdateActView(UpdateView):
106
    model = models.Act
107
    form_class = forms.ActUpdate
108
    template_name = 'actes/act_update.html'
109
    success_url = '..'
110

    
111
    def form_valid(self, form):
112
        result = super(UpdateView, self).form_valid(form)
113
        if self.object.event:
114
            doctors = copy.copy(self.object.doctors.all())
115
            self.object.event.participants =  doctors
116
            self.object.event.act_type =  self.object.act_type
117
            self.object.event.save()
118
        return result
119

    
120
update_act = UpdateActView.as_view()
121

    
122
class RebillActView(UpdateView):
123
    model = models.Act
124
    template_name = 'actes/act_rebill.html'
125
    success_url = '..'
126

    
127
    def post(self, request, *args, **kwarg):
128
        act = models.Act.objects.get(pk=kwarg['pk'])
129
        act.is_billed = False
130
        act.healthcare = None
131
        act.save()
132
        return super(RebillActView, self).post(request, *args, **kwarg)
133

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