"""
objects = RemunerationManager()
+ @staticmethod
+ def find_yearly_range(from_date, to_date, year):
+ today = date.today()
+ year = year or date.today().year
+ year_start = date(year, 1, 1)
+ year_end = date(year, 12, 31)
+
+ def constrain_to_year(*dates):
+ """
+ S'assure que les dates soient dans le range year_start a
+ year_end
+ """
+ return [min(max(year_start, d), year_end)
+ for d in dates]
+
+ start_date = max(
+ from_date or year_start, year_start)
+ end_date = min(
+ to_date or year_end, year_end)
+
+ start_date, end_date = constrain_to_year(start_date, end_date)
+
+ jours_annee = (year_end - year_start).days
+ jours_dates = (end_date - start_date).days
+ factor = Decimal(str(jours_dates)) / Decimal(str(jours_annee))
+
+ return start_date, end_date, factor
+
+
def montant_ajuste_euros(self, annee=None):
"""
Le montant ajusté représente le montant annuel, ajusté sur la
période de temps travaillée, multipliée par le ratio de temps
travaillé (en rapport au temps plein).
"""
- if not annee:
- annee = min(
- self.date_debut or date.today(), date.today()).year
-
- debut_annee = date(annee, 1, 1)
- fin_annee = date(annee, 12, 31)
- jours_annee = (fin_annee - debut_annee).days + 1
-
- date_count_debut = max(
- self.date_debut or debut_annee, debut_annee)
- date_count_fin = min(self.date_fin or fin_annee, fin_annee)
- jours = (date_count_fin - date_count_debut).days + 1
- print "Date debut: ", date_count_debut
- print "Date fin: ", date_count_fin
- print "Jours: ", jours
-
- montant_euro = Decimal(str(self.montant_euros_float()))
+ date_debut, date_fin, factor = self.find_yearly_range(
+ self.date_debut,
+ self.date_fin,
+ annee,
+ )
+
+ montant_euros = Decimal(str(self.montant_euros_float()) or '0')
+
if self.type.nature_remuneration != u'Accessoire':
- return (montant_euro * ((
- min(self.date_fin or fin_annee, fin_annee) -
- max(self.date_debut or debut_annee, debut_annee)
- ).days + 1) / jours_annee * self.dossier.regime_travail / 100)
+ return (montant_euros * factor *
+ self.dossier.regime_travail / 100)
else:
- return montant_euro
-
-
+ return montant_euros
+
def montant_mois(self):
return round(self.montant / 12, 2)
)
NATURE_REMUNERATION_CHOICES = (
- (u'Accessoire', u'Accessoire'),
- (u'Charges', u'Charges patronales'),
+ (u'Traitement', u'Traitement'),
(u'Indemnité', u'Indemnité autre'),
+ (u'Charges', u'Charges patronales'),
+ (u'Accessoire', u'Accessoire'),
(u'RAS', u'Rémunération autre source'),
- (u'Traitement', u'Traitement'),
)