merge dev
[auf_rh_dae.git] / project / rh / models.py
index 220c354..b9f954d 100644 (file)
@@ -6,7 +6,7 @@ from django.conf import settings
 from auf.django.metadata.models import AUFMetadata
 from auf.django.metadata.managers import NoDeleteManager
 import datamaster_modeles.models as ref
-
+from validators import validate_date_passee
 
 # Constantes
 HELP_TEXT_DATE = "format: aaaa-mm-jj"
@@ -60,9 +60,9 @@ class Poste_(AUFMetadata):
 
     # Identification
     nom = models.CharField(max_length=255, 
-                            verbose_name="Titre du poste", )
+                            verbose_name = u"Titre du poste", )
     nom_feminin = models.CharField(max_length=255,
-                            verbose_name="Titre du poste (au féminin)",
+                            verbose_name = u"Titre du poste (au féminin)",
                             null=True)
     implantation = models.ForeignKey(ref.Implantation, 
                             db_column='implantation', related_name='+')
@@ -71,33 +71,33 @@ class Poste_(AUFMetadata):
                             null=True)
     service = models.ForeignKey('Service', db_column='service', null=True,
                             related_name='+',
-                            verbose_name="Direction/Service/Pôle support",
+                            verbose_name = u"Direction/Service/Pôle support",
                             default=1)  # default = Rectorat
     responsable = models.ForeignKey('Poste', db_column='responsable', 
                             related_name='+', null=True,
-                            verbose_name="Poste du responsable",
+                            verbose_name = u"Poste du responsable",
                             default=149)    # default = Recteur
                                 
     # Contrat
     regime_travail = models.DecimalField(max_digits=12, decimal_places=2,
                             default=REGIME_TRAVAIL_DEFAULT, null=True,
-                            verbose_name="Temps de travail", 
+                            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="Nb. heures par semaine")
+                            verbose_name = u"Nb. heures par semaine")
 
     # Recrutement
