# -=- encoding: utf-8 -=-
+import datetime
from django.db import models
from datamaster_modeles.models import Pays, Implantation
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
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):