cleanup
[auf_rh_dae.git] / project / rh / admin.py
index 45296c4..b272ab0 100644 (file)
@@ -1,39 +1,49 @@
 # -*- encoding: utf-8 -*-
 
-from collections import defaultdict
 import datetime
 
-from django.db import models
-from django import forms
 from django.core.urlresolvers import reverse
 from django.contrib import admin
 from django.conf import settings
 from django.db.models import Q
 from django.template.defaultfilters import date
 from ajax_select import make_ajax_form
-from auf.django.metadata.admin import AUFMetadataAdminMixin, AUFMetadataInlineAdminMixin, AUF_METADATA_READONLY_FIELDS
+from auf.django.metadata.admin import AUFMetadataAdminMixin, \
+                                      AUFMetadataInlineAdminMixin, \
+                                      AUF_METADATA_READONLY_FIELDS
 from forms import ContratForm, AyantDroitForm, EmployeAdminForm, AjaxSelect
 from dae.utils import get_employe_from_user
 from change_list import ChangeList
 from groups import grp_drh
 import models as rh
-import filters
+
+
+class EmployeProxy(rh.Employe):
+
+    class Meta:
+        proxy = True
+        verbose_name = u"Organigramme des employés"
+        verbose_name_plural = u"Organigramme des employés"
+
 
 class DateRangeMixin(object):
     prefixe_recherche_temporelle = ""
+
     def get_changelist(self, request, **kwargs):
-        if request.META.has_key('HTTP_REFERER'):
+        if 'HTTP_REFERER' in request.META.keys():
                     referer = request.META['HTTP_REFERER']
                     referer = "/".join(referer.split('/')[3:])
                     referer = "/%s" % referer.split('?')[0]
-                    change_list_view = 'admin:%s_%s_changelist' % (self.model._meta.app_label, self.model.__name__.lower())
+                    change_list_view = 'admin:%s_%s_changelist' % (
+                            self.model._meta.app_label,
+                            self.model.__name__.lower(),)
                     if referer != reverse(change_list_view):
                         params = request.GET.copy()
-                        today = datetime.date.today()
-                        params.update({'statut' : 'Actif'})
+                        params.update({'statut': 'Actif'})
                         request.GET = params
         return ChangeList
 
+
 # Override of the InlineModelAdmin to support the link in the tabular inline
 class LinkedInline(admin.options.InlineModelAdmin):
     template = "admin/linked.html"
@@ -61,7 +71,8 @@ class ProtectRegionMixin(object):
 
         if grp_correspondants_rh in user_groups:
             employe = get_employe_from_user(request.user)
-            q = Q(**{self.model.prefix_implantation: employe.implantation.region})
+            q = Q(**{self.model.prefix_implantation: \
+                    employe.implantation.region})
             qs = qs.filter(q).distinct()
             return qs
         return qs.none()
@@ -85,8 +96,10 @@ class ProtectRegionMixin(object):
 # Inlines
 
 class ReadOnlyInlineMixin(object):
+
     def get_readonly_fields(self, request, obj=None):
-        return [f.name for f in self.model._meta.fields if f.name not in AUF_METADATA_READONLY_FIELDS]
+        return [f.name for f in self.model._meta.fields \
+                if f.name not in AUF_METADATA_READONLY_FIELDS]
 
 
 class AyantDroitInline(AUFMetadataInlineAdminMixin, admin.StackedInline):
@@ -96,12 +109,18 @@ class AyantDroitInline(AUFMetadataInlineAdminMixin, admin.StackedInline):
 
     fieldsets = (
         (None, {
-            'fields': (('nom', 'prenom'), ('nom_affichage', 'genre'), 'nationalite', 'date_naissance', 'lien_parente', )
-        }),
+            'fields': (
+                ('nom', 'prenom'),
+                ('nom_affichage', 'genre'),
+                'nationalite',
+                'date_naissance',
+                'lien_parente',
+                )}),
     )
 
 
-class AyantDroitCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
+class AyantDroitCommentaireInline(AUFMetadataInlineAdminMixin, \
+        admin.TabularInline):
     readonly_fields = ('owner', )
     model = rh.AyantDroitCommentaire
     extra = 1