-    local = models.NullBooleanField(verbose_name="Local", default=True, 
+    local = models.NullBooleanField(verbose_name = u"Local", default=True, 
                             null=True, blank=True)
-    expatrie = models.NullBooleanField(verbose_name="Expatrié", default=False, 
+    expatrie = models.NullBooleanField(verbose_name = u"Expatrié", default=False, 
                             null=True, blank=True)
     mise_a_disposition = models.NullBooleanField(
-                            verbose_name="Mise à disposition",
+                            verbose_name = u"Mise à disposition",
                             null=True, default=False)
     appel = models.CharField(max_length=10, null=True,
-                            verbose_name="Appel à candidature",
+                            verbose_name = u"Appel à candidature",
                             choices=POSTE_APPEL_CHOICES,
                             default='interne')
 
@@ -162,8 +162,9 @@ class Poste_(AUFMetadata):
 
     # Autres Metadata
     date_validation = models.DateTimeField(null=True, blank=True)   # de dae
-    date_debut = models.DateField(verbose_name="Date de début", null=True,
-                            help_text=HELP_TEXT_DATE)
+    date_debut = models.DateField(verbose_name="Date de début",
+                            help_text=HELP_TEXT_DATE,
+                            null=True, blank=True)
     date_fin = models.DateField(verbose_name="Date de fin",
                             help_text=HELP_TEXT_DATE,
                             null=True, blank=True)
@@ -171,8 +172,8 @@ class Poste_(AUFMetadata):
     class Meta:
         abstract = True
         ordering = ['implantation__nom', 'nom']
-        verbose_name = "Poste"
-        verbose_name_plural = "Postes"
+        verbose_name = u"Poste"
+        verbose_name_plural = u"Postes"
 
     def __unicode__(self):
         representation = u'%s - %s [%s]' % (self.implantation, self.nom, 
@@ -232,8 +233,8 @@ class PostePiece(models.Model):
     """
     poste = models.ForeignKey('Poste', db_column='poste', 
                             related_name='pieces')
-    nom = models.CharField(verbose_name="Nom", max_length=255)
-    fichier = models.FileField(verbose_name="Fichier", 
+    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)
 
@@ -249,10 +250,19 @@ class PosteComparaison(models.Model):
     """
     poste = models.ForeignKey('Poste', related_name='comparaisons_internes')
     implantation = models.ForeignKey(ref.Implantation, null=True, blank=True, related_name="+")
-    nom = models.CharField(verbose_name="Poste", max_length=255, null=True, blank=True)
+    nom = models.CharField(verbose_name = u"Poste", max_length=255, null=True, blank=True)
     montant = models.IntegerField(null=True)
     devise = models.ForeignKey("Devise", default=5, related_name='+', null=True, blank=True)
-    montant_euros = models.IntegerField(null=True)
+
+    def taux_devise(self):
+        liste_taux = self.devise.tauxchange_set.order_by('-annee').filter(implantation=self.implantation)
+        if len(liste_taux) == 0:
+            raise Exception(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise, self.implantation))
+        else:
+            return liste_taux[0].taux
+
+    def montant_euros(self):
+        return round(float(self.montant) * float(self.taux_devise()), 2)
 
 
 class PosteCommentaire(Commentaire):
@@ -280,34 +290,35 @@ class Employe(AUFMetadata):
     """
     # Identification
     nom = models.CharField(max_length=255)
-    prenom = models.CharField(max_length=255, verbose_name="Prénom")
+    prenom = models.CharField(max_length=255, verbose_name = u"Prénom")
     nom_affichage = models.CharField(max_length=255, 
-                            verbose_name="Nom d'affichage",
+                            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="Nationalité")
+                            verbose_name = u"Nationalité")
     date_naissance = models.DateField(help_text=HELP_TEXT_DATE,
-                            verbose_name="Date de naissance",
+                            verbose_name = u"Date de naissance",
+                            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="Situation familiale",
+                            verbose_name = u"Situation familiale",
                             null=True, blank=True)
-    date_entree = models.DateField(verbose_name="Date d'entrée à l'AUF",
+    date_entree = models.DateField(verbose_name = 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="Tél. domicile",
+                            verbose_name = u"Tél. domicile",
                             null=True, blank=True)
     tel_cellulaire = models.CharField(max_length=255, 
-                            verbose_name="Tél. cellulaire",
+                            verbose_name = u"Tél. cellulaire",
                             null=True, blank=True)
     adresse = models.CharField(max_length=255, null=True, blank=True)
     ville = models.CharField(max_length=255, null=True, blank=True)
@@ -319,8 +330,8 @@ class Employe(AUFMetadata):
 
     class Meta:
         ordering = ['nom_affichage','nom','prenom']
-        verbose_name = "Employé"
-        verbose_name_plural = "Employés"
+        verbose_name = u"Employé"
+        verbose_name_plural = u"Employés"
         
     def __unicode__(self):
         return u'%s' % (self.get_nom())
@@ -345,8 +356,8 @@ class EmployePiece(models.Model):
     """
     employe = models.ForeignKey('Employe', db_column='employe', 
                             related_name='+')
-    nom = models.CharField(verbose_name="Nom", max_length=255)
-    fichier = models.FileField(verbose_name="Fichier", 
+    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)
 
@@ -374,32 +385,33 @@ class AyantDroit(AUFMetadata):
     # Identification
     nom = models.CharField(max_length=255)
     prenom = models.CharField(max_length=255,
-                            verbose_name="Prénom",)
+                            verbose_name = u"Prénom",)
     nom_affichage = models.CharField(max_length=255, 
-                            verbose_name="Nom d'affichage",
+                            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="Nationalité")
+                            verbose_name = u"Nationalité")
     date_naissance = models.DateField(help_text=HELP_TEXT_DATE,
-                            verbose_name="Date de naissance",
+                            verbose_name = u"Date de naissance",
+                            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="Employé")
+                            verbose_name = u"Employé")
     lien_parente = models.CharField(max_length=10, 
                             choices=LIEN_PARENTE_CHOICES,
-                            verbose_name="Lien de parenté",
+                            verbose_name = u"Lien de parenté",
                             null=True, blank=True)
 
     class Meta:
         ordering = ['nom_affichage']
