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() |
Also available in: Unified diff
statistics: add csv render func as an object method. Various minor changes.