@@ -130,7 +149,8 @@ class DossierROInline(ReadOnlyInlineMixin, LinkedInline):
         return False
 
 
-class DossierCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
+class DossierCommentaireInline(AUFMetadataInlineAdminMixin, \
+        admin.TabularInline):
     readonly_fields = ('owner', )
     model = rh.DossierCommentaire
     extra = 1
@@ -144,7 +164,9 @@ class DossierPieceInline(admin.TabularInline):
 class EmployeInline(admin.TabularInline):
     model = rh.Employe
 
-class EmployeCommentaireInline(AUFMetadataInlineAdminMixin, admin.TabularInline):
+
+class EmployeCommentaireInline(AUFMetadataInlineAdminMixin, \
+        admin.TabularInline):
     readonly_fields = ('owner', )
     model = rh.EmployeCommentaire
     extra = 1
@@ -190,8 +212,7 @@ class ClassementAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     list_display = ('_classement', '_date_modification', 'user_modification', )
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
-            'fields': ('type', 'echelon', 'degre', 'coefficient',  )
-        }),
+            'fields': ('type', 'echelon', 'degre', 'coefficient',)}),
     )
 
     def _classement(self, obj):
@@ -199,16 +220,24 @@ class ClassementAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     _classement.short_description = u"Classement"
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
+
 class CommentaireAdmin(admin.ModelAdmin):
     pass
 
 
 class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
-    list_display = ('code', 'nom', '_archive', '_date_modification', 'user_modification',)
+    list_display = (
+            'code',
+            'nom',
+            '_archive',
+            '_date_modification',
+            'user_modification',
+            )
     list_filter = ('archive', )
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
@@ -227,13 +256,20 @@ class DeviseAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     _archive.short_description = u'Archivé'
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
-class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin, AjaxSelect,):
+
+class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
+        ProtectRegionMixin, admin.ModelAdmin, AjaxSelect,):
     alphabet_filter = 'employe__nom'
-    search_fields = ('employe__nom', 'employe__prenom', 'poste__nom', 'poste__nom_feminin')
+    search_fields = (
+            'employe__nom',
+            'employe__prenom',
+            'poste__nom',
+            'poste__nom_feminin')
     list_display = (
         '_id',
         '_apercu',
@@ -259,22 +295,28 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, ad
               )
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
-            'fields': ('employe', 'poste', 'statut', 'organisme_bstg',)
-        }),
+            'fields': (
+                'employe',
+                'poste',
+                'statut',
+                'organisme_bstg',)}),
         ('Recrutement', {
-            'fields': ('statut_residence', 'remplacement', 'remplacement_de', )
-        }),
+            'fields': (
+                'statut_residence',
+                'remplacement',
+                'remplacement_de', )}),
         ('Rémunération', {
-            'fields': ('classement', ('regime_travail', 'regime_travail_nb_heure_semaine'),)
-        }),
+            'fields': (
+                'classement',
+                ('regime_travail', 'regime_travail_nb_heure_semaine'),)}),
         ('Occupation du Poste par cet Employe', {
-            'fields': (('date_debut', 'date_fin'), )
-        }),
+            'fields': (('date_debut', 'date_fin'), )}
+            ),
     )
