PEP8
authorEric Mc Sween <eric.mcsween@auf.org>
Thu, 24 May 2012 16:15:57 +0000 (12:15 -0400)
committerEric Mc Sween <eric.mcsween@auf.org>
Thu, 24 May 2012 16:53:57 +0000 (12:53 -0400)
project/rh/urls.py
project/rh/views.py

index 65dc300..64ea0b0 100644 (file)
@@ -1,23 +1,39 @@
 # -*- encoding: utf-8 -*
+
 from django.conf.urls.defaults import patterns, url
 
-# Rapports
 urlpatterns = patterns(
     'project.rh.views',
     url(r'^admin/rh/rapports/postes$', 'rapports_poste', name='rhr_postes'),
-    url(r'^admin/rh/rapports/employes_sans_contrats$', 'rapports_employe_sans_contrat', name='rhr_employe_sans_contrat'),
-    url(r'^admin/rh/rapports/contrats$', 'rapports_contrat', name='rhr_contrats'),
-    url(r'^admin/rh/rapports/remuneration$', 'rapports_remuneration', name='rhr_remuneration'),
-    url(r'^admin/rh/rapports/masse_salariale$', 'rapports_masse_salariale', name='rhr_masse_salariale'),
-    url(r'^admin/rh/rapports/postes_par_service$', 'rapports_postes_service', name='rhr_postes_service'),
-    url(r'^admin/rh/rapports/postes_par_implantation$', 'rapports_postes_implantation', name='rhr_postes_implantation'),
-    url(r'^admin/rh/rapports/postes_modelisation$', 'rapports_postes_modelisation', name='rhr_postes_modelisation'),
-    url(r'^admin/rh/dossier/(\d+)/apercu/$', 'dossier_apercu', name='dossier_apercu'),
-    url(r'^admin/rh/employe/(\d+)/apercu/$', 'employe_apercu', name='employe_apercu'),
-    url(r'^admin/rh/poste/(\d+)/apercu/$', 'poste_apercu', name='poste_apercu'),
-    url(r'^admin/rh/organigrammes/employe/(\d+)/(\d+|all)$', 'organigrammes_employe', name='rho_employe'),
-    url(r'^admin/rh/organigrammes/employe/(\d+)/$', 'organigrammes_employe', name='rho_employe_sans_niveau'), #pour mettre le paramètre level non obligatoire, faut la deuxième url
-    url(r'^admin/rh/organigrammes/service/(\d+)$', 'organigrammes_service', name='rho_service'),
-    url(r'^admin/rh/organigrammes/implantation/(\d+)$', 'organigrammes_implantation', name='rho_implantation'),
-    url(r'^admin/rh/organigrammes/bureau/(\d+)$', 'organigrammes_region', name='rho_region'),
+    url(r'^admin/rh/rapports/employes_sans_contrats$',
+        'rapports_employe_sans_contrat', name='rhr_employe_sans_contrat'),
+    url(r'^admin/rh/rapports/contrats$', 'rapports_contrat',
+        name='rhr_contrats'),
+    url(r'^admin/rh/rapports/remuneration$', 'rapports_remuneration',
+        name='rhr_remuneration'),
+    url(r'^admin/rh/rapports/masse_salariale$', 'rapports_masse_salariale',
+        name='rhr_masse_salariale'),
+    url(r'^admin/rh/rapports/postes_par_service$',
+        'rapports_postes_service', name='rhr_postes_service'),
+    url(r'^admin/rh/rapports/postes_par_implantation$',
+        'rapports_postes_implantation', name='rhr_postes_implantation'),
+    url(r'^admin/rh/rapports/postes_modelisation$',
+        'rapports_postes_modelisation', name='rhr_postes_modelisation'),
+    url(r'^admin/rh/dossier/(\d+)/apercu/$', 'dossier_apercu',
+        name='dossier_apercu'),
+    url(r'^admin/rh/employe/(\d+)/apercu/$', 'employe_apercu',
+        name='employe_apercu'),
+    url(r'^admin/rh/poste/(\d+)/apercu/$', 'poste_apercu',
+        name='poste_apercu'),
+    url(r'^admin/rh/organigrammes/employe/(\d+)/(\d+|all)$',
+        'organigrammes_employe', name='rho_employe'),
+    #pour mettre le paramètre level non obligatoire, faut la deuxième url
+    url(r'^admin/rh/organigrammes/employe/(\d+)/$', 'organigrammes_employe',
+        name='rho_employe_sans_niveau'),
+    url(r'^admin/rh/organigrammes/service/(\d+)$', 'organigrammes_service',
+        name='rho_service'),
+    url(r'^admin/rh/organigrammes/implantation/(\d+)$',
+        'organigrammes_implantation', name='rho_implantation'),
+    url(r'^admin/rh/organigrammes/bureau/(\d+)$', 'organigrammes_region',
+        name='rho_region'),
 )