-        verbose_name = "Ayant droit"
-        verbose_name_plural = "Ayants droit"
+        verbose_name = u"Ayant droit"
+        verbose_name_plural = u"Ayants droit"
         
     def __unicode__(self):
         return u'%s' % (self.get_nom())
@@ -440,14 +452,14 @@ class Dossier_(AUFMetadata):
     # Identification
     employe = models.ForeignKey('Employe', db_column='employe', 
                             related_name='dossiers',
-                            verbose_name="Employé")
+                            verbose_name=u"Employé")
     poste = models.ForeignKey('Poste', db_column='poste', related_name='+')
     statut = models.ForeignKey('Statut', related_name='+', default=3,
                             null=True)
     organisme_bstg = models.ForeignKey('OrganismeBstg', 
                             db_column='organisme_bstg',
                             related_name='+',
-                            verbose_name="Organisme", 
+                            verbose_name = u"Organisme", 
                             help_text="Si détaché (DET) ou \
                                     mis à disposition (MAD), \
                                     préciser l'organisme.",
@@ -456,7 +468,7 @@ class Dossier_(AUFMetadata):
     # Recrutement
     remplacement = models.BooleanField(default=False)
     statut_residence = models.CharField(max_length=10, default='local', 
-                            verbose_name="Statut", null=True,
+                            verbose_name = u"Statut", null=True,
                             choices=STATUT_RESIDENCE_CHOICES)
    
     # Rémunération
@@ -466,18 +478,18 @@ class Dossier_(AUFMetadata):
     regime_travail = models.DecimalField(max_digits=12, null=True,
                             decimal_places=2,
                             default=REGIME_TRAVAIL_DEFAULT,
-                            verbose_name="Régime de travail",
+                            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="Nb. heures par semaine")
+                            verbose_name = u"Nb. heures par semaine")
 
     # Occupation du Poste par cet Employe (anciennement "mandat")
-    date_debut = models.DateField(verbose_name="Date de début d'occupation \
+    date_debut = models.DateField(verbose_name = u"Date de début d'occupation \
                             de poste",
                             help_text=HELP_TEXT_DATE)
-    date_fin = models.DateField(verbose_name="Date de fin d'occupation \
+    date_fin = models.DateField(verbose_name = u"Date de fin d'occupation \
                             de poste",
                             help_text=HELP_TEXT_DATE,
                             null=True, blank=True)
@@ -487,7 +499,7 @@ class Dossier_(AUFMetadata):
     
     class Meta:
         abstract = True
-        ordering = ['employe__nom_affichage', 'employe__nom', 'poste__nom']
+        ordering = ['employe__nom', ]
         verbose_name = "Dossier"
         verbose_name_plural = "Dossiers"
         
