Rapports: trie par colonne, filtres rajoutés, modification du visuel
authorJean-Philippe Caissy <jean-philippe.caissy@auf.org>
Mon, 30 Jan 2012 18:50:31 +0000 (12:50 -0600)
committerJean-Philippe Caissy <jean-philippe.caissy@auf.org>
Mon, 30 Jan 2012 18:50:31 +0000 (12:50 -0600)
project/rh/templates/rh/rapports/contrats.html
project/rh/templates/rh/rapports/postes.html
project/rh/templates/rh/rapports/remuneration.html
project/rh/templatetags/rapports.py
project/rh/views.py

index a8ceaec..0d1e97f 100644 (file)
 </thead>
 {% spaceless %}{% for contrat in contrats %}
 <tr class="{% cycle 'row1' 'row2' %}">
-       <td>{{ contrat.dossier.employe.id }}</td>
-       <td>{{ contrat.dossier.employe.nom }}</td>
-       <td>{{ contrat.dossier.employe.prenom }}</td>
-       <td>{{ contrat.dossier.poste }}</td>
+    <td style="text-align:right"><a href="{% url admin:rh_employe_change contrat.dossier.employe.id %}">{{ contrat.dossier.employe.id }}</a></td>
+    <td><a href="{% url admin:rh_employe_change contrat.dossier.employe.id %}">{{ contrat.dossier.employe.nom|upper }}</a></td>
+    <td><a href="{% url admin:rh_employe_change contrat.dossier.employe.id %}">{{ contrat.dossier.employe.prenom }}</a></td>
+    <td><a href="{% url admin:rh_poste_change contrat.dossier.poste.id %}">{{ contrat.dossier.poste }}</a></td>
        <td>{{ contrat.type_contrat.nom }}</td>
        <td>{{ contrat.date_debut }}</td>
        <td>{{ contrat.date_fin|default:'' }}</td>
index 7670c74..cc5e928 100644 (file)
 </thead>
 {% spaceless %}{% for poste in postes %}
 <tr class="{% cycle 'row1' 'row2' %}">
-       <td>{{ poste.id }}</td>
-       <td>{{ poste.nom }}</td>
-       <td>{{ poste.implantation }}</td>
-       <td>{{ poste.employe_id }}</td>
-       <td>{{ poste.employe_nom }}</td>
-       <td>{{ poste.employe_prenom }}</td>
+    <td style="text-align:right"><a href="{% url admin:rh_poste_change poste.id %}">{{ poste.id }}</td>
+    <td><a href="{% url admin:rh_poste_change poste.id %}">{{ poste.nom|upper }}</a></td>
+    <td>{{ poste.implantation }}</td>
+    <td>
+        {% if poste.employe_id %}
+        <ul>
+            {% for e in poste.employe_id|split:'|' %}
+            <li><a href="{% url admin:rh_employe_change e %}">{{ e }}</a></li>
+            {% endfor %}
+        </ul>
+        {% else %}
+        Vacant
+        {% endif %}
+    </td>
+    <td>
+        {% if poste.employe_nom %}
+        <ul>
+            {% for e in poste.employe_nom|split:'|' %}
+            <li>{{ e }}</li>
+            {% endfor %}
+        </ul>
+        {% endif %}
+    </td>
+
+    <td>
+        {% if poste.employe_prenom %}
+        <ul>
+            {% for e in poste.employe_prenom|split:'|' %}
+            <li>{{ e }}</li>
+            {% endfor %}
+        </ul>
+        {% endif %}
+    </td>
 </tr>
 {% endfor %}{% endspaceless %}
 </table>
index 98357ea..e34e6ae 100644 (file)
 <table id="result_list">
 <thead>
 <tr>
-       <th># de l'employé</th>
-       <th>Nom</th>
-       <th>Prénom</th>
-       <th>Salaire</th>
-       <th><span title="Rémunération autres sources">RAS</span></th>
-       <th>Indemnités</th>
-       <th>Accessoires</th>
-       <th>Charges patronales</th>
-       <th>Total</th>
+    {% table_header headers %}
 </tr>
 </thead>
 {% spaceless %}{% for employe in employes %}
 <tr class="{% cycle 'row1' 'row2' %}">
-       <td>{{ employe.id }}</td>
-       <td>{{ employe.nom }}</td>
-       <td>{{ employe.prenom }}</td>
+    <td style="text-align:right"><a href="{% url admin:rh_employe_change emploey.id %}">{{ employe.id }}</a></td>
+    <td><a href="{% url admin:rh_employe_change employe.id %}">{{ employe.nom|upper }}</td></a>
+    <td><a href="{% url admin:rh_employe_change employe.id %}">{{ employe.prenom }}</a></td>
        <td align="right">{{ employe.Traitement|default:0|floatformat:2 }} &euro;</td>
        <td align="right">{{ employe.RAS|default:0|floatformat:2 }} &euro;</td>
        <td align="right">{{ employe.Indemnite|default:0|floatformat:2 }} &euro;</td>