index 5ec8814..0f0cf1a 100644 (file)
@@ -6,7 +6,7 @@ from itertools import izip
 import StringIO
 
 import pygraphviz as pgv
-
+from datamaster_modeles import models as ref
 from django.core.urlresolvers import reverse
 from django.db.models import Q
 from django.utils.encoding import smart_str
@@ -15,11 +15,8 @@ from django.template import RequestContext
 from django.http import HttpResponse
 from django import forms
 from django.contrib.auth.decorators import login_required
-from django.contrib.admin import widgets as adminwidgets
 from django.core.servers.basehttp import FileWrapper
 
-from datamaster_modeles import models as ref
-
 from rh import models as rh
 from rh.lib import calc_remun
 from rh.decorators import drh_or_admin_required
@@ -98,20 +95,47 @@ def rapports_poste(request):
         if key == 'comble':
             del lookup_params[key]
 
+    sort_order = 'ASC' if request.GET.get('ot') == 'asc' else 'DESC'
+
     postes = rh.Poste.objects.select_related('implantation') \
-            .extra(select={'employe_id':'select group_concat(employe separator "|") from rh_dossier where poste=rh_poste.id  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_id':
+                'SELECT GROUP_CONCAT(employe SEPARATOR "|") '
+                'FROM rh_dossier '
+                'WHERE poste = rh_poste.id '
+                'AND rh_dossier.date_fin IS NULL ' + (
+                    'ORDER BY employe ' + sort_order
+                    if request.GET.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.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_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.date_fin IS NULL ' + (
+                    'ORDER BY rh_employe.nom ' + sort_order
+                    if request.GET.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.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 "") \
+            .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.date_fin IS NULL ' + (
+                    'ORDER BY rh_employe.prenom ' + sort_order
+                    if request.GET.get('o') == 'employe_prenom' else ''
+                )
             })
 
     postes = postes.filter(**lookup_params)
     if 'o' in request.GET:
-        postes = postes.order_by("%s%s" % ('-' if 'ot' in request.GET and request.GET['ot'] == "desc" else '', request.GET['o']))
+        postes = postes.order_by(
+            ('-' if sort_order == "DESC" else '') + request.GET['o']
+        )
 
     out = []
     for p in postes:
@@ -119,8 +143,15 @@ def rapports_poste(request):
             'id': p.id,
             'nom': p.nom,
             'implantation': p.implantation,
-            'employes': [] if not p.employe_id else [{'id': id, 'nom': nom, 'prenom': prenom} for id, nom, prenom in izip(p.employe_id.split('|'), p.employe_nom.split('|'), p.employe_prenom.split('|'))] })
-
+            'employes': [] if not p.employe_id else [
+                {'id': id, 'nom': nom, 'prenom': prenom}
+                for id, nom, prenom in izip(
+                    p.employe_id.split('|'),
+                    p.employe_nom.split('|'),
+                    p.employe_prenom.split('|')
+                )
+            ]
+        })
 
     headers = [
         ("id", u"# du poste"),
@@ -136,7 +167,10 @@ def rapports_poste(request):
         'headers': list(h.headers()),
     }
 
