return path
+class DevisableMixin(object):
+
+ def get_annee_pour_taux_devise(self):
+ raise NotImplementedError
+
+ def taux_devise(self):
+ if self.devise is None:
+ return None
+ if self.devise.code == "EUR":
+ return 1
+
+ annee = self.get_annee_pour_taux_devise()
+ taux = [tc.taux for tc in TauxChange.objects.filter(devise=self.devise, annee=annee)]
+ taux = set(taux)
+
+ if len(taux) == 0:
+ raise Exception(u"Pas de taux pour %s en %s" % (self.devise.code, annee))
+
+ if len(taux) > 1:
+ raise Exception(u"Il existe plusieurs taux de %s en %s" %
+ (self.devise.code, annee))
+ else:
+ return list(taux)[0]
+
+ def montant_euros(self):
+ try:
+ taux = self.taux_devise()
+ except Exception, e:
+ return e
+ if not taux:
+ return None
+ return int(round(float(self.montant) * float(taux), 2))
+
+
class Commentaire(AUFMetadata):
texte = models.TextField()
owner = models.ForeignKey('auth.User', db_column='owner', related_name='+', verbose_name=u"Commentaire de")
class PostePiece(PostePiece_):
pass
-class PosteComparaison_(AUFMetadata):
+class PosteComparaison_(AUFMetadata, DevisableMixin):
"""
De la même manière qu'un dossier, un poste peut-être comparé à un autre poste.
"""
class Meta:
abstract = True
- def taux_devise(self):
- if self.devise is None:
- return None
- if self.devise.code == "EUR":
- return 1
- annee = self.poste.date_debut.year
- taux = [tc.taux for tc in TauxChange.objects.filter(devise=self.devise, annee=annee)]
- taux = set(taux)
- if len(taux) != 1:
- raise Exception(u"Le taux de la devise %s n'a pas n'existe pas pour %s ou il existe plusieurs taux pour la même année" % (self.devise.id, annee))
- else:
- return list(taux)[0]
- def montant_euros(self):
- taux = self.taux_devise()
- if not taux:
- return None
- return round(float(self.montant) * float(taux), 2)
+ def get_annee_pour_taux_devise(self):
+ return self.poste.date_debut.year
def __unicode__(self):
return self.nom
class DossierCommentaire(DossierCommentaire_):
pass
-class DossierComparaison_(models.Model):
+class DossierComparaison_(models.Model, DevisableMixin):
"""
Photo d'une comparaison salariale au moment de l'embauche.
"""
class Meta:
abstract = True
- def taux_devise(self):
- if self.devise is None:
- return None
- annee = self.dossier.contrat_date_debut.year
- taux = [tc.taux for tc in TauxChange.objects.filter(devise=self.devise, annee=annee)]
- taux = set(taux)
- if len(taux) != 1:
- raise Exception(u"Le taux de la devise %s n'a pas n'existe pas pour %s ou il existe plusieurs taux pour la même année" % (self.devise.id, annee))
- else:
- return list(taux)[0]
+ def get_annee_pour_taux_devise(self):
+ return self.dossier.contrat_date_debut.year
- def montant_euros(self):
- taux = self.taux_devise()
- if not taux:
- return None
- return round(float(self.montant) * float(taux), 2)
class DossierComparaison(DossierComparaison_):
pass
def __unicode__(self):
return u'%s %s (%s)' % (self.montant, self.devise.code, self.type.nom)
-class Remuneration_(RemunerationMixin):
+class Remuneration_(RemunerationMixin, DevisableMixin):
"""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.
def montant_avec_regime(self):
return round(self.montant * (self.dossier.regime_travail/100), 2)
- def taux_devise(self):
- if self.devise.code == "EUR":
- return 1
-
+ def get_annee_pour_taux_devise(self):
annee = datetime.datetime.now().year
if self.dossier.poste.date_debut is not None:
annee = self.dossier.poste.date_debut.year
annee = self.dossier.date_debut.year
if self.date_debut is not None:
annee = self.date_debut.year
-
- taux = [tc.taux for tc in TauxChange.objects.filter(devise=self.devise_id, annee=annee)]
- taux = set(taux)
- if len(taux) != 1:
- raise Exception(u"Le taux de la devise %s n'a pas n'existe pas pour %s ou il existe plusieurs taux pour la même année %s (%s)" % (self.devise.code, annee, taux, self.dossier))
- else:
- return list(taux)[0]
-
- def montant_euro(self):
- return round(float(self.montant) * float(self.taux_devise()), 2)
+ return annee
def montant_euro_mois(self):
- return round(self.montant_euro() / 12, 2)
+ return round(self.montant_euros() / 12, 2)
def __unicode__(self):
try: