ajouter les codes de devises dans les valeurs de point, et filter celles-ci sur lanne...
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Thu, 7 Apr 2011 18:27:46 +0000 (14:27 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Thu, 7 Apr 2011 18:27:46 +0000 (14:27 -0400)
project/dae/forms.py
project/dae/models.py
project/rh_v1/models.py

index 7db6ff4..68aa1df 100644 (file)
@@ -42,6 +42,9 @@ class PosteForm(forms.ModelForm):
     poste = forms.ChoiceField(label="Nouveau poste ou évolution du poste",
                               choices=(), required=False)
 
+    valeur_point_min  = forms.ModelChoiceField(queryset=rh.ValeurPoint.actuelles.all())
+    valeur_point_max = forms.ModelChoiceField(queryset=rh.ValeurPoint.actuelles.all())
+
     def __init__(self, *args, **kwargs):
         """ Mise à jour dynamique du contenu du menu des postes.
 
index 0842f26..741070f 100644 (file)
@@ -20,7 +20,6 @@ POSTE_STATUT_CHOICES = (
     ('DET', 'Détachement'),
 )
 
-
 class PosteManager(models.Manager):
     """
     Chargement de tous les objets FK existants sur chaque QuerySet.
index 6b8e917..ce20fe9 100644 (file)
@@ -1,5 +1,6 @@
 # -=- encoding: utf-8 -=-
 
+import datetime
 from django.db import models
 from datamaster_modeles.models import Pays, Implantation
 
@@ -311,6 +312,33 @@ class Classement(models.Model):
         return u'%s.%s.%s (%s)' % (self.type, self.echelon, self.degre,
                                    self.coefficient)
 
+class TauxChange(models.Model):
+    #Identification
+    id = models.IntegerField(primary_key=True)
+    devise = models.ForeignKey('Devise', db_column='devise')
+    annee = models.IntegerField()
+    taux = models.FloatField()
+    #Relations
+    implantation = models.ForeignKey('datamaster_modeles.Implantation', db_column='implantation')
+
+class ValeurPointManager(models.Manager):
+    """
+    Manager qui travaille uniquement sur les valeurs du point de l'année en cours.
+    """
+    mois = datetime.datetime.now().month
+    annee_courante = datetime.datetime.now().year
+
+    # Pour le mois de janvier et décembre on mets les 2 années pour faire la transition
+    if mois == 1:
+        filtre_annee = (annee_courante-1, annee_courante)
+    elif mois == 12:
+        filtre_annee = (annee_courante, annee_courante+1)
+    else:
+        filtre_annee = (annee_courante,)
+
+    def get_query_set(self):
+        return super(ValeurPointManager, self).get_query_set().select_related('implantation').filter(annee__in=self.filtre_annee)
+
 
 class ValeurPoint(models.Model):
     #Identification
@@ -319,31 +347,29 @@ class ValeurPoint(models.Model):
     implantation = models.ForeignKey('datamaster_modeles.Implantation', db_column='implantation')
     #Méta
     annee = models.IntegerField()
-        
-    def get_devise_code(self):
-        code = ''
-        try:
-            taux = TauxChange.objects.get(implantation=self.implantation, annee=self.annee)
-            code = taux.devise.code
-        except TauxChange.DoesNotExist:
-            pass
-        return code
+
+    # Stockage de tous les taux de change pour optimiser la recherche de la devise associée
+    annee_courante = datetime.datetime.now().year
+    tauxchange = TauxChange.objects.select_related('devise').filter(annee=annee_courante)
+    
+    def get_tauxchange_courant(self):
+        """
+        Recherche le taux courant associé à la valeur d'un point.
+        Tous les taux de l'année courante sont chargés, pour optimiser un affichage en liste.
+        (On pourrait probablement améliorer le manager pour lui greffer le taux courant sous forme de JOIN)
+        """
+        for tauxchange in self.tauxchange:
+            if tauxchange.implantation_id == self.implantation_id:
+                return tauxchange
+        return None
 
     def __unicode__(self):
-        return u'%s (%s-%s)' % (self.valeur, self.implantation_id, self.annee)
+        return u'%s (%s-%s) %s' % (self.valeur, self.implantation_id, self.annee, self.get_tauxchange_courant().devise.code)
         
     class Meta:
         ordering = ['valeur']
 
-
-class TauxChange(models.Model):
-    #Identification
-    id = models.IntegerField(primary_key=True)
-    devise = models.ForeignKey('Devise', db_column='devise')
-    annee = models.IntegerField()
-    taux = models.FloatField()
-    #Relations
-    implantation = models.ForeignKey('datamaster_modeles.Implantation', db_column='implantation')
+    actuelles = ValeurPointManager()
 
 
 class Devise(models.Model):