-    return render_to_response('rh/rapports/postes.html', c, RequestContext(request))
+    return render_to_response(
+        'rh/rapports/postes.html', c, RequestContext(request)
+    )
+
 
 @login_required
 @drh_or_admin_required
@@ -163,7 +197,10 @@ def rapports_contrat(request):
             del lookup_params[key]
             lookup_params[smart_str(key)] = value
 
-    contrats = rh.Contrat.objects.select_related('dossier', 'dossier__poste', 'dossier__poste__implantation', 'type_contrat', 'dossier__employe')
+    contrats = rh.Contrat.objects.select_related(
+        'dossier', 'dossier__poste', 'dossier__poste__implantation',
+        'type_contrat', 'dossier__employe'
+    )
 
     cl = RechercheTemporelle(dict(request.GET.items()), rh.Contrat)
     lookup_params = cl.purge_params(lookup_params)
@@ -172,7 +209,9 @@ def rapports_contrat(request):
     contrats = contrats.filter(q).exclude(dossier__employe__supprime=1)
 
     if 'o' in request.GET:
-        contrats = contrats.order_by("%s%s" % ('-' if 'ot' in request.GET and request.GET['ot'] == "desc" else '', request.GET['o']))
+        contrats = contrats.order_by(
+            ('-' if request.GET.get('ot') == "desc" else '') + request.GET['o']
+        )
 
     employes = set([c.dossier.employe_id for c in contrats])
 
@@ -189,15 +228,17 @@ def rapports_contrat(request):
     h = SortHeaders(request, headers, order_field_type="ot", order_field="o")
 
     c = {
-        'cl' : cl,
+        'cl': cl,
         'title': 'Rapport des contrats',
         'contrats': contrats,
         'count': len(contrats),
-        'count_employe' : len(employes),
+        'count_employe': len(employes),
         'headers': list(h.headers()),
     }
 
-    return render_to_response('rh/rapports/contrats.html', c, RequestContext(request))
+    return render_to_response(
+        'rh/rapports/contrats.html', c, RequestContext(request)
+    )
 
 
 @login_required
@@ -206,14 +247,16 @@ def rapports_masse_salariale(request):
 
     class RechercheTemporelle(forms.Form):
         CHOICE_ANNEES = range(
-                rh.Remuneration.objects.exclude(date_debut=None) \
-                        .order_by('date_debut')[0].date_debut.year
-                , date.today().year + 1)
-
-        annee = forms.CharField(initial=date.today().year,
-                widget=forms.Select(choices=
-                    ((a, a) for a in reversed(CHOICE_ANNEES)
-                ))
+            rh.Remuneration.objects.exclude(date_debut=None)
+            .order_by('date_debut')[0].date_debut.year,
+            date.today().year + 1
+        )
+
+        annee = forms.CharField(
+            initial=date.today().year,
+            widget=forms.Select(
+                choices=((a, a) for a in reversed(CHOICE_ANNEES))
+            )
         )
 
         region = forms.CharField(
@@ -231,10 +274,11 @@ def rapports_masse_salariale(request):
         #date_debut = forms.DateField(widget=adminwidgets.AdminDateWidget)
         #date_fin = forms.DateField(widget=adminwidgets.AdminDateWidget)
 
-
     form = RechercheTemporelle(request.GET)
-    get_filtre = [(k, v) for k,v in request.GET.items() \
-            if k not in ('date_debut', 'date_fin', 'implantation', )]
+    get_filtre = [
+        (k, v) for k, v in request.GET.items()
+        if k not in ('date_debut', 'date_fin', 'implantation')
+    ]
     query_string = urllib.urlencode(get_filtre)
 
     date_debut = None
@@ -263,15 +307,21 @@ def rapports_masse_salariale(request):
                 request.GET.get('ne_pas_grouper', False))
         if masse.rapport:
             if request.GET.get('ods'):