-    form =  make_ajax_form(rh.Dossier, {
-        'employe' : 'employes',
-        'poste' : 'postes',
-        'remplacement_de' : 'dossiers',
+    form = make_ajax_form(rh.Dossier, {
+        'employe': 'employes',
+        'poste': 'postes',
+        'remplacement_de': 'dossiers',
     })
 
     def lookup_allowed(self, key, value):
@@ -294,21 +336,25 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, ad
     _id.admin_order_field = "id"
 
     def _nom(self, obj):
-        return "%d : %s %s" % \
-                (obj.date_debut.year, obj.employe.nom.upper(), obj.employe.prenom)
+        return "%d : %s %s" % (
+                        obj.date_debut.year,
+                        obj.employe.nom.upper(),
+                        obj.employe.prenom)
     _nom.allow_tags = True
     _nom.short_description = u"Dossier"
 
-
     def _apercu(self, d):
-        apercu_link = u"""<a title="Aperçu du dossier" onclick="return showAddAnotherPopup(this);" href='%s'><img src="%simg/loupe.png" /></a>""" % \
+        apercu_link = u"""<a title="Aperçu du dossier"
+                             onclick="return showAddAnotherPopup(this);"
+                             href='%s'>
+                             <img src="%simg/loupe.png" />
+                             </a>""" % \
                 (reverse('dossier_apercu', args=(d.id,)),
                  settings.STATIC_URL,
                  )
         return apercu_link
     _apercu.allow_tags = True
     _apercu.short_description = u""
-    
 
     def _date_debut(self, obj):
         return date(obj.date_debut)
@@ -321,14 +367,18 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, ad
     _date_fin.short_description = u'Occupation fin'
     _date_fin.admin_order_field = 'date_fin'
 
-
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
     def _poste(self, dossier):
-        link = u"""<a title="Aperçu du poste" onclick="return showAddAnotherPopup(this);" href='%s'><img src="%simg/loupe.png" /></a> <a href="%s" title="Modifier le poste">%s</a>""" % \
+        link = u"""<a title="Aperçu du poste"
+                      onclick="return showAddAnotherPopup(this);"
+                      href='%s'><img src="%simg/loupe.png" />
+                    </a>
+                    <a href="%s" title="Modifier le poste">%s</a>""" % \
                 (reverse('poste_apercu', args=(dossier.poste.id,)),
                  settings.STATIC_URL,
                  reverse('admin:rh_poste_change', args=(dossier.poste.id,)),
@@ -345,13 +395,17 @@ class DossierAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, ad
         edit_link = reverse('admin:rh_employe_change', args=(employe.id,))
 
         style = ""
-        view = u"""<a href="%s" title="Aperçu l'employé" onclick="return showAddAnotherPopup(this);"><img src="%simg/loupe.png" /></a>""" % (view_link, settings.STATIC_URL,)
+        view = u"""<a href="%s"
+                      title="Aperçu l'employé"
+                      onclick="return showAddAnotherPopup(this);">
+                      <img src="%simg/loupe.png" />
+                    </a>""" % (view_link, settings.STATIC_URL,)
         return u"""%s<a href='%s' style="%s;">%s</a>""" % \
         (view, edit_link, style, employe)
     _employe.allow_tags = True
     _employe.short_description = u"Employé"
     _employe.admin_order_field = "employe__nom"
-   
+
     def save_formset(self, request, form, formset, change):
         instances = formset.save(commit=False)
         for instance in instances:
@@ -369,35 +423,61 @@ class DossierCommentaireAdmin(admin.ModelAdmin):
     pass
 
 
-class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin,):
+class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
+        ProtectRegionMixin, admin.ModelAdmin,):
     prefixe_recherche_temporelle = "rh_dossiers__"
     alphabet_filter = 'nom'
     DEFAULT_ALPHABET = u'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
     search_fields = ('id', 'nom', 'prenom', 'nom_affichage', )
     ordering = ('nom', )
     form = EmployeAdminForm
-    list_display = ('_id', '_apercu', '_nom', '_dossiers_postes', '_date_modification',  'user_modification', )
+    list_display = (
+            '_id',
+            '_apercu',
+            '_nom',
+            '_dossiers_postes',
+            '_date_modification',
+            'user_modification',
+            )
     list_display_links = ('_nom',)
-    list_filter = ('rh_dossiers__poste__implantation__region',  'rh_dossiers__poste__implantation', 'nb_postes', )
+    list_filter = (
+            'rh_dossiers__poste__implantation__region',
+            'rh_dossiers__poste__implantation',
+            'nb_postes',
+            )
     inlines = (AyantDroitInline,
                DossierROInline,
                EmployePieceInline,
                EmployeCommentaireInline)
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
         ('Identification', {
-            'fields': (('nom', 'prenom'), ('nom_affichage', 'genre'), 'nationalite', 'date_naissance', )
-        }),
+            'fields': (
+                ('nom', 'prenom'),
+                ('nom_affichage', 'genre'),
+                'nationalite',
+                'date_naissance',
+                )}
+            ),
         ('Informations personnelles', {
-            'fields': ('situation_famille', 'date_entree', )
-        }),
+            'fields': ('situation_famille', 'date_entree', )}
+            ),
         ('Coordonnées', {
-            'fields': (('tel_domicile', 'tel_cellulaire'), ('adresse', 'ville'), ('code_postal', 'province'), 'pays', )
-        }),
+            'fields': (
+                ('tel_domicile', 'tel_cellulaire'),
+                ('adresse', 'ville'),
+                ('code_postal', 'province'),
+                'pays',
+                )}
+            ),
         )
 
     def _apercu(self, obj):