@@ -508,8 +520,8 @@ class DossierPiece(models.Model):
     """
     dossier = models.ForeignKey('Dossier', db_column='dossier', 
                             related_name='+')
-    nom = models.CharField(verbose_name="Nom", max_length=255)
-    fichier = models.FileField(verbose_name="Fichier", 
+    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)
 
@@ -523,6 +535,27 @@ class DossierCommentaire(Commentaire):
     dossier = models.ForeignKey('Dossier', db_column='dossier', 
                             related_name='+')
 
+class DossierComparaison(models.Model):
+    """
+    Photo d'une comparaison salariale au moment de l'embauche.
+    """
+    dossier = models.ForeignKey('Dossier', related_name='comparaisons')
+    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', default=5, related_name='+', null=True, blank=True)
+
+    def taux_devise(self):
+        liste_taux = self.devise.tauxchange_set.order_by('-annee').filter(implantation=self.dossier.poste.implantation)
+        if len(liste_taux) == 0:
+            raise Exception(u"La devise %s n'a pas de taux pour l'implantation %s" % (self.devise, self.dossier.poste.implantation))
+        else:
+            return liste_taux[0].taux
+
+    def montant_euros(self):
+        return round(float(self.montant) * float(self.taux_devise()), 2)
+
 
 ### RÉMUNÉRATION
     
@@ -532,11 +565,11 @@ class RemunerationMixin(AUFMetadata):
                         related_name='%(app_label)s_%(class)s_remunerations')
     type = models.ForeignKey('TypeRemuneration', db_column='type', 
                             related_name='+',
-                            verbose_name="Type de rémunération")
+                            verbose_name = u"Type de rémunération")
     type_revalorisation = models.ForeignKey('TypeRevalorisation', 
                             db_column='type_revalorisation', 
                             related_name='+',
-                            verbose_name="Type de revalorisation",
+                            verbose_name = u"Type de revalorisation",
                             null=True, blank=True)
     montant = models.FloatField(null=True, blank=True,
                             default=0)
@@ -548,10 +581,10 @@ class RemunerationMixin(AUFMetadata):
     commentaire = models.CharField(max_length=255, null=True, blank=True)
     # date_debut = anciennement date_effectif
     date_debut = models.DateField(help_text=HELP_TEXT_DATE,
-                            verbose_name="Date de début",
+                            verbose_name = u"Date de début",
                             null=True, blank=True)
     date_fin = models.DateField(help_text=HELP_TEXT_DATE,
-                            verbose_name="Date de fin",
+                            verbose_name = u"Date de fin",
                             null=True, blank=True)
     
     class Meta: 
@@ -588,8 +621,8 @@ class Remuneration_(RemunerationMixin):
 
     class Meta:
         abstract = True
-        verbose_name = "Rémunération"
-        verbose_name_plural = "Rémunérations"
+        verbose_name = u"Rémunération"
+        verbose_name_plural = u"Rémunérations"
 
 
 class Remuneration(Remuneration_):
@@ -615,17 +648,17 @@ class Contrat(AUFMetadata):
                             related_name='+')
     type_contrat = models.ForeignKey('TypeContrat', db_column='type_contrat', 
                             related_name='+',
-                            verbose_name="Type de contrat")
+                            verbose_name = u"Type de contrat")
     date_debut = models.DateField(help_text=HELP_TEXT_DATE,
-                            verbose_name="Date de début")
+                            verbose_name = u"Date de début")
     date_fin = models.DateField(help_text=HELP_TEXT_DATE,
-                            verbose_name="Date de fin",
+                            verbose_name = u"Date de fin",
                             null=True, blank=True)
 
     class Meta:
         ordering = ['dossier__employe__nom_affichage']
-        verbose_name = "Contrat"
-        verbose_name_plural = "Contrats"
+        verbose_name = u"Contrat"
+        verbose_name_plural = u"Contrats"
         
     def __unicode__(self):
         return u'%s - %s' % (self.dossier, self.id)
@@ -651,16 +684,16 @@ class Evenement_(AUFMetadata):
                             related_name='+')
     nom = models.CharField(max_length=255)
     date_debut = models.DateField(help_text=HELP_TEXT_DATE,
-                            verbose_name="Date de début")
+                            verbose_name = u"Date de début")
     date_fin = models.DateField(help_text=HELP_TEXT_DATE,
-                            verbose_name="Date de fin",
+                            verbose_name = u"Date de fin",
                             null=True, blank=True)
 
     class Meta:
         abstract = True
         ordering = ['nom']
-        verbose_name = "Évènement"
-        verbose_name_plural = "Évènements"
+        verbose_name = u"Évènement"
+        verbose_name_plural = u"Évènements"
                             
     def __unicode__(self):
         return u'%s' % (self.nom)
@@ -677,15 +710,15 @@ class EvenementRemuneration_(RemunerationMixin):
     """
     evenement = models.ForeignKey("Evenement", db_column='evenement',
                             related_name='+',
-                            verbose_name="Évènement")
+                            verbose_name = u"Évènement")
     # TODO : le champ dossier hérité de Remuneration doit être dérivé
     # de l'Evenement associé
 
     class Meta:
         abstract = True
         ordering = ['evenement', 'type__nom', '-date_fin']