-                for h in (h for h in masse.headers if 'background-color' in h[2]):
+                for h in (
+                    h for h in masse.headers if 'background-color' in h[2]
+                ):
                     del h[2]['background-color']
                 masse.ods()
                 output = StringIO.StringIO()
                 masse.doc.save(output)
                 output.seek(0)
 
-                response = HttpResponse(FileWrapper(output), content_type=
-                        'application/vnd.oasis.opendocument.spreadsheet')
+                response = HttpResponse(
+                    FileWrapper(output),
+                    content_type=(
+                        'application/vnd.oasis.opendocument.spreadsheet'
+                    )
+                )
                 response['Content-Disposition'] = \
                         'attachment; filename=Masse Salariale %s.ods' % \
                             masse.annee
@@ -280,7 +330,9 @@ def rapports_masse_salariale(request):
                 c['rapport'] = masse.rapport
                 c['header_keys'] = [h[0] for h in masse.headers]
                 #on enleve le background pour le header
-                for h in (h for h in masse.headers if 'background-color' in h[2]):
+                for h in (
+                    h for h in masse.headers if 'background-color' in h[2]
+                ):
                     h[2]['background'] = 'none'
                 h = SortHeaders(request, masse.headers, order_field_type="ot",
                         not_sortable=c['header_keys'], order_field="o")
@@ -295,7 +347,9 @@ def rapports_masse_salariale(request):
                 c['url_ods'] = "%s?%s" % (
                         reverse('rhr_masse_salariale'), query_string)
 
-    return render_to_response('rh/rapports/masse_salariale.html', c, RequestContext(request))
+    return render_to_response(
+        'rh/rapports/masse_salariale.html', c, RequestContext(request)
+    )
 
 
 @login_required
@@ -317,7 +371,9 @@ def rapports_remuneration(request):
 
     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.order_by(
+            ('-' if request.GET.get('ot') == "desc" else '') + request.GET['o']
+        )
 
     employes = employes.filter(**lookup_params)
 
@@ -345,7 +401,8 @@ def rapports_remuneration(request):
         remun_sum_euro = 0
 
         for dossier in dossiers:
-            this_remun, this_remun_sum, this_remun_sum_euro = calc_remun(dossier)
+            this_remun, this_remun_sum, this_remun_sum_euro = \
+                    calc_remun(dossier)
 
             for item in this_remun:
                 if item not in remun:
@@ -368,14 +425,16 @@ def rapports_remuneration(request):
         line['nom'] = employe.nom
         line['prenom'] = employe.prenom
 
-
     c = {
         'title': 'Rapport de remuneration',
         'employes': output,
         'headers': list(h.headers()),
     }
 
-    return render_to_response('rh/rapports/remuneration.html', c, RequestContext(request))
+    return render_to_response(
+        'rh/rapports/remuneration.html', c, RequestContext(request)
+    )
+
 
 @login_required
 @drh_or_admin_required
@@ -396,19 +455,26 @@ def rapports_employe_sans_contrat(request):
 
     employes_query = rh.Employe.objects
     if 'o' in request.GET:
-        employes_query = employes_query.order_by("%s%s" % ('-' if 'ot' in request.GET and request.GET['ot'] == "desc" else '', request.GET['o']))
+        employes_query = employes_query.order_by(
+            ('-' if request.GET.get('ot') == "desc" else '') + request.GET['o']
+        )
 
     employes = {}
 
-    dossiers_en_cours = rh.Dossier.objects.filter(Q(date_fin=None) | Q(date_fin__gt=date.today()))
-    tous_contrats_echus = rh.Contrat.objects.filter(date_fin__lt=date.today(), dossier__in=dossiers_en_cours)
+    dossiers_en_cours = rh.Dossier.objects.filter(
+        Q(date_fin=None) | Q(date_fin__gt=date.today())
+    )
+    tous_contrats_echus = rh.Contrat.objects.filter(
+        date_fin__lt=date.today(), dossier__in=dossiers_en_cours
+    )
     contrats = tous_contrats_echus.filter(**lookup_params).all()
     for c in contrats:
         if c.dossier.employe.id not in employes.keys():