-        return u"""<a title="Aperçu de l'employé" onclick="return showAddAnotherPopup(this);" href='%s'><img src="%simg/loupe.png" /></a>""" % \
-                (reverse('employe_apercu', args=(obj.id,)), settings.STATIC_URL)
+        return u"""<a title="Aperçu de l'employé"
+                      onclick="return showAddAnotherPopup(this);"
+                      href='%s'>
+                      <img src="%simg/loupe.png" />
+                    </a>""" % \
+            (reverse('employe_apercu', args=(obj.id,)), settings.STATIC_URL)
     _apercu.allow_tags = True
     _apercu.short_description = u""
 
@@ -415,24 +495,37 @@ class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, ad
     _id.admin_order_field = "id"
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
     def _dossiers_postes(self, obj):
         l = []
         for d in obj.rh_dossiers.all().order_by('-date_debut'):
-            dossier = u"""<a title="Aperçu du dossier" href="%s" onclick="return showAddAnotherPopup(this);" title="Aperçu du dossier"><img src="%simg/loupe.png" /></a><a href="%s">Dossier</a>&nbsp;""" % \
-                                (  reverse('dossier_apercu', args=(d.id,)),
-                                settings.STATIC_URL,
-                                reverse('admin:rh_dossier_change', args=(d.id,))
-                                )
-
-            poste = u"""<a title="Aperçu du poste" href="%s" onclick="return showAddAnotherPopup(this);" title="Aperçu du poste"><img src="%simg/loupe.png" /></a><a href="%s">Poste</a>&nbsp;""" % \
-                                 (  reverse('poste_apercu', args=(d.poste.id,)),
-                                    settings.STATIC_URL,
-                                    reverse('admin:rh_poste_change', args=(d.poste.id,))
-                                 )
+            dossier = u"""<a title="Aperçu du dossier"
+                             href="%s"
+                             onclick="return showAddAnotherPopup(this);"
+                             title="Aperçu du dossier">
+                             <img src="%simg/loupe.png" />
+                          </a>
+                          <a href="%s">Dossier</a>
+                          &nbsp;""" % \
+                (reverse('dossier_apercu', args=(d.id,)),
+                 settings.STATIC_URL,
+                 reverse('admin:rh_dossier_change', args=(d.id,)))
+
+            poste = u"""<a title="Aperçu du poste"
+                           href="%s"
+                           onclick="return showAddAnotherPopup(this);"
+                           title="Aperçu du poste">
+                           <img src="%simg/loupe.png" />
+                        </a>
+                        <a href="%s">Poste</a>
+                        &nbsp;""" % \
+                (reverse('poste_apercu', args=(d.poste.id,)),
+                 settings.STATIC_URL,
+                 reverse('admin:rh_poste_change', args=(d.poste.id,)))
             link = u"""<li>%s %s - %s : [%s] %s</li>""" % \
                 (dossier, poste,
                  d.date_debut.year,
@@ -454,7 +547,7 @@ class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, ad
     _dossiers_postes.short_description = u"Dossiers et postes"
 
     def queryset(self, request):
-        qs = super(EmployeAdmin, self).queryset(request) 
+        qs = super(EmployeAdmin, self).queryset(request)
         return qs.select_related(depth=1).order_by('nom')
 
     def save_formset(self, request, form, formset, change):
@@ -465,19 +558,30 @@ class EmployeAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, ad
                 instance.date_creation = datetime.datetime.now()
             instance.save()
 
+
 class EmployeProxyAdmin(EmployeAdmin):
-    list_display = ('_id', '_apercu', '_nom', '_organigramme') 
+    list_display = ('_id', '_apercu', '_nom', '_organigramme')
     list_display_links = ('_nom',)
 
+    def has_add_permission(self, obj):
+        return False
+
     def _organigramme(self, obj):
         l = []
         for d in obj.rh_dossiers.all().order_by('-date_debut'):
-            poste = u"""<a title="Aperçu du poste" href="%s" onclick="return showAddAnotherPopup(this);" title="Aperçu du poste"><img src="%simg/loupe.png" /></a><a href="%s">Poste</a>&nbsp;""" % \
-                                 (  reverse('poste_apercu', args=(d.poste.id,)),
-                                    settings.STATIC_URL,
-                                    reverse('admin:rh_poste_change', args=(d.poste.id,))
-                                 )
-            organigramme = u"""<a href="%s">Organigramme</a>""" % (reverse('rho_employe', args=(d.poste.id,)))
+            poste = u"""<a title="Aperçu du poste"
+                           href="%s"
+                           onclick="return showAddAnotherPopup(this);"
+                           title="Aperçu du poste">
+                           <img src="%simg/loupe.png" />
+                        </a>
+                        <a href="%s">Poste</a>
+                        &nbsp;""" % \
+            (reverse('poste_apercu', args=(d.poste.id,)),
+             settings.STATIC_URL,
+             reverse('admin:rh_poste_change', args=(d.poste.id,)))
+            organigramme = u"""<a href="%s">Organigramme</a>""" % \
+                    (reverse('rho_employe', args=(d.poste.id,)))
             link = u"""<li>%s - %s - %s : [%s] %s</li>""" % \
                 (poste, organigramme,
                  d.date_debut.year,
@@ -491,7 +595,6 @@ class EmployeProxyAdmin(EmployeAdmin):
     _organigramme.short_description = "Organigramme"
 
 
-
 class EmployeCommentaireAdmin(admin.ModelAdmin):
     pass
 
@@ -503,58 +606,64 @@ class EmployePieceAdmin(admin.ModelAdmin):
 class FamilleEmploiAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     list_display = ('nom', '_date_modification', 'user_modification', )
     inlines = (TypePosteInline,)
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
-        (None, {
-            'fields': ('nom', )
-        }),
-        )
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
+        (None, {'fields': ('nom', )}),)
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
+
 class OrganismeBstgAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     search_fields = ('nom',)
