PEP8
authorEric Mc Sween <eric.mcsween@auf.org>
Thu, 17 May 2012 21:27:01 +0000 (17:27 -0400)
committerEric Mc Sween <eric.mcsween@auf.org>
Fri, 18 May 2012 14:45:16 +0000 (10:45 -0400)
project/rh/models.py

index 075617f..5ea7fda 100644 (file)
@@ -4,27 +4,34 @@ import datetime
 from datetime import date
 from decimal import Decimal
 
+from auf.django.emploi.models import \
+        GENRE_CHOICES, SITUATION_CHOICES  # devrait plutot être dans references
+from auf.django.metadata.models import AUFMetadata
+from auf.django.metadata.managers import NoDeleteManager
+from auf.django.references import models as ref
 from django.core.files.storage import FileSystemStorage
 from django.db import models
 from django.db.models import Q
 from django.conf import settings
 
-from auf.django.emploi.models import GENRE_CHOICES, SITUATION_CHOICES # devrait plutot être dans references
-from auf.django.metadata.models import AUFMetadata
-from auf.django.metadata.managers import NoDeleteManager
-import auf.django.references.models as ref
+from change_list import \
+        RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, STATUT_INACTIF, \
+        STATUT_FUTUR
+from managers import \
+        PosteManager, DossierManager, DossierComparaisonManager, \
+        PosteComparaisonManager, DeviseManager, ServiceManager, \
+        TypeRemunerationManager
 from validators import validate_date_passee
-from managers import PosteManager, DossierManager, DossierComparaisonManager, \
-    PosteComparaisonManager, DeviseManager, ServiceManager, TypeRemunerationManager
-from change_list import RechercheTemporelle, KEY_STATUT, STATUT_ACTIF, \
-    STATUT_INACTIF, STATUT_FUTUR
 
 
-# Gruick hack pour déterminer d'ou provient l'instanciation d'une classe pour l'héritage.
-# Cela permet de faire du dynamic loading par app sans avoir à redéfinir dans DAE la FK
+# Gruick hack pour déterminer d'ou provient l'instanciation d'une classe
+# pour l'héritage.  Cela permet de faire du dynamic loading par app sans
+# avoir à redéfinir dans DAE la FK
 def app_context():
-    import inspect;
-    models_stack = [s[1].split('/')[-2] for s in inspect.stack() if s[1].endswith('models.py')]
+    import inspect
+    models_stack = [s[1].split('/')[-2]
+                    for s in inspect.stack()
+                    if s[1].endswith('models.py')]
     return models_stack[-1]
 
 
@@ -32,26 +39,40 @@ def app_context():
 HELP_TEXT_DATE = "format: jj-mm-aaaa"
 REGIME_TRAVAIL_DEFAULT = Decimal('100.00')
 REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT = Decimal('35.00')
-REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT = "Saisir le nombre d'heure de travail à temps complet (100%), sans tenir compte du régime de travail"
+REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT = \
+        "Saisir le nombre d'heure de travail à temps complet (100%), " \
+        "sans tenir compte du régime de travail"
 
 # Upload de fichiers
 storage_prive = FileSystemStorage(settings.PRIVE_MEDIA_ROOT,
                             base_url=settings.PRIVE_MEDIA_URL)
 
+
 def poste_piece_dispatch(instance, filename):
-    path = "%s/poste/%s/%s" % (instance._meta.app_label, instance.poste_id, filename)
+    path = "%s/poste/%s/%s" % (
+        instance._meta.app_label, instance.poste_id, filename
+    )
     return path
 
+
 def dossier_piece_dispatch(instance, filename):
-    path = "%s/dossier/%s/%s" % (instance._meta.app_label, instance.dossier_id, filename)
+    path = "%s/dossier/%s/%s" % (
+        instance._meta.app_label, instance.dossier_id, filename
+    )
     return path
 
+
 def employe_piece_dispatch(instance, filename):
-    path = "%s/employe/%s/%s" % (instance._meta.app_label, instance.employe_id, filename)
+    path = "%s/employe/%s/%s" % (
+        instance._meta.app_label, instance.employe_id, filename
+    )
     return path
 
+
 def contrat_dispatch(instance, filename):
-    path = "%s/contrat/%s/%s" % (instance._meta.app_label, instance.dossier_id, filename)
+    path = "%s/contrat/%s/%s" % (
+        instance._meta.app_label, instance.dossier_id, filename
+    )
     return path
 
 
@@ -60,7 +81,6 @@ class DevisableMixin(object):
     def get_annee_pour_taux_devise(self):
         return datetime.datetime.now().year
 
-
     def taux_devise(self, devise=None):
         if devise is None:
             devise = self.devise
@@ -71,12 +91,17 @@ class DevisableMixin(object):
             return 1
 
         annee = self.get_annee_pour_taux_devise()
-        taux = [tc.taux for tc in TauxChange.objects.filter(devise=devise, annee=annee)]
+        taux = [
+            tc.taux
+            for tc in TauxChange.objects.filter(devise=devise, annee=annee)
+        ]
         taux = set(taux)
 
         if len(taux) == 0:
-            raise Exception(u"Pas de taux pour %s en %s" % (devise.code, annee))
-            
+            raise Exception(
+                u"Pas de taux pour %s en %s" % (devise.code, annee)
+            )
+
         if len(taux) > 1:
             raise Exception(u"Il existe plusieurs taux de %s en %s" %
                     (devise.code, annee))
@@ -95,7 +120,10 @@ class DevisableMixin(object):
 
 class Commentaire(AUFMetadata):
     texte = models.TextField()
-    owner = models.ForeignKey('auth.User', db_column='owner', related_name='+', verbose_name=u"Commentaire de")
+    owner = models.ForeignKey(
+        'auth.User', db_column='owner', related_name='+',
+        verbose_name=u"Commentaire de"
+    )
 
     class Meta:
         abstract = True
@@ -112,8 +140,10 @@ POSTE_APPEL_CHOICES = (
     ('externe', 'Externe'),
 )
 
+
 class Poste_(AUFMetadata):