-            employes[c.dossier.employe.id] = {'employe': c.dossier.employe, 'dossiers': []}
-        employes[c.dossier.employe.id]['dossiers'] += [c.dossier,]
-
-
+            employes[c.dossier.employe.id] = {
+                'employe': c.dossier.employe,
+                'dossiers': []
+            }
+        employes[c.dossier.employe.id]['dossiers'] += [c.dossier]
 
     headers = [
         ("id", u"# de l'employé"),
@@ -416,7 +482,10 @@ def rapports_employe_sans_contrat(request):
         ("prenom", u"Prénom"),
         ("dossier", u"Dossiers"),
     ]
-    h = SortHeaders(request, headers, order_field_type="ot", order_field="o", not_sortable=('dossier',))
+    h = SortHeaders(
+        request, headers, order_field_type="ot", order_field="o",
+        not_sortable=('dossier',)
+    )
 
     c = {
         'title': u'Rapport des employés sans contrat',
@@ -425,7 +494,10 @@ def rapports_employe_sans_contrat(request):
         'headers': list(h.headers()),
     }
 
-    return render_to_response('rh/rapports/employes_sans_contrat.html', c, RequestContext(request))
+    return render_to_response(
+        'rh/rapports/employes_sans_contrat.html', c, RequestContext(request)
+    )
+
 
 @login_required
 @drh_or_admin_required
@@ -447,13 +519,14 @@ def rapports_postes_modelisation(request):
         data.append({
             'categorie': categorie,
             'nb_types': types.count(),
-            'types' : data_types
-            })
+            'types': data_types
+        })
 
     c['data'] = data
 
-
-    return render_to_response('rh/rapports/postes_modelisation.html', c, RequestContext(request))
+    return render_to_response(
+        'rh/rapports/postes_modelisation.html', c, RequestContext(request)
+    )
 
 
 @login_required
@@ -476,8 +549,9 @@ def rapports_postes_implantation(request):
 
     c['data'] = data
 
-
-    return render_to_response('rh/rapports/postes_implantation.html', c, RequestContext(request))
+    return render_to_response(
+        'rh/rapports/postes_implantation.html', c, RequestContext(request)
+    )
 
 
 @login_required
@@ -491,7 +565,9 @@ def rapports_postes_service(request):
         data.append({'service': s, 'num_postes': num_postes, 'postes': postes})
 
     c['data'] = data
-    return render_to_response('rh/rapports/postes_service.html', c, RequestContext(request))
+    return render_to_response(
+        'rh/rapports/postes_service.html', c, RequestContext(request)
+    )
 
 
 def region_protected(model):
@@ -504,7 +580,9 @@ def region_protected(model):
                 return func(request, id)
             if grp_correspondants_rh in user_groups:
                 employe = get_employe_from_user(request.user)
-                q = Q(**{model.prefix_implantation: employe.implantation.region})
+                q = Q(**{
+                    model.prefix_implantation: employe.implantation.region
+                })
                 qs = model.objects.filter(q)
                 if int(id) in [o.id for o in qs]:
                     return func(request, id)
@@ -518,30 +596,45 @@ def dossier_apercu(request, dossier_id):
     d = get_object_or_404(rh.Dossier, pk=dossier_id)
     c = {
         'title': u"Dossier %s" % (d, ),
-        'is_popup' : request.GET.get('_popup', False),
-        'dossier' : d,
-        'pieces' :  rh.DossierPiece.objects.filter(dossier__exact=d),
-        'contrats' : rh.Contrat.objects.filter(dossier__exact=d),
-        'commentaires' : rh.DossierCommentaire.objects.filter(dossier__exact=d).all(),
+        'is_popup': request.GET.get('_popup', False),
+        'dossier': d,
+        'pieces':  rh.DossierPiece.objects.filter(dossier__exact=d),
+        'contrats': rh.Contrat.objects.filter(dossier__exact=d),
+        'commentaires': rh.DossierCommentaire.objects.filter(dossier=d).all(),
         'media_url': settings.PRIVE_MEDIA_URL,
     }