-    list_display = ('nom', 'type', 'pays', '_date_modification', 'user_modification', )
+    list_display = (
+            'nom',
+            'type',
+            'pays',
+            '_date_modification',
+            'user_modification',
+            )
     list_filter = ('type', )
     inlines = (DossierROInline,)
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
-        (None, {
-            'fields': ('nom', 'type', 'pays', )
-        }),
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
+        (None, {'fields': ('nom', 'type', 'pays',)}),
         )
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
 
-class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admin.ModelAdmin, AjaxSelect,):
-    form =  make_ajax_form(rh.Poste, {
-        'implantation' : 'implantations',
-        'type_poste' : 'typepostes',
-        'responsable' : 'postes',
-        'valeur_point_min' : 'valeurpoints',
-        'valeur_point_max' : 'valeurpoints',
+class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, \
+        ProtectRegionMixin, admin.ModelAdmin, AjaxSelect,):
+    form = make_ajax_form(rh.Poste, {
+        'implantation': 'implantations',
+        'type_poste': 'typepostes',
+        'responsable': 'postes',
+        'valeur_point_min': 'valeurpoints',
+        'valeur_point_max': 'valeurpoints',
     })
     alphabet_filter = 'nom'
-    search_fields = ('nom', 
-        'implantation__code', 
-        'implantation__nom', 
-        'implantation__region__code', 
-        'implantation__region__nom',
-        'rh_dossiers__employe__nom',
-        'rh_dossiers__employe__prenom',
-        )
+    search_fields = (
+            'nom',
+            'implantation__code',
+            'implantation__nom',
+            'implantation__region__code',
+            'implantation__region__nom',
+            'rh_dossiers__employe__nom',
+            'rh_dossiers__employe__prenom',
+            )
     list_display = (
         '_id',
         '_apercu',
-        '_nom', 
+        '_nom',
         '_occupe_par',
-        'implantation', 
-        '_service', 
+        'implantation',
+        '_service',
         '_responsable',
         'date_debut',
         'date_fin',
@@ -562,44 +671,60 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admi
         'user_modification',
         )
     list_filter = (
-        'implantation__region', 
+        'implantation__region',
         'implantation',
-        'service', 
+        'service',
         'type_poste',
         'type_poste__famille_emploi',
         'vacant',
         )
     list_display_links = ('_nom',)
     fieldsets = AUFMetadataAdminMixin.fieldsets + (
-        (None, {
-            'fields': (('nom', 'nom_feminin'), 'implantation', 'type_poste',
-                       'service', 'responsable')
-        }),
+        (None, {'fields': (
+                ('nom', 'nom_feminin'),
+                'implantation',
+                'type_poste',
+                'service',
+                'responsable',
+                )}
+                ),
         ('Contrat', {
-            'fields': (('regime_travail', 'regime_travail_nb_heure_semaine'), )
-        }),
+            'fields': ((
+                'regime_travail',
+                'regime_travail_nb_heure_semaine'),
+                )}
+            ),
         ('Recrutement', {
-            'fields': (('local', 'expatrie', 'mise_a_disposition', 'appel'),)
-        }),
+            'fields': (('local', 'expatrie', 'mise_a_disposition', 'appel'),)}
+            ),
         ('Rémunération', {
-            'fields': (('classement_min', 'valeur_point_min', 'devise_min', 'salaire_min', 'indemn_min', 'autre_min', ),
-                       ('classement_max', 'valeur_point_max' ,'devise_max', 'salaire_max', 'indemn_max', 'autre_max', ),
-                        )
-        }),
+            'fields': (('classement_min',
+                        'valeur_point_min',
+                        'devise_min',
+                        'salaire_min',
+                        'indemn_min',
+                        'autre_min',),
+                       ('classement_max',
+                        'valeur_point_max',
+                        'devise_max',
+                        'salaire_max',
+                        'indemn_max',
+                        'autre_max',),
+                        )}),
         ('Comparatifs de rémunération', {
             'fields': ('devise_comparaison',
                        ('comp_locale_min', 'comp_locale_max'),
                        ('comp_universite_min', 'comp_universite_max'),
                        ('comp_fonctionpub_min', 'comp_fonctionpub_max'),
                        ('comp_ong_min', 'comp_ong_max'),
-                       ('comp_autre_min', 'comp_autre_max'))
-        }),
+                       ('comp_autre_min', 'comp_autre_max'))}
+            ),
         ('Justification', {
-            'fields': ('justification',)
-        }),
+            'fields': ('justification',)}
+            ),
         ('Autres Méta-données', {
-            'fields': ('date_debut', 'date_fin')
-        }),
+            'fields': ('date_debut', 'date_fin')}
+            ),
     )
 
     inlines = (PosteFinancementInline,
@@ -608,7 +733,6 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admi
                PosteComparaisonInline,
                PosteCommentaireInline, )
 