-    """Un Poste est un emploi (job) à combler dans une implantation.
+    """
+    Un Poste est un emploi (job) à combler dans une implantation.
     Un Poste peut être comblé par un Employe, auquel cas un Dossier est créé.
     Si on veut recruter 2 jardiniers, 2 Postes distincts existent.
     """
@@ -121,114 +151,150 @@ class Poste_(AUFMetadata):
     objects = PosteManager()
 
     # Identification
-    nom = models.CharField(max_length=255,
-                            verbose_name = u"Titre du poste", )
-    nom_feminin = models.CharField(max_length=255,
-                            verbose_name = u"Titre du poste (au féminin)",
-                            null=True)
-    implantation = models.ForeignKey(ref.Implantation, help_text=u"Taper le nom de l'implantation ou sa région", 
-                            db_column='implantation', related_name='+')
-    type_poste = models.ForeignKey('TypePoste', db_column='type_poste', help_text=u"Taper le nom du type de poste",
-                            related_name='+',
-                            null=True,
-                            verbose_name=u"type de poste")
-    service = models.ForeignKey('Service', db_column='service',
-                            related_name='+',
-                            verbose_name = u"direction/service/pôle support",
-                            null=True,)
-    responsable = models.ForeignKey('Poste', db_column='responsable', 
-                            related_name='+',
-                            null=True,
-                            help_text=u"Taper le nom du poste ou du type de poste", 
-                            verbose_name = u"Poste du responsable", )
-                                
+    nom = models.CharField(u"Titre du poste", max_length=255)
+    nom_feminin = models.CharField(
+         u"Titre du poste (au féminin)", max_length=255, null=True
+    )
+    implantation = models.ForeignKey(
+        ref.Implantation,
+        help_text=u"Taper le nom de l'implantation ou sa région",
+        db_column='implantation', related_name='+'
+    )
+    type_poste = models.ForeignKey(
+        'TypePoste', db_column='type_poste',
+        help_text=u"Taper le nom du type de poste", related_name='+',
+        null=True, verbose_name=u"type de poste"
+    )
+    service = models.ForeignKey(
+        'Service', db_column='service', related_name='+',
+        verbose_name=u"direction/service/pôle support", null=True
+    )
+    responsable = models.ForeignKey(
+        'Poste', db_column='responsable',
+        related_name='+', null=True,
+        help_text=u"Taper le nom du poste ou du type de poste",
+        verbose_name=u"Poste du responsable"
+    )
+
     # Contrat
-    regime_travail = models.DecimalField(max_digits=12, decimal_places=2,
-                            default=REGIME_TRAVAIL_DEFAULT, null=True,
-                            verbose_name = u"Temps de travail",
-                            help_text="% du temps complet")
-    regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
-                            decimal_places=2, null=True,
-                            default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
-                            verbose_name= u"Nb. heures par semaine",
-                            help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT)
+    regime_travail = models.DecimalField(
+        u"temps de travail", max_digits=12, decimal_places=2,
+        default=REGIME_TRAVAIL_DEFAULT, null=True,
+        help_text="% du temps complet"
+    )
+    regime_travail_nb_heure_semaine = models.DecimalField(
+        u"nb. heures par semaine", max_digits=12, decimal_places=2,
+        null=True, default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
+        help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT
+    )
 
     # Recrutement
-    local = models.NullBooleanField(verbose_name = u"Local", default=True,
-                            null=True, blank=True)
-    expatrie = models.NullBooleanField(verbose_name = u"Expatrié", default=False,
-                            null=True, blank=True)
+    local = models.NullBooleanField(
+        u"local", default=True, null=True, blank=True
+    )
+    expatrie = models.NullBooleanField(
+        u"expatrié", default=False, null=True, blank=True
+    )
     mise_a_disposition = models.NullBooleanField(
-                            verbose_name = u"Mise à disposition",
-                            null=True, default=False)
-    appel = models.CharField(max_length=10, null=True,
-                            verbose_name = u"Appel à candidature",
-                            choices=POSTE_APPEL_CHOICES,
-                            default='interne')
+        u"mise à disposition", null=True, default=False
+    )
+    appel = models.CharField(
+        u"Appel à candidature", max_length=10, null=True,
+        choices=POSTE_APPEL_CHOICES, default='interne'
+    )
 
     # Rémunération
-    classement_min = models.ForeignKey('Classement',
-                            db_column='classement_min', related_name='+',
-                            null=True, blank=True)
-    classement_max = models.ForeignKey('Classement',
-                            db_column='classement_max', related_name='+',
-                            null=True, blank=True)
-    valeur_point_min = models.ForeignKey('ValeurPoint', help_text=u"Taper le code ou le nom de l'implantation",
-                            db_column='valeur_point_min', related_name='+',
-                            null=True, blank=True)
-    valeur_point_max = models.ForeignKey('ValeurPoint', help_text=u"Taper le code ou le nom de l'implantation",
-                            db_column='valeur_point_max', related_name='+',
-                            null=True, blank=True)
-    devise_min = models.ForeignKey('Devise', db_column='devise_min', null=True,
-                            related_name='+',)
-    devise_max = models.ForeignKey('Devise', db_column='devise_max', null=True,
-                            related_name='+',)
-    salaire_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    salaire_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    indemn_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    indemn_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    autre_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
-    autre_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, default=0)
+    classement_min = models.ForeignKey(
+        'Classement', db_column='classement_min', related_name='+',
+        null=True, blank=True
+    )
+    classement_max = models.ForeignKey(
+        'Classement', db_column='classement_max', related_name='+',
+        null=True, blank=True
+    )
+    valeur_point_min = models.ForeignKey(
+        'ValeurPoint',
+        help_text=u"Taper le code ou le nom de l'implantation",
+        db_column='valeur_point_min', related_name='+', null=True,
+        blank=True
+    )
+    valeur_point_max = models.ForeignKey(
+        'ValeurPoint',
+        help_text=u"Taper le code ou le nom de l'implantation",
+        db_column='valeur_point_max', related_name='+', null=True,
+        blank=True
+    )
+    devise_min = models.ForeignKey(
+        'Devise', db_column='devise_min', null=True, related_name='+'
+    )
+    devise_max = models.ForeignKey(
+        'Devise', db_column='devise_max', null=True, related_name='+'
+    )
+    salaire_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    salaire_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    indemn_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    indemn_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    autre_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
+    autre_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, default=0
+    )
 
     # Comparatifs de rémunération
-    devise_comparaison = models.ForeignKey('Devise', null=True, blank=True,
-                            db_column='devise_comparaison',
-                            related_name='+', )
-    comp_locale_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_locale_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_universite_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_universite_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_fonctionpub_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_fonctionpub_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_ong_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_ong_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_autre_min = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
-    comp_autre_max = models.DecimalField(max_digits=12, decimal_places=2,
-                            null=True, blank=True)
+    devise_comparaison = models.ForeignKey(
+        'Devise', null=True, blank=True, db_column='devise_comparaison',
+        related_name='+'
+    )
+    comp_locale_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_locale_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_universite_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_universite_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_fonctionpub_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_fonctionpub_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_ong_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_ong_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_autre_min = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
+    comp_autre_max = models.DecimalField(
+        max_digits=12, decimal_places=2, null=True, blank=True
+    )
 
     # Justification
     justification = models.TextField(null=True, blank=True)
 
     # Autres Metadata
-    date_debut = models.DateField(verbose_name=u"Date de début", help_text=HELP_TEXT_DATE,
-                            null=True, blank=True)
-    date_fin = models.DateField(verbose_name=u"Date de fin", help_text=HELP_TEXT_DATE,
-                            null=True, blank=True)
+    date_debut = models.DateField(
+        u"date de début", help_text=HELP_TEXT_DATE, null=True, blank=True
+    )
+    date_fin = models.DateField(
+        u"date de fin", help_text=HELP_TEXT_DATE, null=True, blank=True
+    )
 
     class Meta:
         abstract = True
@@ -238,27 +304,31 @@ class Poste_(AUFMetadata):
         ordering = ["nom"]
 
     def __unicode__(self):
-        representation = u'%s - %s [%s]' % (self.implantation, self.nom,
-                            self.id)
+        representation = u'%s - %s [%s]' % (
+            self.implantation, self.nom, self.id
+        )
         return representation
 
-
     prefix_implantation = "implantation__region"
+
     def get_regions(self):
         return [self.implantation.region]
 
     def get_devise(self):
-        vp = ValeurPoint.objects.filter(implantation=self.implantation, devise__archive=False).order_by('annee')
+        vp = ValeurPoint.objects.filter(
+            implantation=self.implantation, devise__archive=False
+        ).order_by('annee')
         if len(vp) > 0:
             return vp[0].devise
         else:
             return Devise.objects.get(code='EUR')
 
+
 class Poste(Poste_):
     __doc__ = Poste_.__doc__
 
     # meta dématérialisation :  pour permettre le filtrage
-    vacant = models.NullBooleanField(verbose_name = u"vacant", null=True, blank=True)
+    vacant = models.NullBooleanField(u"vacant", null=True, blank=True)
 
     def is_vacant(self):
         vacant = True
@@ -267,12 +337,17 @@ class Poste(Poste_):
         return vacant
 
     def occupe_par(self):
-        """Retourne la liste d'employé occupant ce poste.
+        """
+        Retourne la liste d'employé occupant ce poste.
         Généralement, retourne une liste d'un élément.
         Si poste inoccupé, retourne liste vide.
         UTILISE pour mettre a jour le flag vacant
         """