-        verbose_name = "Évènement - rémunération"
-        verbose_name_plural = "Évènements - rémunérations"
+        verbose_name = u"Évènement - rémunération"
+        verbose_name_plural = u"Évènements - rémunérations"
 
 
 class EvenementRemuneration(EvenementRemuneration_):
@@ -709,8 +742,8 @@ class FamilleEmploi(AUFMetadata):
     
     class Meta:
         ordering = ['nom']
-        verbose_name = "Famille d'emploi"
-        verbose_name_plural = "Familles d'emploi"
+        verbose_name = u"Famille d'emploi"
+        verbose_name_plural = u"Familles d'emploi"
     
     def __unicode__(self):
         return u'%s' % (self.nom)
@@ -720,19 +753,19 @@ class TypePoste(AUFMetadata):
     """
     nom = models.CharField(max_length=255)
     nom_feminin = models.CharField(max_length=255,
-                            verbose_name="Nom féminin")
+                            verbose_name = u"Nom féminin")
     
     is_responsable = models.BooleanField(default=False,
-                            verbose_name="Poste de responsabilité")
+                            verbose_name = u"Poste de responsabilité")
     famille_emploi = models.ForeignKey('FamilleEmploi', 
                             db_column='famille_emploi',
                             related_name='+',
-                            verbose_name="Famille d'emploi")
+                            verbose_name = u"Famille d'emploi")
 
     class Meta:
         ordering = ['nom']
-        verbose_name = "Type de poste"
-        verbose_name_plural = "Types de poste"
+        verbose_name = u"Type de poste"
+        verbose_name_plural = u"Types de poste"
         
     def __unicode__(self):
         return u'%s' % (self.nom)
@@ -757,15 +790,15 @@ class TypeRemuneration(AUFMetadata):
     nom = models.CharField(max_length=255)
     type_paiement = models.CharField(max_length=30, 
                             choices=TYPE_PAIEMENT_CHOICES,
-                            verbose_name="Type de paiement")
+                            verbose_name = u"Type de paiement")
     nature_remuneration = models.CharField(max_length=30, 
                             choices=NATURE_REMUNERATION_CHOICES,
-                            verbose_name="Nature de la rémunération")
+                            verbose_name = u"Nature de la rémunération")
                             
     class Meta:
         ordering = ['nom']
-        verbose_name = "Type de rémunération"
-        verbose_name_plural = "Types de rémunération"
+        verbose_name = u"Type de rémunération"
+        verbose_name_plural = u"Types de rémunération"
 
     def __unicode__(self):
         return u'%s' % (self.nom)
@@ -778,8 +811,8 @@ class TypeRevalorisation(AUFMetadata):
     
     class Meta:
         ordering = ['nom']
-        verbose_name = "Type de revalorisation"
-        verbose_name_plural = "Types de revalorisation"
+        verbose_name = u"Type de revalorisation"
+        verbose_name_plural = u"Types de revalorisation"
 
     def __unicode__(self):
         return u'%s' % (self.nom)
@@ -791,8 +824,8 @@ class Service(AUFMetadata):
         
     class Meta:
         ordering = ['nom']
-        verbose_name = "Service"
-        verbose_name_plural = "Services"
+        verbose_name = u"Service"
+        verbose_name_plural = u"Services"
 
     def __unicode__(self):
         return u'%s' % (self.nom)
@@ -818,8 +851,8 @@ class OrganismeBstg(AUFMetadata):
 
     class Meta:
         ordering = ['type', 'nom']
-        verbose_name = "Organisme BSTG"
-        verbose_name_plural = "Organismes BSTG"
+        verbose_name = u"Organisme BSTG"
+        verbose_name_plural = u"Organismes BSTG"
 
     def __unicode__(self):
         return u'%s (%s)' % (self.nom, self.get_type_display())
@@ -833,8 +866,8 @@ class Statut(AUFMetadata):
 
     class Meta:
         ordering = ['code']
-        verbose_name = "Statut d'employé"
-        verbose_name_plural = "Statuts d'employé"
+        verbose_name = u"Statut d'employé"
+        verbose_name_plural = u"Statuts d'employé"
         
     def __unicode__(self):
         return u'%s : %s' % (self.code, self.nom)
@@ -862,9 +895,9 @@ class Classement_(AUFMetadata):
     """
     # Identification
     type = models.CharField(max_length=10, choices=TYPE_CLASSEMENT_CHOICES)