-
     def lookup_allowed(self, key, value):
         if key in (
             'date_debut__gte',
@@ -626,13 +750,15 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admi
             ):
             return True
 
-    
     def _apercu(self, poste):
-        view_link = u"""<a onclick="return showAddAnotherPopup(this);" title="Aperçu du poste" href='%s'><img src="%simg/loupe.png" /></a>""" % \
+        view_link = u"""<a onclick="return showAddAnotherPopup(this);"
+                           title="Aperçu du poste"
+                           href='%s'>
+                        <img src="%simg/loupe.png" />
+                        </a>""" % \
                 (reverse('poste_apercu', args=(poste.id,)),
-                 settings.STATIC_URL,
-                 )
-        return view_link 
+                 settings.STATIC_URL,)
+        return view_link
     _apercu.allow_tags = True
     _apercu.short_description = ''
 
@@ -651,26 +777,33 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admi
 
     def _responsable(self, obj):
         try:
-            responsable = u"""<a href="%s" onclick="return showAddAnotherPopup(this)"><img src="%simg/loupe.png" title="Aperçu du poste"></a> <a href="%s">%s</a><br />""" % \
-                    (
-                            reverse('poste_apercu', args=(obj.responsable.id,)),
-                            settings.STATIC_URL,
-                            reverse('admin:rh_poste_change', args=(obj.responsable.id,)),
-                            obj.responsable.nom
-                    )
+            responsable = u"""<a href="%s"
+                                 onclick="return showAddAnotherPopup(this)">
+                                <img src="%simg/loupe.png"
+                                     title="Aperçu du poste" />
+                              </a>
+                              <a href="%s">%s</a>
+                              <br />""" % \
+                (reverse('poste_apercu', args=(obj.responsable.id,)),
+                settings.STATIC_URL,
+                reverse('admin:rh_poste_change', args=(obj.responsable.id,)),
+                obj.responsable.nom)
         except:
             responsable = ''
 
         try:
