Masse salariale: bugfix nombre de jour du dossier & calcul de la remun
authorJean-Philippe Caissy <jpcaissy@piji.ca>
Fri, 30 Mar 2012 18:53:43 +0000 (13:53 -0500)
committerJean-Philippe Caissy <jpcaissy@piji.ca>
Fri, 30 Mar 2012 18:53:43 +0000 (13:53 -0500)
project/rh/masse_salariale.py

index 1d96664..f166add 100644 (file)
@@ -309,21 +309,17 @@ class MasseSalariale():
                     }
 
             #Calcul du nombre de jours pour ce dossier.
-            if dossier.date_debut and dossier.date_debut > date_debut and \
-                    not dossier.date_fin:
-                dossier_date_delta = date_fin - dossier.date_fin
-            elif dossier.date_fin and dossier.date_fin < date_fin and \
-                    not dossier.date_debut:
-                dossier_date_delta = dossier.date_fin - date_debut
-            elif dossier.date_fin and dossier.date_debut:
-                dossier_date_delta = dossier.date_fin - date_debut
-            else:
-                dossier_date_delta = rapport_date_delta
+            dossier_date_delta = self.calculer_nombre_jours(
+                    dossier.date_debut, dossier.date_fin,
+                    date_debut, date_fin)
 
             for r in remuns:
-                #rapport_nombre_jours = (float(date_delta.days)
-                #        / rapport_date_delta.days)
-                montant = float(r.montant)
+                montant = float(r.montant) * (
+                            (self.calculer_nombre_jours(
+                                dossier.date_debut, dossier.date_fin,
+                                date_debut, date_fin)).days /
+                                    float(rapport_date_delta.days)
+                    )
 
                 if r.type_id in TYPE_REMUN_MAD:
                     salaire_complement += montant
@@ -498,6 +494,24 @@ class MasseSalariale():
 
         self.grand_totaux = (grand_total, grand_total_euro)
 
+    def calculer_nombre_jours(self,debut, fin, debut_limite, fin_limite):
+        """Calcul le nombre de jours entre fin et debut, sans dépasser 
+        les limites. Si debut ou fin set null, on prend debut_limite/fin_limi
+        """
+
+        if not debut:
+            debut = debut_limite
+        if not fin:
+            fin = fin_limite
+
+        if debut < debut_limite:
+            debut = debut_limite
+        if fin > fin_limite:
+            fin = fin_limite
+
+        fin += datetime.timedelta(days=1)
+        return fin - debut
+
     def build_qs(self, prefix, date_debut, date_fin):
         date_debut_null = \
                 Q(**{"%s%s__isnull" % (prefix, KEY_DATE_DEBUT): True})