Project

General

Profile

« Previous | Next » 

Revision b16a4439

Added by Mikaël Ates over 11 years ago

statistics: add csv render func as an object method. Various minor changes.

View differences:

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