-            employeposte_change = "%s %s" % (obj.responsable.rh_dossiers.all()[0].employe.nom.upper(), obj.responsable.rh_dossiers.all()[0].employe.prenom)
             employe_id = obj.responsable.rh_dossiers.all()[0].id
-            employe = u"""<br /><a href="%s" onclick="return showAddAnotherPopup(this)"><img src="%simg/loupe.png" title="Aperçu de l'employé"></a> <a href="%s">%s</a>""" % \
-                    (
-                            reverse('employe_apercu', args=(employe_id,)),
-                            settings.STATIC_URL,
-                            reverse('admin:rh_employe_change', args=(employe_id,)),
-                            employe
-                    )
+            employe = u"""<br />
+                    <a href="%s"
+                       onclick="return showAddAnotherPopup(this)">
+                       <img src="%simg/loupe.png"
+                            title="Aperçu de l'employé">
+                    </a>
+                    <a href="%s">%s</a>""" % \
+                    (reverse('employe_apercu', args=(employe_id,)),
+                     settings.STATIC_URL,
+                     reverse('admin:rh_employe_change', args=(employe_id,)),
+                     employe)
         except:
             employe = ""
 
@@ -681,8 +814,7 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admi
     def _nom(self, poste):
         return """<a href="%s">%s</a>""" % \
                 (reverse('admin:rh_poste_change', args=(poste.id,)),
-                poste.nom
-                )
+                poste.nom)
     _nom.allow_tags = True
     _nom.short_description = u'Nom'
     _nom.admin_order_field = 'nom'
@@ -701,17 +833,21 @@ class PosteAdmin(DateRangeMixin, AUFMetadataAdminMixin, ProtectRegionMixin, admi
         if employes:
             l = []
             for e in employes:
-                link = "<a href='%s' title='Aperçu de l\'employer' onclick='return showAddAnotherPopup(this)'><img src='%simg/loupe.png' /></a> <a href='%s'>%s</a>" % \
+                link = u"""<a href='%s'
+                              title='Aperçu de l\'employer'
+                              onclick='return showAddAnotherPopup(this)'>
+                              <img src='%simg/loupe.png' />
+                            </a>
+                            <a href='%s'>%s</a>""" % \
                      (reverse('employe_apercu', args=(e.id,)),
                      settings.STATIC_URL,
                      reverse('admin:rh_employe_change', args=(e.id,)),
-                     e
-                     )
+                     e)
                 l.append(link)
             output = "\n<br />".join(l)
         return output
     _occupe_par.allow_tags = True
-    _occupe_par.short_description = "Occupé par"   
+    _occupe_par.short_description = "Occupé par"
 
     def save_formset(self, request, form, formset, change):
         instances = formset.save(commit=False)
@@ -740,17 +876,22 @@ class RemunerationAdmin(admin.ModelAdmin):
 
 
 class ResponsableImplantationAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
             'fields': ('employe', 'implantation', ),
         }),
         )
-    
+
 
 class ServiceAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
-    list_display = ('nom', '_archive', '_date_modification', 'user_modification', )
+    list_display = (
+            'nom',
+            '_archive',
+            '_date_modification',
+            'user_modification',
+            )
     list_filter = ('archive', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
             'fields': ('nom', 'archive', ),
         }),
