Revision b16a4439
Added by Mikaël Ates over 11 years ago
calebasse/statistics/statistics.py | ||
---|---|---|
27 | 27 |
if not (statistic.in_start_date and statistic.in_end_date |
28 | 28 |
and statistic.in_service): |
29 | 29 |
return None |
30 |
data_tables = [] |
|
30 | 31 |
data = [] |
31 |
data.append(['Intervenants', 'Patients']) |
|
32 |
data.append(['Intervenants', 'Nombre', 'Patients'])
|
|
32 | 33 |
values = [] |
33 | 34 |
# Get all acts in the period with a patient in the service |
34 | 35 |
# Make a dic with intervene for keys |
... | ... | |
47 | 48 |
for intervene in act.doctors.all(): |
48 | 49 |
if statistic.in_participants: |
49 | 50 |
if intervene in statistic.in_participants: |
50 |
analyse.setdefault(intervene, []).append(act.patient)
|
|
51 |
analyse.setdefault(intervene, []).append(str(act.patient))
|
|
51 | 52 |
else: |
52 |
analyse.setdefault(intervene, []).append(act.patient)
|
|
53 |
analyse.setdefault(intervene, []).append(str(act.patient))
|
|
53 | 54 |
o_analyse = OrderedDict(sorted(analyse.items(), key=lambda t: t[0])) |
54 | 55 |
for intervene, patients in o_analyse.iteritems(): |
55 |
values.append([intervene, list(set(patients))]) |
|
56 |
lst = list(set(patients)) |
|
57 |
values.append([str(intervene), len(lst), lst]) |
|
56 | 58 |
data.append(values) |
57 |
return data |
|
58 |
|
|
59 |
def render_to_csv(data): |
|
60 |
with tempfile.NamedTemporaryFile(delete=False) as temp_out_csv: |
|
61 |
try: |
|
62 |
writer = csv.writer(temp_out_csv, delimiter=';', quotechar='|', |
|
63 |
quoting=csv.QUOTE_MINIMAL) |
|
64 |
writer.writerow(data[0]) |
|
65 |
for d in data[1]: |
|
66 |
writer.writerow(d) |
|
67 |
return temp_out_csv.name |
|
68 |
except: |
|
69 |
try: |
|
70 |
os.unlink(temp_out_pdf.name) |
|
71 |
except: |
|
72 |
pass |
|
59 |
data_tables.append(data) |
|
60 |
return data_tables |
|
73 | 61 |
|
74 | 62 |
class Statistic(models.Model): |
75 | 63 |
patients = models.ManyToManyField('dossiers.PatientRecord', |
... | ... | |
117 | 105 |
|
118 | 106 |
def get_data(self): |
119 | 107 |
func = globals()[self.name] |
120 |
return func(self) |
|
108 |
self.data = func(self) |
|
109 |
return self.data |
|
110 |
|
|
111 |
def render_to_csv(self): |
|
112 |
with tempfile.NamedTemporaryFile(delete=False) as temp_out_csv: |
|
113 |
try: |
|
114 |
writer = csv.writer(temp_out_csv, delimiter=';', quotechar='|', |
|
115 |
quoting=csv.QUOTE_MINIMAL) |
|
116 |
for data in self.data: |
|
117 |
writer.writerow(data[0]) |
|
118 |
for d in data[1]: |
|
119 |
writer.writerow(d) |
|
120 |
return temp_out_csv.name |
|
121 |
except: |
|
122 |
try: |
|
123 |
os.unlink(temp_out_pdf.name) |
|
124 |
except: |
|
125 |
pass |
|
121 | 126 |
|
122 | 127 |
def get_file(self): |
123 |
data = self.get_data() |
|
124 |
return render_to_csv(data) |
|
128 |
self.get_data() |
|
129 |
return self.render_to_csv() |
calebasse/statistics/templates/statistics/detail.html | ||
---|---|---|
1 | 1 |
{% extends "ressources/base.html" %} |
2 |
{% load statistics_filters %} |
|
2 | 3 |
|
3 | 4 |
{% block header %} |
4 | 5 |
{{ block.super }} |
... | ... | |
11 | 12 |
{% endblock %} |
12 | 13 |
|
13 | 14 |
{% block content %} |
14 |
{% if data %} |
|
15 |
{% if data_tables %} |
|
16 |
{% for data in data_tables %} |
|
15 | 17 |
<table class="basic"> |
16 | 18 |
<thead> |
17 | 19 |
<tr> |
... | ... | |
24 | 26 |
{% for values in data.1 %} |
25 | 27 |
<tr> |
26 | 28 |
{% for value in values %} |
27 |
{% if value.id %}
|
|
29 |
{% if not value|is_list %}
|
|
28 | 30 |
<td>{{ value }}</td> |
29 | 31 |
{% else %} |
30 | 32 |
<td> |
... | ... | |
40 | 42 |
{% endfor %} |
41 | 43 |
</tbody> |
42 | 44 |
</table> |
45 |
{% endfor %} |
|
43 | 46 |
{% endif %} |
44 | 47 |
{% endblock %} |
calebasse/statistics/templates/statistics/index.html | ||
---|---|---|
16 | 16 |
{% for category, stats in statistics.iteritems %} |
17 | 17 |
<h3>{{ category }}</h3> |
18 | 18 |
{% for n, dn in stats %} |
19 |
<button id="{{ n }}" class="stats">{{ dn }}</button> |
|
19 |
<button id="{{ n }}" class="stats">{{ dn }}</button><br/>
|
|
20 | 20 |
{% endfor %} |
21 | 21 |
{% endfor %} |
22 | 22 |
</ul> |
calebasse/statistics/templatetags/statistics_filters.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
from django import template |
|
3 |
|
|
4 |
register = template.Library() |
|
5 |
|
|
6 |
@register.filter |
|
7 |
def is_list(value): |
|
8 |
return isinstance(value, (list, tuple)) |
calebasse/statistics/views.py | ||
---|---|---|
39 | 39 |
inputs['patients'] = self.request.GET.get('patients') |
40 | 40 |
statistic = Statistic(name, inputs) |
41 | 41 |
context['dn'] = statistic.display_name |
42 |
context['data'] = statistic.get_data() |
|
42 |
context['data_tables'] = statistic.get_data()
|
|
43 | 43 |
return context |
44 | 44 |
|
45 | 45 |
|
Also available in: Unified diff
statistics: add csv render func as an object method. Various minor changes.