index 8ea7d48..0959da8 100644 (file)
@@ -206,4 +206,6 @@ class SortHeaders:
     def field_sorted(self, field):
         return True if field not in self.not_sortable else False
 
-
+@register.filter
+def split(str, splitter):
+    return str.split(splitter)
index ffccb9d..2db6a39 100644 (file)
@@ -107,9 +107,15 @@ def rapports_poste(request):
 
     #postes = rh.Poste.actifs.select_related('implantation', 'dossier').all()
     postes = rh.Poste.actifs.select_related('implantation') \
-            .extra(select={'employe_id':'select group_concat(employe) from rh_dossier where poste=rh_poste.id and rh_dossier.actif = 1'}) \
-            .extra(select={'employe_nom':'select group_concat(rh_employe.nom) from rh_dossier inner join rh_employe on rh_dossier.employe = rh_employe.id where poste=rh_poste.id and rh_dossier.actif = 1'}) \
-            .extra(select={'employe_prenom':'select group_concat(rh_employe.prenom) from rh_dossier inner join rh_employe on rh_dossier.employe = rh_employe.id where poste=rh_poste.id and rh_dossier.actif = 1'})
+            .extra(select={'employe_id':'select group_concat(employe separator "|") from rh_dossier where poste=rh_poste.id and rh_dossier.actif = 1 and rh_dossier.date_fin is null %s' % \
+                ("%s" % (('order by employe %s' % ('asc' if 'ot' in request.GET and request.GET['ot'] == "asc" else "desc"))) if 'o' in request.GET and request.GET['o'] == "employe_id" else "") \
+            }) \
+            .extra(select={'employe_nom':'select group_concat(rh_employe.nom separator "|") from rh_dossier inner join rh_employe on rh_dossier.employe = rh_employe.id where poste=rh_poste.id and rh_dossier.actif = 1 and rh_dossier.date_fin is  null %s' % \
+                ("%s" % (('order by rh_employe.nom %s' % ('asc' if 'ot' in request.GET and request.GET['ot'] == "asc" else "desc"))) if 'o' in request.GET and request.GET['o'] == "employe_nom" else "") \
+            }) \
+            .extra(select={'employe_prenom':'select group_concat(rh_employe.prenom separator "|") from rh_dossier inner join rh_employe on rh_dossier.employe = rh_employe.id where poste=rh_poste.id and rh_dossier.actif = 1 and rh_dossier.date_fin is null %s' % \
+                ("%s" % (('order by rh_employe.prenom %s' % ('asc' if 'ot' in request.GET and request.GET['ot'] == "asc" else "desc"))) if 'o' in request.GET and request.GET['o'] == "employe_prenom" else "") \
+            })
 
     postes = postes.filter(**lookup_params)
     if 'o' in request.GET:
@@ -184,6 +190,10 @@ def rapports_contrat(request):
 def rapports_remuneration(request):
 
     lookup_params = dict(request.GET.items())
+    if 'ot' in lookup_params:
+        del lookup_params['ot']
+    if 'o' in lookup_params:
+        del lookup_params['o']
 
     for key, value in lookup_params.items():
         if not isinstance(key, str):
@@ -193,9 +203,24 @@ def rapports_remuneration(request):
             lookup_params[smart_str(key)] = value
 
     employes = rh.Employe.objects.all()
+    if 'o' in request.GET:
+        employes = employes.order_by("%s%s" % ('-' if 'ot' in request.GET and request.GET['ot'] == "desc" else '', request.GET['o']))
+
     employes = employes.filter(**lookup_params)
 
     output = []
+    headers = [
+            ("id", u"# de l'employé"),
+            ("nom", u"Nom"),
+            ("prenom", u"Prénom"),
+            ("", u"Salaire"),
+            ("", u"RAS"),
+            ("", u"Indemnités"),
+            ("", u"Accessoire"),
+            ("", u"Charges patronales"),
+            ("", u"Total"),
+    ]
+    h = SortHeaders(request, headers, order_field_type="ot", order_field="o")
 
     for employe in employes:
         line = {}
@@ -234,6 +259,7 @@ def rapports_remuneration(request):
     c = {
         'title': 'Rapport de remuneration',
         'employes': output,
+        'headers': list(h.headers()),
     }
 
     return render_to_response('rh/rapports/remuneration.html', c, RequestContext(request))