merge qbe in rh : conflits réglés
[auf_rh_dae.git] / project / rh / models.py
index 6999d12..910478f 100644 (file)
@@ -1,8 +1,11 @@
 # -=- encoding: utf-8 -=-
 
+from datetime import date
+
 from django.core.files.storage import FileSystemStorage
 from django.db import models
 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
@@ -26,6 +29,10 @@ def dossier_piece_dispatch(instance, filename):
     path = "dossier/%s/%s" % (instance.dossier_id, filename)
     return path
 
+def employe_piece_dispatch(instance, filename):
+    path = "employe/%s/%s" % (instance.employe_id, filename)
+    return path
+
 
 class Commentaire(AUFMetadata):
     texte = models.TextField()
@@ -349,6 +356,53 @@ class Employe(AUFMetadata):
         elif self.genre.upper() == u'F':
             civilite = u'Mme'
         return civilite
+        
+    def url_photo(self):
+        """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})
+               
+    def dossiers_passes(self):
+        today = date.today()
+        dossiers_passes = self.dossiers.filter(date_fin__lt=today).order_by('-date_fin')
+        for d in dossiers_passes:
+            d.archive = True
+        return dossiers_passes
+        
+    def dossiers_futurs(self):
+        today = date.today()
+        return self.dossiers.filter(date_debut__gt=today).order_by('-date_fin')
+        
+    def dossiers_encours(self):
+        dossiers_p_f = self.dossiers_passes() | self.dossiers_futurs()
+        ids_dossiers_p_f = [d.id for d in dossiers_p_f]
+        dossiers_encours = self.dossiers.exclude(id__in=ids_dossiers_p_f).order_by('-date_fin')
+        
+        # TODO : supprimer ce code quand related_name fonctionnera ou d.remuneration_set
+        for d in dossiers_encours:
+            d.remunerations = Remuneration.objects.filter(dossier=d.id).order_by('-id')
+        return dossiers_encours
+        
+    def postes_encours(self):
+        postes_encours = set()
+        for d in self.dossiers_encours():
+            postes_encours.add(d.poste)
+        return postes_encours
+        
+    def poste_principal(self):
+        """
+        Retourne le Poste du premier Dossier créé parmi les Dossiers en cours.
+        Idée derrière : 
+        si on ajout d'autre Dossiers, c'est pour des Postes secondaires.
+        """
+        poste = Poste.objects.none()
+        try:
+            poste = self.dossiers_encours().order_by('date_debut')[0].poste
+        except:
+            pass
+        return poste
 
 class EmployePiece(models.Model):
     """Documents relatifs à un employé.
@@ -356,9 +410,9 @@ class EmployePiece(models.Model):
     """
     employe = models.ForeignKey('Employe', db_column='employe', 
                             related_name='+')
-    nom = models.CharField(verbose_name = u"Nom", max_length=255)
-    fichier = models.FileField(verbose_name = u"Fichier", 
-                            upload_to=dossier_piece_dispatch, 
+    nom = models.CharField(verbose_name="Nom", max_length=255)
+    fichier = models.FileField(verbose_name="Fichier", 
+                            upload_to=employe_piece_dispatch, 
                             storage=storage_prive)
 
     class Meta:
@@ -503,6 +557,16 @@ class Dossier_(AUFMetadata):
         verbose_name = u"Dossier"
         verbose_name_plural = "Dossiers"
         
+    def salaire_theorique(self):
+        annee = date.today().year
+        coeff = self.classement.coefficient
+        implantation = self.poste.implantation
+        point = ValeurPoint.objects.get(implantation=implantation, annee=annee)
+        
+        montant = coeff * point.valeur
+        devise = point.devise
+        return {'montant':montant, 'devise':devise}
+        
     def __unicode__(self):
         poste = self.poste.nom
         if self.employe.genre == 'F':
@@ -645,7 +709,7 @@ class Contrat(AUFMetadata):
     objects = ContratManager()
 
     dossier = models.ForeignKey('Dossier', db_column='dossier', 
-                            related_name='+')
+                            related_name='contrats')
     type_contrat = models.ForeignKey('TypeContrat', db_column='type_contrat', 
                             related_name='+',
                             verbose_name = u"Type de contrat")
@@ -1038,5 +1102,9 @@ class ResponsableImplantation(AUFMetadata):
         
     class Meta:
         ordering = ['implantation__nom']
-        verbose_name = u"Responsable d'implantation"
-        verbose_name_plural = u"Responsables d'implantation"
+        verbose_name = "Responsable d'implantation"
+        verbose_name_plural = "Responsables d'implantation"
+
+def dossier_piece_dispatch(instance, filename):
+    path = "dossier/%s/%s" % (instance.dossier_id, filename)
+    return path