-    echelon = models.IntegerField(verbose_name="Échelon")
-    degre = models.IntegerField(verbose_name="Degré")
-    coefficient = models.FloatField(default=0, verbose_name="Coéfficient",
+    echelon = models.IntegerField(verbose_name = u"Échelon")
+    degre = models.IntegerField(verbose_name = u"Degré")
+    coefficient = models.FloatField(default=0, verbose_name = u"Coéfficient",
                                     null=True)
     # Méta
     # annee # au lieu de date_debut et date_fin
@@ -873,8 +906,8 @@ class Classement_(AUFMetadata):
     class Meta:
         abstract = True
         ordering = ['type','echelon','degre','coefficient']
-        verbose_name = "Classement"
-        verbose_name_plural = "Classements"
+        verbose_name = u"Classement"
+        verbose_name_plural = u"Classements"
 
     def __unicode__(self):
         return u'%s.%s.%s (%s)' % (self.type, self.echelon, self.degre,
@@ -891,14 +924,14 @@ class TauxChange_(AUFMetadata):
     # Identification
     devise = models.ForeignKey('Devise', db_column='devise',
                             related_name='+')
-    annee = models.IntegerField(verbose_name="Année")
-    taux = models.FloatField(verbose_name="Taux vers l'euro")
+    annee = models.IntegerField(verbose_name = u"Année")
+    taux = models.FloatField(verbose_name = u"Taux vers l'euro")
 
     class Meta:
         abstract = True
         ordering = ['-annee', 'devise__code']
-        verbose_name = "Taux de change"
-        verbose_name_plural = "Taux de change"
+        verbose_name = u"Taux de change"
+        verbose_name_plural = u"Taux de change"
     
     def __unicode__(self):
         return u'%s : %s € (%s)' % (self.devise, self.taux, self.annee)
@@ -934,8 +967,8 @@ class ValeurPoint_(AUFMetadata):
     class Meta:
         ordering = ['-annee', 'implantation__nom']
         abstract = True
-        verbose_name = "Valeur du point"
-        verbose_name_plural = "Valeurs du point"
+        verbose_name = u"Valeur du point"
+        verbose_name_plural = u"Valeurs du point"
 
     # TODO : cette fonction n'était pas présente dans la branche dev, utilité?
     def get_tauxchange_courant(self):
@@ -966,8 +999,8 @@ class Devise(AUFMetadata):
 
     class Meta:
         ordering = ['code']
-        verbose_name = "Devise"
-        verbose_name_plural = "Devises"
+        verbose_name = u"Devise"
+        verbose_name_plural = u"Devises"
         
     def __unicode__(self):
         return u'%s - %s' % (self.code, self.nom)
@@ -980,8 +1013,8 @@ class TypeContrat(AUFMetadata):
 
     class Meta:
         ordering = ['nom']
-        verbose_name = "Type de contrat"
-        verbose_name_plural = "Types de contrat"
+        verbose_name = u"Type de contrat"
+        verbose_name_plural = u"Types de contrat"
 
     def __unicode__(self):
         return u'%s' % (self.nom)
@@ -1005,5 +1038,5 @@ class ResponsableImplantation(AUFMetadata):
         
     class Meta:
         ordering = ['implantation__nom']
-        verbose_name = "Responsable d'implantation"
-        verbose_name_plural = "Responsables d'implantation"
+        verbose_name = u"Responsable d'implantation"
+        verbose_name_plural = u"Responsables d'implantation"