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()
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