@@ -764,107 +905,144 @@ class ServiceAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     _archive.short_description = u'Archivé'
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
 
 class StatutAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     list_display = ('code', 'nom', '_date_modification', 'user_modification', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
             'fields': ('code', 'nom', ),
         }),
         )
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
+
 class TauxChangeAdmin(admin.ModelAdmin):
-    list_display = ('taux', 'devise', 'annee', '_date_modification', 'user_modification', )
+    list_display = (
+            'taux',
+            'devise',
+            'annee',
+            '_date_modification',
+            'user_modification',
+            )
     list_filter = ('devise', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
             'fields': ('taux', 'devise', 'annee', ),
         }),
         )
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
+
 class TypeContratAdmin(admin.ModelAdmin):
-    list_display = ('nom', 'nom_long', '_date_modification', 'user_modification', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
+    list_display = (
+            'nom',
+            'nom_long',
+            '_date_modification',
+            'user_modification',
+            )
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
             'fields': ('nom', 'nom_long', ),
         }),
         )
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
 
 class TypePosteAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     search_fields = ('nom', 'nom_feminin', )
-    list_display = ('nom', 'famille_emploi', '_date_modification', 'user_modification', )
+    list_display = (
+            'nom',
+            'famille_emploi',
+            '_date_modification',
+            'user_modification',
+            )
     list_filter = ('famille_emploi', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
         (None, {
-            'fields': ('nom', 'nom_feminin', 'is_responsable', 'famille_emploi',  )
-        }),
+            'fields': (
+                'nom',
+                'nom_feminin',
+                'is_responsable',
+                'famille_emploi',
+                )}
+            ),
         )
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
 
 class TypeRemunerationAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
-    list_display = ('nom', 'type_paiement', 'nature_remuneration', '_date_modification', 'user_modification', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
-        (None, {
-            'fields': ('nom', 'type_paiement', 'nature_remuneration', )
-        }),
+    list_display = (
+            'nom',
+            'type_paiement',
+            'nature_remuneration',
+            '_date_modification',
+            'user_modification',)
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
+        (None, {'fields': ('nom', 'type_paiement', 'nature_remuneration',)}),
         )
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
 
 class TypeRevalorisationAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
     list_display = ('nom', '_date_modification', 'user_modification', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
-        (None, {
-            'fields': ('nom', )
-        }),
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
+        (None, {'fields': ('nom', )}),
         )
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
 
 class ValeurPointAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
-    list_display = ('_devise_code', '_devise_nom', 'annee', 'valeur',  '_date_modification', 'user_modification', )
+    list_display = (
+            '_devise_code',
+            '_devise_nom',
+            'annee',
+            'valeur',
+            '_date_modification',
+            'user_modification',
+            )
     list_filter = ('annee', 'devise', )
-    fieldsets = AUFMetadataAdminMixin.fieldsets + ( 
-        (None, {
-            'fields': ('valeur', 'devise', 'implantation', 'annee', )
-        }),
+    fieldsets = AUFMetadataAdminMixin.fieldsets + (
+        (None, {'fields': ('valeur', 'devise', 'implantation', 'annee', )}),
         )
 
     def _date_modification(self, obj):
-        return date(obj.date_modification) if obj.date_modification is not None else "(aucune)"
+        return date(obj.date_modification) \
+                if obj.date_modification is not None else "(aucune)"
     _date_modification.short_description = u'date modification'
     _date_modification.admin_order_field = 'date_modification'
 
@@ -880,7 +1058,7 @@ class ValeurPointAdmin(AUFMetadataAdminMixin, admin.ModelAdmin):
 admin.site.register(rh.Classement, ClassementAdmin)
 admin.site.register(rh.Devise, DeviseAdmin)
 admin.site.register(rh.Dossier, DossierAdmin)
-admin.site.register(rh.EmployeProxy, EmployeProxyAdmin)
+admin.site.register(EmployeProxy, EmployeProxyAdmin)
 admin.site.register(rh.Employe, EmployeAdmin)
 admin.site.register(rh.FamilleEmploi, FamilleEmploiAdmin)
 admin.site.register(rh.OrganismeBstg, OrganismeBstgAdmin)