agrhum_traitement.py 5.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. '''
  2. '''
  3. from core.pde import AgrhumDb , FraisDeplacement, HeureSupp
  4. import logging
  5. import sys
  6. import json
  7. from datetime import datetime
  8. from path import Path # @UnusedImport
  9. from core import logconf
  10. from core.model import Sql
  11. logger = logging.getLogger("ctrl2analytique")
  12. logconf.start("ctrl2analytique", logging.DEBUG)
  13. # # POUR TESTER, d�commenter les lignes suivantes
  14. # > Lancer le script /resources/test_ctrl2analytique.py pour reinitialiser les donn�es de la base de test
  15. ##-----------------------------------------------
  16. AgrhumDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\BDD_ParcRH.mdb")
  17. #CommunDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\Commun_Data.mdb")
  18. #logger.handlers = [h for h in logger.handlers if (type(h) == logging.StreamHandler)]
  19. #logger.warning("<<<<<<<<<<<<<< Mode TEST >>>>>>>>>>>>>>>>>")
  20. ##-----------------------------------------------
  21. print ("La recherche du python de l'amazonie commence ici, pas encore l'anaconda :")
  22. agrhum_db = AgrhumDb(autocommit=False)
  23. CodeAgent = "T9"
  24. MoisRH = 12
  25. AnneeRH = 2017
  26. #Verification dans la table tbl_suiviRH suivi si la ligne agent mois annnée existe
  27. #Verfification si etat != de Importé ou si valide = True : demande confirmation pour retraitement
  28. #Si retraitement on suprime des tables cibles tbl_formHS et tbl_formDep
  29. #Parcours de tbl_importRH transfo donnée et écriture dans tbl_formdep
  30. #Parcours de tbl_importRH transfo donnée et écriture dans tbl_formHS
  31. def main():
  32. if agrhum_db.exists("select * from tbl_suiviRH where codeagent ='{}' and moisrh = {} and anneerh = {}".format(CodeAgent, MoisRH,AnneeRH)):
  33. #if input("Voulez vous retarite ces donnees(o/n)") != "o" :
  34. # print("Annulation")
  35. # return
  36. agrhum_db.execute("delete * from tbl_formDep where codeagent ='{}' and moisrh = {} and anneerh = {}".format(CodeAgent, MoisRH,AnneeRH))
  37. agrhum_db.execute("delete * from tbl_formHS where codeagent ='{}' and moisrh = {} and anneerh = {}".format(CodeAgent, MoisRH,AnneeRH))
  38. data = agrhum_db.read_all("select * from tbl_importrh where codeagent ='{}' and Month([daterh]) = {} and Year([daterh]) = {}".format(CodeAgent, MoisRH,AnneeRH))
  39. sql = Sql.format("""SELECT
  40. tbl_baremes.NomBareme,
  41. tbl_baremes.BorneInf,
  42. tbl_baremes.BorneSup,
  43. tbl_baremes.Valeur,
  44. tbl_PeriodeBareme.DateInf,
  45. tbl_PeriodeBareme.DateSup
  46. FROM tbl_baremes
  47. INNER JOIN tbl_PeriodeBareme ON (tbl_baremes.PeriodeValidite = tbl_PeriodeBareme.CodePeriode) AND (tbl_baremes.NomBareme = tbl_PeriodeBareme.NomBareme)
  48. WHERE tbl_baremes.NomBareme = 'Heures de route'
  49. AND tbl_PeriodeBareme.DateInf <= {:date}
  50. AND (tbl_PeriodeBareme.DateSup is null or tbl_PeriodeBareme.DateSup > {:date}) """, datetime(AnneeRH,MoisRH,1), datetime(AnneeRH,MoisRH,1))
  51. baremes = agrhum_db.read_all(sql)
  52. index = {}
  53. for el in data :
  54. if not el.DateRH.day in index :
  55. fraisdep = FraisDeplacement()
  56. fraisdep.AnneeRH = AnneeRH
  57. fraisdep.CodeAgent = CodeAgent
  58. fraisdep.MoisRH = MoisRH
  59. fraisdep.JourRH = el.DateRH.day
  60. fraisdep.Depart = el.Depart
  61. # mettre a jour le codedepart
  62. fraisdep.Itineraire = " - ".join([loc for loc in (fraisdep.Depart, el.Localisation) if loc])
  63. fraisdep.Distance1_perso = int(el.DistanceTranche1) if el.VehiculePersoTranche1 == "True" else 0
  64. fraisdep.Distance2_perso = int(el.DistanceTranche2) if el.VehiculePersoTranche2 == "True" else 0
  65. fraisdep.Distance2_service = int(el.DistanceTranche2) if not el.VehiculePersoTranche2 == "True" else 0
  66. fraisdep.Repas = int(el.Repas)
  67. index[el.DateRH.day] = fraisdep
  68. else :
  69. index[el.DateRH.day].Itineraire += " - " + el.Localisation
  70. index[el.DateRH.day].Distance1_perso += int(el.DistanceTranche1) if el.VehiculePersoTranche1 == "True" else 0
  71. index[el.DateRH.day].Distance2_perso += int(el.DistanceTranche2) if el.VehiculePersoTranche2 == "True" else 0
  72. index[el.DateRH.day].Distance2_service += int(el.DistanceTranche2) if not el.VehiculePersoTranche2 == "True" else 0
  73. index[el.DateRH.day].Repas += int(el.Repas)
  74. for fraisdep in index.values() :
  75. distance2 = (fraisdep.Distance2_perso + fraisdep.Distance2_service)
  76. fraisdep.HeuresDep = next((bareme.Valeur for bareme in baremes if bareme.BorneInf <= distance2 and bareme.BorneSup > distance2))
  77. fraisdep.HeuresDepNuit = next((bareme.Valeur for bareme in baremes if bareme.BorneInf <= fraisdep.Distance1_perso and bareme.BorneSup > fraisdep.Distance1_perso))
  78. with open(Path(r"%temp%\test.json").expandvars(), "w+") as f:
  79. f.write(str(index))
  80. if __name__ == "__main__":
  81. main()