Jelajahi Sumber

FIX Corrections calculs et validation

olivier.massot 7 tahun lalu
induk
melakukan
ede8ac4fef
2 mengubah file dengan 34 tambahan dan 29 penghapusan
  1. 25 20
      agrhum_traitement.py
  2. 9 9
      core/pde.py

+ 25 - 20
agrhum_traitement.py

@@ -78,11 +78,7 @@ def main(CodeAgent, MoisRH, AnneeRH, auto=False):
             logger.info("Opération annulée")
             return
 
-    logger.info("Parcours des données")
-    data = agrhum_db.read_all(Sql.format("""SELECT * FROM tbl_ImportRh
-                                            WHERE codeagent ={:text} AND Month([daterh]) = {} AND Year([daterh]) = {}
-                                            ORDER BY DateRH""", CodeAgent, MoisRH, AnneeRH))
-
+    # Chargement des baremes en memoire
     sql = Sql.format("""SELECT tbl_baremes.NomBareme, tbl_baremes.BorneInf, tbl_baremes.BorneSup, tbl_baremes.Valeur,
                                tbl_PeriodeBareme.DateInf, tbl_PeriodeBareme.DateSup
                         FROM tbl_baremes
@@ -91,10 +87,14 @@ def main(CodeAgent, MoisRH, AnneeRH, auto=False):
                             AND tbl_PeriodeBareme.DateInf <= {:date}
                             AND (tbl_PeriodeBareme.DateSup is null or tbl_PeriodeBareme.DateSup > {:date}) """,
                     datetime(AnneeRH, MoisRH, 1), datetime(AnneeRH, MoisRH, 1))
-
     baremes = agrhum_db.read_all(sql)
 
 
+    logger.info("Parcours des données")
+    data = agrhum_db.read_all(Sql.format("""SELECT * FROM tbl_ImportRh
+                                            WHERE codeagent ={:text} AND Month([daterh]) = {} AND Year([daterh]) = {}
+                                            ORDER BY DateRH""", CodeAgent, MoisRH, AnneeRH))
+
     logger.info("Mise à jour de frais de déplacement")
     # Parcours des données de la requête
     index_dep = {}
@@ -179,19 +179,24 @@ def main(CodeAgent, MoisRH, AnneeRH, auto=False):
             index_hs[el.DateRH.day].HS_Chantier += float(el.HeureSup1) + float(el.HeureSup2) + float(el.HeureSupDimanche) if el.strCategorieInterventionId != "07" else 0.0
 
     # Calcul des dépassements du seuil des 14h
-    totalhs = 0.0
-    totalhsmois = 0.0
-    for hs in index_hs.values() :
-        totalhs = hs.HeureSup1 + hs.HeuresDep + hs.HeureSupNuit + hs.HeureSupDim
-        if totalhs + totalhsmois <= 14 :
-            hs.HeureSup1Inf14 = totalhs
-        elif totalhsmois > 14 :
-            hs.HeureSup1Sup14 = totalhs
-        elif  totalhs + totalhsmois > 14 :
-            hs.HeureSup1Inf14 = 14.0 - totalhsmois
-            hs.HeureSup1Sup14 = totalhs + totalhsmois - 14.0
+    # NB: On mesure le depassement uniquement pour les heures de jour,
+    #     mais on tient compte des autres heures pour le cumul
+
+    cumulmois = 0.0
+    for hs in sorted(index_hs.values(), key=lambda x: x.JourRH) :
+        hsjour = hs.HeureSup1 + hs.HeuresDep
+
+        if cumulmois > 14:
+            hs.HeureSup1_inf_14 = 0.0
+            hs.HeureSup1_sup_14 = hsjour
+        elif cumulmois + hsjour > 14:
+            hs.HeureSup1_inf_14 = 14.0 - cumulmois
+            hs.HeureSup1_sup_14 = (cumulmois + hsjour) - 14.0
+        else:
+            hs.HeureSup1_inf_14 = hsjour
+            hs.HeureSup1_sup_14 = 0.0
 
-        totalhsmois += totalhs
+        cumulmois += (hsjour + hs.HeureSupNuit + hs.HeureSupDim)
 
     # Insertion en base
     for hs in index_hs.values() :
@@ -202,8 +207,8 @@ def main(CodeAgent, MoisRH, AnneeRH, auto=False):
                                   HS_VHCanal, HS_Chantier, Valide, CreePar, CreeLe )
                             VALUES
                                 ({hs.IDSuivi}, {hs.CodeAgent:text}, {hs.JourRH}, {hs.MoisRH}, {hs.AnneeRH},
-                                {hs.HeureSup1}, {hs.HeuresDep}, {hs.HeuresDepNuit}, {hs.HeureSup1Inf14},
-                                {hs.HeureSup1Sup14}, {hs.HeureSupNuit}, {hs.HeureSupDim},
+                                {hs.HeureSup1}, {hs.HeuresDep}, {hs.HeuresDepNuit}, {hs.HeureSup1_inf_14},
+                                {hs.HeureSup1_sup_14}, {hs.HeureSupNuit}, {hs.HeureSupDim},
                                 {hs.HS_VHCanal}, {hs.HS_Chantier}, {hs.Valide}, {hs.CreePar:text}, {hs.CreeLe:date})
                         """, hs=hs)
 

+ 9 - 9
core/pde.py

@@ -473,8 +473,8 @@ class FraisDeplacement(Model):
         self.IDSuivi = None, int
         self.CodeAgent = "", str
         self.JourRH = 0, int
-        self.MoisRH = 0, int 
-        self.AnneeRH = 0,int
+        self.MoisRH = 0, int
+        self.AnneeRH = 0, int
         self.Depart = "", str
         self.Itineraire = "", str
         self.Distance2_perso = 0 , int
@@ -484,7 +484,7 @@ class FraisDeplacement(Model):
         self.HeuresDepNuit = 0.0 , float
         self.Repas = 0 , int
         self.Remarque = "", str
-        self.Valide = False,bool
+        self.Valide = False, bool
         self.CreePar = "scriptauto", str
         self.CreeLe = datetime.now(), datetime
 
@@ -494,22 +494,22 @@ class HeureSupp(Model):
         self.IDSuivi = None, int
         self.CodeAgent = "", str
         self.JourRH = 0, int
-        self.MoisRH = 0, int 
-        self.AnneeRH = 0,int
+        self.MoisRH = 0, int
+        self.AnneeRH = 0, int
         self.HeureSup1 = 0.0, float
         self.HeuresDep = 0.0, float
         self.HeuresDepNuit = 0.0, float
-        self.HeureSup1Inf14 = 0.0, float
-        self.HeureSup1Sup14 = 0.0, float
+        self.HeureSup1_inf_14 = 0.0, float
+        self.HeureSup1_sup_14 = 0.0, float
         self.HeureSupNuit = 0.0, float
         self.HeureSupDim = 0.0, float
         self.HS_VHCanal = 0.0, float
         self.HS_Chantier = 0.0, float
-        self.Valide = False,bool
+        self.Valide = False, bool
         self.CreePar = "scriptauto", str
         self.CreeLe = datetime.now(), datetime
 
-      
+
 
 if __name__ == "__main__":
     for cls in (FacturesDb, ControlesDb, WincanDb, CommunDb, AnalytiqueDb, BoDb, AgrhumDb):