-    return render_to_response('admin/rh/dossier/apercu.html', c, RequestContext(request))
+    return render_to_response(
+        'admin/rh/dossier/apercu.html', c, RequestContext(request)
+    )
+
 
 @region_protected(rh.Poste)
 def poste_apercu(request, poste_id):
     p = get_object_or_404(rh.Poste, pk=poste_id)
     c = {
         'title': u"Poste %s" % (p, ),
-        'is_popup' : request.GET.get('_popup', False),
-        'poste' : p,
-        'financements' : rh.PosteFinancement.objects.filter(poste=poste_id).all(),
-        'pieces' : rh.PostePiece.objects.filter(poste=poste_id).all(),
-        'dossiers' : rh.Dossier.objects.filter(poste=poste_id).order_by("-date_debut").all(),
-        'comparaisons' : rh.PosteComparaison.objects.filter(poste=poste_id).all(),
-        'commentaires' : rh.PosteCommentaire.objects.filter(poste=poste_id).all(),
+        'is_popup': request.GET.get('_popup', False),
+        'poste': p,
+        'financements': (
+            rh.PosteFinancement.objects.filter(poste=poste_id).all()
+        ),
+        'pieces': rh.PostePiece.objects.filter(poste=poste_id).all(),
+        'dossiers': (
+            rh.Dossier.objects.filter(poste=poste_id)
+            .order_by("-date_debut").all()
+        ),
+        'comparaisons': (
+            rh.PosteComparaison.objects.filter(poste=poste_id).all()
+        ),
+        'commentaires': (
+            rh.PosteCommentaire.objects.filter(poste=poste_id).all()
+        ),
         'media_url': settings.PRIVE_MEDIA_URL,
     }
-    return render_to_response('admin/rh/poste/apercu.html', c, RequestContext(request))
+    return render_to_response(
+        'admin/rh/poste/apercu.html', c, RequestContext(request)
+    )
+
 
 def employe_apercu(request, employe_id):
     employe = get_object_or_404(rh.Employe, pk=employe_id)
@@ -552,26 +645,34 @@ def employe_apercu(request, employe_id):
        grp_drh in user_groups:
         q = Q(employe=employe)
     if grp_correspondants_rh in user_groups:
-        regions = [d.poste.implantation.region for d in employe.rh_dossiers.all()]
+        regions = [
+            d.poste.implantation.region for d in employe.rh_dossiers.all()
+        ]
         q = Q(employe=employe) & Q(implantation__region__in=regions)
 
     dossiers = rh.Dossier.objects.filter(q).order_by('-date_debut')
 
     c = {
         'title': u"Employe %s" % (employe, ),
-        'is_popup' : request.GET.get('_popup', False),
-        'employe' : employe,
-        'dossiers' : dossiers,
+        'is_popup': request.GET.get('_popup', False),
+        'employe': employe,
+        'dossiers': dossiers,
         'media_url': settings.PRIVE_MEDIA_URL,
     }
-    return render_to_response('admin/rh/employe/apercu.html', c, RequestContext(request))
+    return render_to_response(
+        'admin/rh/employe/apercu.html', c, RequestContext(request)
+    )
+
 
 @login_required
 @drh_or_admin_required
 def organigrammes_employe(request, id, level="all"):
 
     poste = get_object_or_404(rh.Poste, pk=id)
-    dossiers_by_poste = dict((d.poste_id, d) for d in rh.Dossier.objects.select_related('employe', 'poste').all())
+    dossiers_by_poste = dict(
+        (d.poste_id, d)
+        for d in rh.Dossier.objects.select_related('employe', 'poste').all()
+    )
     postes_by_id = dict((p.id, p) for p in rh.Poste.objects.all())
 
     e = dossiers_by_poste[poste.id].employe