-        return [d.employe for d in self.rh_dossiers.filter(supprime=False).exclude(date_fin__lt=date.today())]
+        return [
+            d.employe for d in self.rh_dossiers
+            .filter(supprime=False)
+            .exclude(date_fin__lt=date.today())
+        ]
 
 
 POSTE_FINANCEMENT_CHOICES = (
@@ -283,15 +358,22 @@ POSTE_FINANCEMENT_CHOICES = (
 
 
 class PosteFinancement_(models.Model):
-    """Pour un Poste, structure d'informations décrivant comment on prévoit
+    """
+    Pour un Poste, structure d'informations décrivant comment on prévoit
     financer ce Poste.
     """
-    poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='%(app_label)s_financements')
+    poste = models.ForeignKey(
+        '%s.Poste' % app_context(), db_column='poste',
+        related_name='%(app_label)s_financements'
+    )
     type = models.CharField(max_length=1, choices=POSTE_FINANCEMENT_CHOICES)
-    pourcentage = models.DecimalField(max_digits=12, decimal_places=2,
-            help_text="ex.: 33.33 % (décimale avec point)")
+    pourcentage = models.DecimalField(
+        max_digits=12, decimal_places=2,
+        help_text="ex.: 33.33 % (décimale avec point)"
+    )
     commentaire = models.TextField(
-            help_text="Spécifiez la source de financement.")
+        help_text="Spécifiez la source de financement."
+    )
 
     class Meta:
         abstract = True
@@ -309,14 +391,18 @@ class PosteFinancement(PosteFinancement_):
 
 
 class PostePiece_(models.Model):
-    """Documents relatifs au Poste.
+    """
+    Documents relatifs au Poste.
     Ex.: Description de poste
     """
-    poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='%(app_label)s_pieces')
-    nom = models.CharField(verbose_name = u"Nom", max_length=255)
-    fichier = models.FileField(verbose_name = u"Fichier",
-                            upload_to=poste_piece_dispatch,
-                            storage=storage_prive)
+    poste = models.ForeignKey(
+        '%s.Poste' % app_context(), db_column='poste',
+        related_name='%(app_label)s_pieces'
+    )
+    nom = models.CharField(u"Nom", max_length=255)
+    fichier = models.FileField(
+        u"Fichier", upload_to=poste_piece_dispatch, storage=storage_prive
+    )
 
     class Meta:
         abstract = True
@@ -325,44 +411,60 @@ class PostePiece_(models.Model):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+
 class PostePiece(PostePiece_):
     pass
 
+
 class PosteComparaison_(AUFMetadata, DevisableMixin):
     """
-    De la même manière qu'un dossier, un poste peut-être comparé à un autre poste.
+    De la même manière qu'un dossier, un poste peut-être comparé à un autre
+    poste.
     """
-    poste = models.ForeignKey('%s.Poste' % app_context(), related_name='%(app_label)s_comparaisons_internes')
+    poste = models.ForeignKey(
+        '%s.Poste' % app_context(),
+        related_name='%(app_label)s_comparaisons_internes'
+    )
     objects = PosteComparaisonManager()
 
-    implantation = models.ForeignKey(ref.Implantation, null=True, blank=True, related_name="+")
-    nom = models.CharField(verbose_name = u"Poste", max_length=255, null=True, blank=True)
+    implantation = models.ForeignKey(
+        ref.Implantation, null=True, blank=True, related_name="+"
+    )
+    nom = models.CharField(u"Poste", max_length=255, null=True, blank=True)
     montant = models.IntegerField(null=True)
-    devise = models.ForeignKey("Devise", related_name='+', null=True, blank=True)
+    devise = models.ForeignKey(
+        "Devise", related_name='+', null=True, blank=True
+    )
 
     class Meta:
         abstract = True
 
-
     def __unicode__(self):
         return self.nom
 
+
 class PosteComparaison(PosteComparaison_):
     objects = NoDeleteManager()
 
+
 class PosteCommentaire_(Commentaire):
-    poste = models.ForeignKey('%s.Poste' % app_context(), db_column='poste', related_name='+')
+    poste = models.ForeignKey(
+        '%s.Poste' % app_context(), db_column='poste', related_name='+'
+    )
 
     class Meta:
         abstract = True
 
+
 class PosteCommentaire(PosteCommentaire_):
     pass
 
+
 ### EMPLOYÉ/PERSONNE
 
 class Employe(AUFMetadata):
-    """Personne occupant ou ayant occupé un Poste. Un Employe aura autant de
+    """
+    Personne occupant ou ayant occupé un Poste. Un Employe aura autant de
     Dossiers qu'il occupe ou a occupé de Postes.
 
     Cette classe aurait pu avantageusement s'appeler Personne car la notion
@@ -370,50 +472,52 @@ class Employe(AUFMetadata):
     """
     # Identification
     nom = models.CharField(max_length=255)
-    prenom = models.CharField(max_length=255, verbose_name = u"Prénom")
-    nom_affichage = models.CharField(max_length=255,
-                            verbose_name = u"Nom d'affichage",
-                            null=True, blank=True)
-    nationalite = models.ForeignKey(ref.Pays, to_field='code',
-                            db_column='nationalite',
-                            related_name='employes_nationalite',
-                            verbose_name = u"Nationalité",
-                            blank=True, null=True)
-    date_naissance = models.DateField(verbose_name = u"Date de naissance",
-                            help_text=HELP_TEXT_DATE,
-                            validators=[validate_date_passee],
-                            null=True, blank=True)
+    prenom = models.CharField(u"prénom", max_length=255)
+    nom_affichage = models.CharField(
+        u"nom d'affichage", max_length=255, null=True, blank=True
+    )
+    nationalite = models.ForeignKey(
+        ref.Pays, to_field='code', db_column='nationalite',
+        related_name='employes_nationalite', verbose_name=u"nationalité",
+        blank=True, null=True
+    )
+    date_naissance = models.DateField(
+        u"date de naissance", help_text=HELP_TEXT_DATE,
+        validators=[validate_date_passee], null=True, blank=True
+    )
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
 
     # Infos personnelles
-    situation_famille = models.CharField(max_length=1,
-                            choices=SITUATION_CHOICES,
-                            verbose_name = u"Situation familiale",
-                            null=True, blank=True)
-    date_entree = models.DateField(verbose_name = u"Date d'entrée à l'AUF",
-                            help_text=HELP_TEXT_DATE,
-                            null=True, blank=True)
+    situation_famille = models.CharField(
+        u"situation familiale", max_length=1, choices=SITUATION_CHOICES,
+        null=True, blank=True
+    )
+    date_entree = models.DateField(
+        u"date d'entrée à l'AUF", help_text=HELP_TEXT_DATE, null=True,
+        blank=True
+    )
 
     # Coordonnées
-    tel_domicile = models.CharField(max_length=255,
-                            verbose_name = u"Tél. domicile",
-                            null=True, blank=True)
-    tel_cellulaire = models.CharField(max_length=255,
-                            verbose_name = u"Tél. cellulaire",
-                            null=True, blank=True)
+    tel_domicile = models.CharField(
+        u"tél. domicile", max_length=255, null=True, blank=True
+    )
+    tel_cellulaire = models.CharField(
+        u"tél. cellulaire", max_length=255, null=True, blank=True
+    )
     adresse = models.CharField(max_length=255, null=True, blank=True)
     ville = models.CharField(max_length=255, null=True, blank=True)
     province = models.CharField(max_length=255, null=True, blank=True)
     code_postal = models.CharField(max_length=255, null=True, blank=True)
-    pays = models.ForeignKey(ref.Pays, to_field='code', db_column='pays',
-                            related_name='employes',
-                            null=True, blank=True)
+    pays = models.ForeignKey(
+        ref.Pays, to_field='code', db_column='pays',
+        related_name='employes', null=True, blank=True
+    )
 
     # meta dématérialisation :  pour permettre le filtrage
-    nb_postes = models.IntegerField(verbose_name = u"nombre de postes", null=True, blank=True)
+    nb_postes = models.IntegerField(u"nombre de postes", null=True, blank=True)
 
     class Meta:
-        ordering = ['nom','prenom']
+        ordering = ['nom', 'prenom']
         verbose_name = u"Employé"
         verbose_name_plural = u"Employés"
 
@@ -429,11 +533,12 @@ class Employe(AUFMetadata):
         return civilite
 
     def url_photo(self):
-        """Retourne l'URL du service retournant la photo de l'Employe.
+        """
+        Retourne l'URL du service retournant la photo de l'Employe.
         Équivalent reverse url 'rh_photo' avec id en param.
         """
         from django.core.urlresolvers import reverse
-        return reverse('rh_photo', kwargs={'id':self.id})
+        return reverse('rh_photo', kwargs={'id': self.id})
 
     def dossiers_passes(self):
         params = {KEY_STATUT: STATUT_INACTIF, }
@@ -476,6 +581,7 @@ class Employe(AUFMetadata):
         return poste
 
     prefix_implantation = "rh_dossiers__poste__implantation__region"
+
     def get_regions(self):
         regions = []
         for d in self.dossiers.all():
@@ -484,15 +590,18 @@ class Employe(AUFMetadata):
 
 
 class EmployePiece(models.Model):
-    """Documents relatifs à un employé.
+    """
+    Documents relatifs à un employé.
     Ex.: CV...
     """
-    employe = models.ForeignKey('Employe', db_column='employe',
-        related_name="pieces")
-    nom = models.CharField(verbose_name="Nom", max_length=255)
-    fichier = models.FileField(verbose_name="Fichier",
-                            upload_to=employe_piece_dispatch,
-                            storage=storage_prive)
+    employe = models.ForeignKey(
+        'Employe', db_column='employe', related_name="pieces",
+        verbose_name=u"employé"
+    )
+    nom = models.CharField(max_length=255)
+    fichier = models.FileField(
+        u"fichier", upload_to=employe_piece_dispatch, storage=storage_prive
+    )
 
     class Meta:
         ordering = ['nom']
@@ -502,9 +611,11 @@ class EmployePiece(models.Model):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+
 class EmployeCommentaire(Commentaire):
-    employe = models.ForeignKey('Employe', db_column='employe',
-                            related_name='+')
+    employe = models.ForeignKey(
+        'Employe', db_column='employe', related_name='+'
+    )
 
     class Meta:
         verbose_name = u"Employé commentaire"
@@ -518,35 +629,37 @@ LIEN_PARENTE_CHOICES = (
     ('Fils', 'Fils'),
 )
 
+
 class AyantDroit(AUFMetadata):
-    """Personne en relation avec un Employe.
+    """
+    Personne en relation avec un Employe.
     """
     # Identification
     nom = models.CharField(max_length=255)
-    prenom = models.CharField(max_length=255,
-                            verbose_name = u"Prénom",)
-    nom_affichage = models.CharField(max_length=255,
-                            verbose_name = u"Nom d'affichage",
-                            null=True, blank=True)
-    nationalite = models.ForeignKey(ref.Pays, to_field='code',
-                            db_column='nationalite',
-                            related_name='ayantdroits_nationalite',
-                            verbose_name = u"Nationalité",
-                            null=True, blank=True)
-    date_naissance = models.DateField(verbose_name = u"Date de naissance",
-                            help_text=HELP_TEXT_DATE,
-                            validators=[validate_date_passee],
-                            null=True, blank=True)
+    prenom = models.CharField(u"prénom", max_length=255)
+    nom_affichage = models.CharField(
+        u"nom d'affichage", max_length=255, null=True, blank=True
+    )
+    nationalite = models.ForeignKey(
+        ref.Pays, to_field='code', db_column='nationalite',
+        related_name='ayantdroits_nationalite',
+        verbose_name=u"nationalité", null=True, blank=True
+    )
+    date_naissance = models.DateField(
+        u"Date de naissance", help_text=HELP_TEXT_DATE,
+        validators=[validate_date_passee], null=True, blank=True
+    )
     genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
 
     # Relation
-    employe = models.ForeignKey('Employe', db_column='employe',
-                            related_name='ayantdroits',
-                            verbose_name = u"Employé")
-    lien_parente = models.CharField(max_length=10,
-                            choices=LIEN_PARENTE_CHOICES,
-                            verbose_name = u"Lien de parenté",
-                            null=True, blank=True)
+    employe = models.ForeignKey(
+        'Employe', db_column='employe', related_name='ayantdroits',
+        verbose_name=u"Employé"
+    )
+    lien_parente = models.CharField(
+        u"lien de parenté", max_length=10, choices=LIEN_PARENTE_CHOICES,
+        null=True, blank=True
+    )
 
     class Meta:
         ordering = ['nom', ]
@@ -557,6 +670,7 @@ class AyantDroit(AUFMetadata):
         return u'%s %s' % (self.nom.upper(), self.prenom, )
 
     prefix_implantation = "employe__dossiers__poste__implantation__region"
+
     def get_regions(self):
         regions = []
         for d in self.employe.dossiers.all():
@@ -565,8 +679,9 @@ class AyantDroit(AUFMetadata):
 
 
 class AyantDroitCommentaire(Commentaire):
-    ayant_droit = models.ForeignKey('AyantDroit', db_column='ayant_droit',
-                            related_name='+')
+    ayant_droit = models.ForeignKey(
+        'AyantDroit', db_column='ayant_droit', related_name='+'
+    )
 
 
 ### DOSSIER
@@ -582,8 +697,10 @@ COMPTE_COMPTA_CHOICES = (
     ('aucun', 'Aucun'),
 )
 
+
 class Dossier_(AUFMetadata, DevisableMixin):
-    """Le Dossier regroupe les informations relatives à l'occupation
+    """
+    Le Dossier regroupe les informations relatives à l'occupation
     d'un Poste par un Employe. Un seul Dossier existe par Poste occupé
     par un Employe.
 
@@ -596,45 +713,47 @@ class Dossier_(AUFMetadata, DevisableMixin):
 
     # TODO: OneToOne ??
     statut = models.ForeignKey('Statut', related_name='+', null=True)
-    organisme_bstg = models.ForeignKey('OrganismeBstg',
-                            db_column='organisme_bstg',
-                            related_name='+',
-                            verbose_name = u"Organisme",
-                            help_text="Si détaché (DET) ou \
-                                    mis à disposition (MAD), \
-                                    préciser l'organisme.",
-                            null=True, blank=True)
+    organisme_bstg = models.ForeignKey(
+        'OrganismeBstg', db_column='organisme_bstg', related_name='+',
+        verbose_name=u"organisme",
+        help_text=(
+            u"Si détaché (DET) ou mis à disposition (MAD), "
+            u"préciser l'organisme."
+        ), null=True, blank=True
+    )
 
     # Recrutement
     remplacement = models.BooleanField(default=False)
-    remplacement_de = models.ForeignKey('self', related_name='+',
-                            help_text=u"Taper le nom de l'employé",
-                            null=True, blank=True)
-    statut_residence = models.CharField(max_length=10, default='local',
-                            verbose_name = u"Statut", null=True,
-                            choices=STATUT_RESIDENCE_CHOICES)
+    remplacement_de = models.ForeignKey(
+        'self', related_name='+', help_text=u"Taper le nom de l'employé",
+        null=True, blank=True
+    )
+    statut_residence = models.CharField(
+        u"statut", max_length=10, default='local', null=True,
+        choices=STATUT_RESIDENCE_CHOICES
+    )
 
     # Rémunération
-    classement = models.ForeignKey('Classement', db_column='classement',
-                            related_name='+',
-                            null=True, blank=True)
-    regime_travail = models.DecimalField(max_digits=12, null=True,
-                            decimal_places=2,
-                            default=REGIME_TRAVAIL_DEFAULT,
-                            verbose_name = u"Régime de travail",
-                            help_text="% du temps complet")
-    regime_travail_nb_heure_semaine = models.DecimalField(max_digits=12,
-                            decimal_places=2, null=True,
-                            default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
-                            verbose_name=u"Nb. heures par semaine",
-                            help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT)
+    classement = models.ForeignKey(
+        'Classement', db_column='classement', related_name='+', null=True,
+        blank=True
+    )
+    regime_travail = models.DecimalField(
+        u"régime de travail", max_digits=12, null=True, decimal_places=2,
+        default=REGIME_TRAVAIL_DEFAULT, help_text="% du temps complet"
+    )
+    regime_travail_nb_heure_semaine = models.DecimalField(
+        u"nb. heures par semaine", max_digits=12,
+        decimal_places=2, null=True,
+        default=REGIME_TRAVAIL_NB_HEURE_SEMAINE_DEFAULT,
+        help_text=REGIME_TRAVAIL_NB_HEURE_SEMAINE_HELP_TEXT
+    )
 
     # Occupation du Poste par cet Employe (anciennement "mandat")
-    date_debut = models.DateField(verbose_name = u"Date de début d'occupation \
-                            de poste",)
-    date_fin = models.DateField(verbose_name = u"Date de fin d'occupation \
-                            de poste",
-                            null=True, blank=True)
+    date_debut = models.DateField(u"date de début d'occupation de poste")
+    date_fin = models.DateField(
+        u"Date de fin d'occupation de poste", null=True, blank=True
+    )
 
     # Comptes
     # TODO?
@@ -653,7 +772,7 @@ class Dossier_(AUFMetadata, DevisableMixin):
 
         montant = coeff * point.valeur
         devise = point.devise
-        return {'montant':montant, 'devise':devise}
+        return {'montant': montant, 'devise': devise}
 
     def __unicode__(self):
         poste = self.poste.nom
@@ -662,10 +781,10 @@ class Dossier_(AUFMetadata, DevisableMixin):
         return u'%s - %s' % (self.employe, poste)
 
     prefix_implantation = "poste__implantation__region"
+
     def get_regions(self):
         return [self.poste.implantation.region]
 
-
     def remunerations(self):
         key = "%s_remunerations" % self._meta.app_label
         remunerations = getattr(self, key)
@@ -677,7 +796,8 @@ class Dossier_(AUFMetadata, DevisableMixin):
 
     def get_salaire(self):
         try:
-            return [r for r in self.remunerations().order_by('-date_debut') if r.type_id == 1][0]
+            return [r for r in self.remunerations().order_by('-date_debut')
+                    if r.type_id == 1][0]
         except:
             return None
 
@@ -705,28 +825,32 @@ class Dossier_(AUFMetadata, DevisableMixin):
         18  Prime de 13ième mois
         19  Prime d'intérim
         """
-        ids = [1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19]
-        return [r for r in self.remunerations_en_cours().all() if r.type_id in ids]
+        ids = [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19]
+        return [r for r in self.remunerations_en_cours().all()
+                if r.type_id in ids]
 
     def get_charges_salariales(self):
         """
         20 Charges salariales ?
         """
-        ids = [20, ]
-        return [r for r in self.remunerations_en_cours().all() if r.type_id in ids]
+        ids = [20]
+        return [r for r in self.remunerations_en_cours().all()
+                if r.type_id in ids]
 
     def get_charges_patronales(self):
         """
         17  Charges patronales
         """
-        ids = [17, ]
-        return [r for r in self.remunerations_en_cours().all() if r.type_id in ids]
+        ids = [17]
+        return [r for r in self.remunerations_en_cours().all()
+                if r.type_id in ids]
 
     def get_remunerations_tierces(self):
         """
         2   Salaire MAD
         """
-        return [r for r in self.remunerations_en_cours().all() if r.type_id in (2, )]
+        return [r for r in self.remunerations_en_cours().all()
+                if r.type_id in (2,)]
 
     # DEVISE LOCALE
 
@@ -848,23 +972,31 @@ class Dossier(Dossier_):
         related_name='%(app_label)s_dossiers',
         help_text=u"Taper le nom du poste ou du type de poste",
         )
-    employe = models.ForeignKey('Employe', db_column='employe',
-                            help_text=u"Taper le nom de l'employé",
-                            related_name='%(app_label)s_dossiers',
-                            verbose_name=u"Employé")
-    principal = models.BooleanField(verbose_name=u"Principal?", default=True,
-            help_text=u"Ce Dossier est pour le principal Poste occupé par l'Employé")
+    employe = models.ForeignKey(
+        'Employe', db_column='employe',
+        help_text=u"Taper le nom de l'employé",
+        related_name='%(app_label)s_dossiers', verbose_name=u"employé")
+    principal = models.BooleanField(
+        u"Principal?", default=True,
+        help_text=(
+            u"Ce dossier est pour le principal poste occupé par l'employé"
+        )
+    )
 
 
 class DossierPiece_(models.Model):
-    """Documents relatifs au Dossier (à l'occupation de ce poste par employé).
+    """
+    Documents relatifs au Dossier (à l'occupation de ce poste par employé).
     Ex.: Lettre de motivation.
     """
-    dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', related_name='%(app_label)s_dossierpieces')
-    nom = models.CharField(verbose_name = u"Nom", max_length=255)
-    fichier = models.FileField(verbose_name = u"Fichier",
-                            upload_to=dossier_piece_dispatch,
-                            storage=storage_prive)
+    dossier = models.ForeignKey(
+        '%s.Dossier' % app_context(),
+        db_column='dossier', related_name='%(app_label)s_dossierpieces'
+    )
+    nom = models.CharField(max_length=255)
+    fichier = models.FileField(
+        upload_to=dossier_piece_dispatch, storage=storage_prive
+    )
 
     class Meta:
         abstract = True
@@ -873,29 +1005,42 @@ class DossierPiece_(models.Model):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+
 class DossierPiece(DossierPiece_):
     pass
 
+
 class DossierCommentaire_(Commentaire):
-    dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', related_name='+')
+    dossier = models.ForeignKey(
+        '%s.Dossier' % app_context(), db_column='dossier', related_name='+'
+    )
+
     class Meta:
         abstract = True
 
+
 class DossierCommentaire(DossierCommentaire_):
     pass
 
+
 class DossierComparaison_(models.Model, DevisableMixin):
     """
     Photo d'une comparaison salariale au moment de l'embauche.
     """
-    dossier = models.ForeignKey('%s.Dossier' % app_context(), related_name='%(app_label)s_comparaisons')
+    dossier = models.ForeignKey(
+        '%s.Dossier' % app_context(), related_name='%(app_label)s_comparaisons'
+    )
     objects = DossierComparaisonManager()
 
-    implantation = models.ForeignKey(ref.Implantation, related_name="+", null=True, blank=True)
+    implantation = models.ForeignKey(
+        ref.Implantation, related_name="+", null=True, blank=True
+    )
     poste = models.CharField(max_length=255, null=True, blank=True)
     personne = models.CharField(max_length=255, null=True, blank=True)
     montant = models.IntegerField(null=True)
-    devise = models.ForeignKey('Devise', related_name='+', null=True, blank=True)
+    devise = models.ForeignKey(
+        'Devise', related_name='+', null=True, blank=True
+    )
 
     class Meta:
         abstract = True
@@ -907,30 +1052,37 @@ class DossierComparaison_(models.Model, DevisableMixin):
 class DossierComparaison(DossierComparaison_):
     pass
 
+
 ### RÉMUNÉRATION
 
 class RemunerationMixin(AUFMetadata):
-    dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', related_name='%(app_label)s_remunerations')
+    dossier = models.ForeignKey(
+        '%s.Dossier' % app_context(), db_column='dossier',
+        related_name='%(app_label)s_remunerations'
+    )
+
     # Identification
-    type = models.ForeignKey('TypeRemuneration', db_column='type', 
-                            related_name='+',
-                            verbose_name = u"Type de rémunération")
-    type_revalorisation = models.ForeignKey('TypeRevalorisation',
-                            db_column='type_revalorisation',
-                            related_name='+',
-                            verbose_name = u"Type de revalorisation",
-                            null=True, blank=True)
-    montant = models.DecimalField(null=True, blank=True,
-                            default=0, max_digits=12, decimal_places=2)
-                            # Annuel (12 mois, 52 semaines, 364 jours?)
-    devise = models.ForeignKey('Devise', db_column='devise', related_name='+',)
+    type = models.ForeignKey(
+        'TypeRemuneration', db_column='type', related_name='+',
+        verbose_name=u"type de rémunération"
+    )
+    type_revalorisation = models.ForeignKey(
+        'TypeRevalorisation', db_column='type_revalorisation',
+        related_name='+', verbose_name=u"type de revalorisation",
+        null=True, blank=True
+    )
+    montant = models.DecimalField(
+        null=True, blank=True,
+        default=0, max_digits=12, decimal_places=2
+    )  # Annuel (12 mois, 52 semaines, 364 jours?)
+    devise = models.ForeignKey('Devise', db_column='devise', related_name='+')
+
     # commentaire = precision
     commentaire = models.CharField(max_length=255, null=True, blank=True)
+
     # date_debut = anciennement date_effectif
-    date_debut = models.DateField(verbose_name = u"Date de début",
-                            null=True, blank=True)
-    date_fin = models.DateField(verbose_name = u"Date de fin",
-                            null=True, blank=True)
+    date_debut = models.DateField(u"date de début", null=True, blank=True)
+    date_fin = models.DateField(u"date de fin", null=True, blank=True)
 
     class Meta:
         abstract = True
@@ -939,8 +1091,10 @@ class RemunerationMixin(AUFMetadata):
     def __unicode__(self):
         return u'%s %s (%s)' % (self.montant, self.devise.code, self.type.nom)
 
+
 class Remuneration_(RemunerationMixin, DevisableMixin):
-    """Structure de rémunération (données budgétaires) en situation normale
+    """
+    Structure de rémunération (données budgétaires) en situation normale
     pour un Dossier. Si un Evenement existe, utiliser la structure de
     rémunération EvenementRemuneration de cet événement.
     """
@@ -949,7 +1103,7 @@ class Remuneration_(RemunerationMixin, DevisableMixin):
         return round(self.montant / 12, 2)
 
     def montant_avec_regime(self):
-        return round(self.montant * (self.dossier.regime_travail/100), 2)
+        return round(self.montant * (self.dossier.regime_travail / 100), 2)
 
     def montant_euro_mois(self):
         return round(self.montant_euros() / 12, 2)
@@ -975,26 +1129,31 @@ class Remuneration(Remuneration_):
 
 class ContratManager(NoDeleteManager):
     def get_query_set(self):
-        return super(ContratManager, self).get_query_set().select_related('dossier', 'dossier__poste')
+        return super(ContratManager, self).get_query_set() \
+                .select_related('dossier', 'dossier__poste')
+
 
-        
 class Contrat_(AUFMetadata):
-    """Document juridique qui encadre la relation de travail d'un Employe
+    """
+    Document juridique qui encadre la relation de travail d'un Employe
     pour un Poste particulier. Pour un Dossier (qui documente cette
     relation de travail) plusieurs contrats peuvent être associés.
     """
     objects = ContratManager()
-    dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', related_name='%(app_label)s_contrats')
-    type_contrat = models.ForeignKey('TypeContrat', db_column='type_contrat', 
-                            related_name='+',
-                            verbose_name = u"type de contrat")
-    date_debut = models.DateField(verbose_name = u"Date de début")
-    date_fin = models.DateField(verbose_name = u"Date de fin",
-                            null=True, blank=True)
-    fichier = models.FileField(verbose_name = u"Fichier",
-                            upload_to=contrat_dispatch,
-                            storage=storage_prive,
-                            null=True, blank=True)
+    dossier = models.ForeignKey(
+        '%s.Dossier' % app_context(), db_column='dossier',
+        related_name='%(app_label)s_contrats'
+    )
+    type_contrat = models.ForeignKey(
+        'TypeContrat', db_column='type_contrat',
+        verbose_name=u'type de contrat', related_name='+'
+    )
+    date_debut = models.DateField(u"date de début")
+    date_fin = models.DateField(u"date de fin", null=True, blank=True)
+    fichier = models.FileField(
+        upload_to=contrat_dispatch, storage=storage_prive, null=True,
+        blank=True
+    )
 
     class Meta:
         abstract = True
@@ -1005,26 +1164,29 @@ class Contrat_(AUFMetadata):
     def __unicode__(self):
         return u'%s - %s' % (self.dossier, self.id)
 
+
 class Contrat(Contrat_):
     pass
-        
 
 ### ÉVÉNEMENTS
 
 #class Evenement_(AUFMetadata):
-#    """Un Evenement sert à déclarer une situation temporaire (exceptionnelle) 
-#    d'un Dossier qui vient altérer des informations normales liées à un Dossier 
-#    (ex.: la Remuneration).
-#    
+#    """
+#    Un Evenement sert à déclarer une situation temporaire (exceptionnelle)
+#    d'un Dossier qui vient altérer des informations normales liées à un
+#    Dossier (ex.: la Remuneration).
+#
 #    Ex.: congé de maternité, maladie...
-#    
+#
 #    Lors de ces situations exceptionnelles, l'Employe a un régime de travail
 #    différent et une rémunération en conséquence. On souhaite toutefois
 #    conserver le Dossier intact afin d'éviter une re-saisie des données lors
 #    du retour à la normale.
 #    """
-#    dossier = models.ForeignKey('%s.Dossier' % app_context(), db_column='dossier', 
-#                            related_name='+')
+#    dossier = models.ForeignKey(
+#        '%s.Dossier' % app_context(), db_column='dossier',
+#        related_name='+'
+#    )
 #    nom = models.CharField(max_length=255)
 #    date_debut = models.DateField(verbose_name = u"Date de début")
 #    date_fin = models.DateField(verbose_name = u"Date de fin",
@@ -1035,7 +1197,7 @@ class Contrat(Contrat_):
 #        ordering = ['nom']
 #        verbose_name = u"Évènement"
 #        verbose_name_plural = u"Évènements"
-#                            
+#
 #    def __unicode__(self):
 #        return u'%s' % (self.nom)
 #
@@ -1043,9 +1205,10 @@ class Contrat(Contrat_):
 #class Evenement(Evenement_):
 #    __doc__ = Evenement_.__doc__
 #
-#    
+#
 #class EvenementRemuneration_(RemunerationMixin):
-#    """Structure de rémunération liée à un Evenement qui remplace 
+#    """
+#    Structure de rémunération liée à un Evenement qui remplace
 #    temporairement la Remuneration normale d'un Dossier, pour toute la durée
 #    de l'Evenement.
 #    """
@@ -1077,7 +1240,8 @@ class Contrat(Contrat_):
 ### RÉFÉRENCES RH
 
 class FamilleEmploi(AUFMetadata):
-    """Catégorie utilisée dans la gestion des Postes.
+    """
+    Catégorie utilisée dans la gestion des Postes.
     Catégorie supérieure à TypePoste.
     """
     nom = models.CharField(max_length=255)
@@ -1090,19 +1254,20 @@ class FamilleEmploi(AUFMetadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+
 class TypePoste(AUFMetadata):
-    """Catégorie de Poste.
+    """
+    Catégorie de Poste.
     """
     nom = models.CharField(max_length=255)
-    nom_feminin = models.CharField(max_length=255,
-                            verbose_name = u"Nom féminin")
-
-    is_responsable = models.BooleanField(default=False,
-                            verbose_name = u"Poste de responsabilité")
-    famille_emploi = models.ForeignKey('FamilleEmploi',
-                            db_column='famille_emploi',
-                            related_name='+',
-                            verbose_name = u"famille d'emploi")
+    nom_feminin = models.CharField(u"nom féminin", max_length=255)
+    is_responsable = models.BooleanField(
+        u"poste de responsabilité", default=False
+    )
+    famille_emploi = models.ForeignKey(
+        'FamilleEmploi', db_column='famille_emploi', related_name='+',
+        verbose_name=u"famille d'emploi"
+    )
 
     class Meta:
         ordering = ['nom']
@@ -1112,7 +1277,6 @@ class TypePoste(AUFMetadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
-
 TYPE_PAIEMENT_CHOICES = (
     (u'Régulier', u'Régulier'),
     (u'Ponctuel', u'Ponctuel'),
@@ -1126,18 +1290,21 @@ NATURE_REMUNERATION_CHOICES = (
     (u'Traitement', u'Traitement'),
 )
 
+
 class TypeRemuneration(AUFMetadata):
-    """Catégorie de Remuneration.
+    """
+    Catégorie de Remuneration.
     """
     objects = TypeRemunerationManager()
 
     nom = models.CharField(max_length=255)
-    type_paiement = models.CharField(max_length=30,
-                            choices=TYPE_PAIEMENT_CHOICES,
-                            verbose_name = u"Type de paiement")
-    nature_remuneration = models.CharField(max_length=30,
-                            choices=NATURE_REMUNERATION_CHOICES,
-                            verbose_name = u"Nature de la rémunération")
+    type_paiement = models.CharField(
+        u"type de paiement", max_length=30, choices=TYPE_PAIEMENT_CHOICES
+    )
+    nature_remuneration = models.CharField(
+        u"nature de la rémunération", max_length=30,
+        choices=NATURE_REMUNERATION_CHOICES
+    )
     archive = models.BooleanField(verbose_name=u"Archivé", default=False)
 
     class Meta:
@@ -1149,11 +1316,13 @@ class TypeRemuneration(AUFMetadata):
         if self.archive:
             archive = u"(archivé)"
         else:
-            archive = "" 
+            archive = ""
         return u'%s %s' % (self.nom, archive)
 
+
 class TypeRevalorisation(AUFMetadata):
-    """Justification du changement de la Remuneration.
+    """
+    Justification du changement de la Remuneration.
     (Actuellement utilisé dans aucun traitement informatique.)
     """
     nom = models.CharField(max_length=255)
@@ -1166,8 +1335,10 @@ class TypeRevalorisation(AUFMetadata):
     def __unicode__(self):
         return u'%s' % (self.nom)
 
+
 class Service(AUFMetadata):
-    """Unité administrative où les Postes sont rattachés.
+    """
+    Unité administrative où les Postes sont rattachés.
     """
     objects = ServiceManager()
 
@@ -1183,7 +1354,7 @@ class Service(AUFMetadata):
         if self.archive:
             archive = u"(archivé)"
         else:
-            archive = "" 
+            archive = ""
         return u'%s %s' % (self.nom, archive)
 
 
@@ -1192,8 +1363,10 @@ TYPE_ORGANISME_CHOICES = (
     ('DET', 'Détachement'),
 )
 
+
 class OrganismeBstg(AUFMetadata):
-    """Organisation d'où provient un Employe mis à disposition (MAD) de
+    """
+    Organisation d'où provient un Employe mis à disposition (MAD) de
     ou détaché (DET) à l'AUF à titre gratuit.
 
     (BSTG = bien et service à titre gratuit.)
@@ -1214,15 +1387,25 @@ class OrganismeBstg(AUFMetadata):
         return u'%s (%s)' % (self.nom, self.get_type_display())
 
     prefix_implantation = "pays__region"
+
     def get_regions(self):
         return [self.pays.region]
 
 
 class Statut(AUFMetadata):
-    """Statut de l'Employe dans le cadre d'un Dossier particulier.
+    """
+    Statut de l'Employe dans le cadre d'un Dossier particulier.
     """
     # Identification
-    code = models.CharField(max_length=25, unique=True, help_text="Saisir un code court mais lisible pour ce statut : le code est utilisé pour associer les statuts aux autres données tout en demeurant plus lisible qu'un identifiant numérique.")
+    code = models.CharField(
+        max_length=25, unique=True,
+        help_text=(
+            u"Saisir un code court mais lisible pour ce statut : "
+            u"le code est utilisé pour associer les statuts aux autres "
+            u"données tout en demeurant plus lisible qu'un identifiant "
+            u"numérique."
+        )
+    )
     nom = models.CharField(max_length=255)
 
     class Meta:
@@ -1244,19 +1427,23 @@ TYPE_CLASSEMENT_CHOICES = (
     ('HG', 'HG - Hors grille [direction]'),
 )
 
+
 class ClassementManager(models.Manager):
     """
     Ordonner les spcéfiquement les classements.
     """
     def get_query_set(self):
         qs = super(self.__class__, self).get_query_set()
-        qs = qs.extra(select={'ponderation': 'FIND_IN_SET(type,"SO,HG,S,T,P,C,D")'})
+        qs = qs.extra(select={
+            'ponderation': 'FIND_IN_SET(type,"SO,HG,S,T,P,C,D")'
+        })
         qs = qs.extra(order_by=('ponderation', 'echelon',  'degre', ))
         return qs.all()
 
 
 class Classement_(AUFMetadata):
-    """Éléments de classement de la
+    """
+    Éléments de classement de la
     "Grille générique de classement hiérarchique".
 
     Utile pour connaître, pour un Dossier, le salaire de base théorique lié au
@@ -1268,35 +1455,37 @@ class Classement_(AUFMetadata):
 
     # Identification
     type = models.CharField(max_length=10, choices=TYPE_CLASSEMENT_CHOICES)
-    echelon = models.IntegerField(verbose_name=u"Échelon", blank=True, default=0)
-    degre = models.IntegerField(verbose_name=u"Degré", blank=True, default=0)
-    coefficient = models.FloatField(default=0, verbose_name=u"Coefficient",
-                                    null=True)
+    echelon = models.IntegerField(u"échelon", blank=True, default=0)
+    degre = models.IntegerField(u"degré", blank=True, default=0)
+    coefficient = models.FloatField(u"coefficient", default=0, null=True)
+
     # Méta
     # annee # au lieu de date_debut et date_fin
     commentaire = models.TextField(null=True, blank=True)
 
     class Meta:
         abstract = True
-        ordering = ['type','echelon','degre','coefficient']
+        ordering = ['type', 'echelon', 'degre', 'coefficient']
         verbose_name = u"Classement"
         verbose_name_plural = u"Classements"
 
     def __unicode__(self):
         return u'%s.%s.%s' % (self.type, self.echelon, self.degre, )
 
+
 class Classement(Classement_):
     __doc__ = Classement_.__doc__
 
 
 class TauxChange_(AUFMetadata):
-    """Taux de change de la devise vers l'euro (EUR)
+    """
+    Taux de change de la devise vers l'euro (EUR)
     pour chaque année budgétaire.
     """
     # Identification
     devise = models.ForeignKey('Devise', db_column='devise')
-    annee = models.IntegerField(verbose_name = u"Année")
-    taux = models.FloatField(verbose_name = u"Taux vers l'euro")
+    annee = models.IntegerField(u"année")
+    taux = models.FloatField(u"taux vers l'euro")
 
     class Meta:
         abstract = True
@@ -1311,14 +1500,17 @@ class TauxChange_(AUFMetadata):
 class TauxChange(TauxChange_):
     __doc__ = TauxChange_.__doc__
 
+
 class ValeurPointManager(NoDeleteManager):
 
     def get_query_set(self):
-        return super(ValeurPointManager, self).get_query_set().select_related('devise', 'implantation')
+        return super(ValeurPointManager, self).get_query_set() \
+                .select_related('devise', 'implantation')
 
 
 class ValeurPoint_(AUFMetadata):
-    """Utile pour connaître, pour un Dossier, le salaire de base théorique lié
+    """
+    Utile pour connaître, pour un Dossier, le salaire de base théorique lié
     au classement dans la grille. La ValeurPoint s'obtient par l'implantation
     du Poste de ce Dossier : dossier.poste.implantation (pseudo code).
 
@@ -1342,22 +1534,24 @@ class ValeurPoint_(AUFMetadata):
         verbose_name_plural = u"Valeurs du point"
 
     def __unicode__(self):
-        return u'%s %s %s [%s] %s' % (self.devise.code, self.annee, self.valeur, self.implantation.nom_court, self.devise.nom)
+        return u'%s %s %s [%s] %s' % (
+            self.devise.code, self.annee, self.valeur,
+            self.implantation.nom_court, self.devise.nom
+        )
 
 
 class ValeurPoint(ValeurPoint_):
     __doc__ = ValeurPoint_.__doc__
 
 
-
 class Devise(AUFMetadata):
-    """Devise monétaire.
     """
-    
+    Devise monétaire.
+    """
     objects = DeviseManager()
 
     archive = models.BooleanField(verbose_name=u"Archivé", default=False)
-    code =  models.CharField(max_length=10, unique=True)
+    code = models.CharField(max_length=10, unique=True)
     nom = models.CharField(max_length=255)
 
     class Meta:
@@ -1368,8 +1562,10 @@ class Devise(AUFMetadata):
     def __unicode__(self):
         return u'%s - %s' % (self.code, self.nom)
 
+
 class TypeContrat(AUFMetadata):
-    """Type de contrat.
+    """
+    Type de contrat.
     """
     nom = models.CharField(max_length=255)
     nom_long = models.CharField(max_length=255)
@@ -1393,15 +1589,18 @@ class ResponsableImplantationProxy(ref.Implantation):
 
 
 class ResponsableImplantation(models.Model):
-    """Le responsable d'une implantation.
+    """
+    Le responsable d'une implantation.
     Anciennement géré sur le Dossier du responsable.
     """
-    employe = models.ForeignKey('Employe', db_column='employe',
-                            related_name='+',
-                            null=True, blank=True)
-    implantation = models.OneToOneField("ResponsableImplantationProxy",
-                            db_column='implantation', related_name='responsable',
-                            unique=True)
+    employe = models.ForeignKey(
+        'Employe', db_column='employe', related_name='+', null=True,
+        blank=True
+    )
+    implantation = models.OneToOneField(
+        "ResponsableImplantationProxy", db_column='implantation',
+        related_name='responsable', unique=True
+    )
 
     def __unicode__(self):
         return u'%s : %s' % (self.implantation, self.employe)
@@ -1410,4 +1609,3 @@ class ResponsableImplantation(models.Model):
         ordering = ['implantation__nom']
         verbose_name = "Responsable d'implantation"
         verbose_name_plural = "Responsables d'implantation"
-