@@ -581,11 +682,18 @@ def organigrammes_employe(request, id, level="all"):
     if rh.Poste.objects.filter(responsable=poste).count() > 0:
         postes_handle = [poste]
         while postes_handle:
-            postes_handle = rh.Poste.objects.select_related('implantation').filter((Q(date_fin__gt=date.today()) | Q(date_fin=None)) & (Q(date_debut__lt=date.today()) | Q(date_debut=None)) ).filter(responsable__in=postes_handle).exclude(supprime=True).exclude(responsable=None).all()
+            postes_handle = rh.Poste.objects.select_related('implantation') \
+                    .filter(
+                        Q(date_fin__gt=date.today()) | Q(date_fin=None),
+                        Q(date_debut__lt=date.today()) | Q(date_debut=None),
+                        responsable__in=postes_handle
+                    ).exclude(supprime=True).exclude(responsable=None).all()
 
             for p in postes_handle:
                 if p.responsable_id != p.id:
-                    graph.add_edge(dossiers_by_poste[p.responsable_id].poste_id, p.id)
+                    graph.add_edge(
+                        dossiers_by_poste[p.responsable_id].poste_id, p.id
+                    )
 
     else:
         graph.add_node(poste.id)
@@ -593,10 +701,16 @@ def organigrammes_employe(request, id, level="all"):
     if level != "all":
         postes_niveau = [poste.id]
         for niveau in range(int(level)):
-            postes_niveau = [p.id for p in rh.Poste.objects.filter(responsable__in=postes_niveau).all()]
+            postes_niveau = [
+                p.id for p in
+                rh.Poste.objects.filter(responsable__in=postes_niveau).all()
+            ]
 
         while postes_niveau:
-            postes_niveau = [p.id for p in rh.Poste.objects.filter(responsable__in=postes_niveau).all()]
+            postes_niveau = [
+                p.id for p in
+                rh.Poste.objects.filter(responsable__in=postes_niveau).all()
+            ]
             if postes_niveau:
                 for p in postes_niveau:
                     if graph.has_node(p):
@@ -623,10 +737,14 @@ def organigrammes_employe(request, id, level="all"):
 
     if 'forcer' in request.GET:
         response = HttpResponse(svg, mimetype='image/svg+xml')
-        response['Content-Disposition'] = 'attachment; filename=organigramme.svg'
+        response['Content-Disposition'] = \
+                'attachment; filename=organigramme.svg'
         return response
 
-    return render_to_response('rh/organigrammes/employe.html', c, RequestContext(request), mimetype="image/svg+xml")
+    return render_to_response(
+        'rh/organigrammes/employe.html', c, RequestContext(request),
+        mimetype="image/svg+xml"
+    )
 
 
 @login_required
@@ -643,7 +761,11 @@ def organigrammes_service(request, id):
         'svg': svg
     }
 
-    return render_to_response('rh/organigrammes/vide.html', c, RequestContext(request), mimetype="image/svg+xml")
+    return render_to_response(
+        'rh/organigrammes/vide.html', c, RequestContext(request),
+        mimetype="image/svg+xml"
+    )
+
 
 @login_required
 @drh_or_admin_required
@@ -659,7 +781,11 @@ def organigrammes_implantation(request, id):
         'svg': svg
     }
 
-    return render_to_response('rh/organigrammes/vide.html', c, RequestContext(request), mimetype="image/svg+xml")
+    return render_to_response(
+        'rh/organigrammes/vide.html', c, RequestContext(request),
+        mimetype="image/svg+xml"
+    )
+
 
 @login_required
 @drh_or_admin_required
@@ -675,4 +801,7 @@ def organigrammes_region(request, id):
         'svg': svg
     }
 
-    return render_to_response('rh/organigrammes/vide.html', c, RequestContext(request), mimetype="image/svg+xml")
+    return render_to_response(
+        'rh/organigrammes/vide.html', c, RequestContext(request),
+        mimetype="image/svg+xml"
+    )