|
|
@@ -1,10 +1,24 @@
|
|
|
-'''
|
|
|
+"""
|
|
|
|
|
|
-'''
|
|
|
+ Traite les données importées dans PDA pour peupler les tables de la base AGRHum
|
|
|
+
|
|
|
+
|
|
|
+ usage: agrhum_traitement [-c <codeagent>] [-m <mois>] [-a <annee>] [--auto]
|
|
|
+
|
|
|
+ Options:
|
|
|
+ -c <codeagent> Code de l'agent à traiter
|
|
|
+ -m <mois> Mois
|
|
|
+ -a <annee> Annee
|
|
|
+ --auto Pas d'interaction utilisateur
|
|
|
+ -h, --help Affiche l'aide
|
|
|
+
|
|
|
+ @author: emmanuel.pheulpin et olivier.massot, juill 2018
|
|
|
+"""
|
|
|
|
|
|
from datetime import datetime
|
|
|
import logging
|
|
|
|
|
|
+from docopt import docopt
|
|
|
from path import Path # @UnusedImport
|
|
|
|
|
|
from core import logconf
|
|
|
@@ -18,26 +32,27 @@ logconf.start("ctrl2analytique", logging.DEBUG)
|
|
|
# # POUR TESTER, décommenter les lignes suivantes
|
|
|
##-----------------------------------------------
|
|
|
|
|
|
-# AgrhumDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\BDD_ParcRH.mdb")
|
|
|
-# CommunDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\Commun_Data.mdb")
|
|
|
-# logger.handlers = [h for h in logger.handlers if (type(h) == logging.StreamHandler)]
|
|
|
-# logger.warning("<<<<<<<<<<<<<< Mode TEST >>>>>>>>>>>>>>>>>")
|
|
|
+AgrhumDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\BDD_ParcRH.mdb")
|
|
|
+logger.handlers = [h for h in logger.handlers if (type(h) == logging.StreamHandler)]
|
|
|
+logger.warning("<<<<<<<<<<<<<< Mode TEST >>>>>>>>>>>>>>>>>")
|
|
|
|
|
|
##-----------------------------------------------
|
|
|
|
|
|
agrhum_db = AgrhumDb(autocommit=False)
|
|
|
|
|
|
-CodeAgent = "T9"
|
|
|
-MoisRH = 12
|
|
|
-AnneeRH = 2017
|
|
|
-
|
|
|
# Vérification dans la table tbl_suiviRH si la ligne agent mois annnée existe
|
|
|
# Vérification si état != de Importé ou si valide = True : demande confirmation pour retraitement
|
|
|
# Si retraitement on supprime des tables cibles tbl_formHS et tbl_formDep
|
|
|
# Parcours de tbl_importRH transfo donnée et écriture dans tbl_formdep
|
|
|
# Parcours de tbl_importRH transfo donnée et écriture dans tbl_formHS
|
|
|
|
|
|
-def main():
|
|
|
+
|
|
|
+
|
|
|
+def main(CodeAgent, MoisRH, AnneeRH, auto=False):
|
|
|
+
|
|
|
+ logger.error("> Traitement des données de l'agent %s pour le mois %s/%s", CodeAgent, MoisRH, AnneeRH)
|
|
|
+
|
|
|
+
|
|
|
|
|
|
suivi = agrhum_db.first(Sql.format("SELECT * FROM tbl_SuiviRH WHERE CodeAgent ={:text} AND MoisRH = {} AND AnneeRH = {}",
|
|
|
CodeAgent, MoisRH, AnneeRH))
|
|
|
@@ -46,18 +61,24 @@ def main():
|
|
|
logger.error("Les données de l'agent %s pour le mois %s/%s n'ont pas été importées dans la base PDA. Opération annulée.", CodeAgent, MoisRH, AnneeRH)
|
|
|
return
|
|
|
|
|
|
- if suivi.Etat == "Importé":
|
|
|
- logger.warning("Les données de l'agent %s pour le mois %s/%s ont déjà été traitées.")
|
|
|
- if input("Voulez vous retraiter ces données? Toute modification sur les données existantes seront perdues. (o/n)") != "o" :
|
|
|
- logger.info("Opération annulée")
|
|
|
- return
|
|
|
+ if suivi.Etat == "Validé":
|
|
|
+ logger.error("Impossible de traiter des données qui ont déjà été validées. Opération annulée.")
|
|
|
+ return
|
|
|
|
|
|
- agrhum_db.execute(Sql.format("DELETE * FROM tbl_FormDep WHERE CodeAgent ={:text} AND MoisRH = {} AND AnneeRH = {}",
|
|
|
- CodeAgent, MoisRH, AnneeRH))
|
|
|
- agrhum_db.execute(Sql.format("DELETE * FROM tbl_FormHS WHERE CodeAgent ={:text} AND MoisRH = {} AND AnneeRH = {}",
|
|
|
- CodeAgent, MoisRH, AnneeRH))
|
|
|
+ if agrhum_db.exists(Sql.format("SELECT * FROM tbl_FormDep WHERE CodeAgent ={:text} AND MoisRH = {} AND AnneeRH = {}", CodeAgent, MoisRH, AnneeRH)):
|
|
|
+ logger.warning("Les données de l'agent %s pour le mois %s/%s ont déjà été traitées.", CodeAgent, MoisRH, AnneeRH)
|
|
|
|
|
|
+ if not auto and input("Voulez vous retraiter ces données? Toute modification sur les données existantes seront perdues. (o/n)") == "o" :
|
|
|
+ logger.info(">> Effacement des anciennes données")
|
|
|
+ agrhum_db.execute(Sql.format("DELETE * FROM tbl_FormDep WHERE CodeAgent ={:text} AND MoisRH = {} AND AnneeRH = {}",
|
|
|
+ CodeAgent, MoisRH, AnneeRH))
|
|
|
+ agrhum_db.execute(Sql.format("DELETE * FROM tbl_FormHS WHERE CodeAgent ={:text} AND MoisRH = {} AND AnneeRH = {}",
|
|
|
+ CodeAgent, MoisRH, AnneeRH))
|
|
|
+ else:
|
|
|
+ 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))
|
|
|
@@ -66,7 +87,7 @@ def main():
|
|
|
tbl_PeriodeBareme.DateInf, tbl_PeriodeBareme.DateSup
|
|
|
FROM tbl_baremes
|
|
|
INNER JOIN tbl_PeriodeBareme ON (tbl_baremes.PeriodeValidite = tbl_PeriodeBareme.CodePeriode) AND (tbl_baremes.NomBareme = tbl_PeriodeBareme.NomBareme)
|
|
|
- WHERE tbl_baremes.NomBareme = 'Heures de route'
|
|
|
+ WHERE tbl_baremes.NomBareme = 'Heures de route' or tbl_baremes.NomBareme = 'Heures de route (nuit)'
|
|
|
AND tbl_PeriodeBareme.DateInf <= {:date}
|
|
|
AND (tbl_PeriodeBareme.DateSup is null or tbl_PeriodeBareme.DateSup > {:date}) """,
|
|
|
datetime(AnneeRH, MoisRH, 1), datetime(AnneeRH, MoisRH, 1))
|
|
|
@@ -74,7 +95,7 @@ def main():
|
|
|
baremes = agrhum_db.read_all(sql)
|
|
|
|
|
|
|
|
|
-
|
|
|
+ logger.info("Mise à jour de frais de déplacement")
|
|
|
# Parcours des données de la requête
|
|
|
index_dep = {}
|
|
|
for el in data :
|
|
|
@@ -112,8 +133,8 @@ def main():
|
|
|
for fraisdep in index_dep.values() :
|
|
|
|
|
|
distance2 = (fraisdep.Distance2_perso + fraisdep.Distance2_service)
|
|
|
- fraisdep.HeuresDep = next((bareme.Valeur for bareme in baremes if bareme.BorneInf <= distance2 and bareme.BorneSup > distance2))
|
|
|
- fraisdep.HeuresDepNuit = next((bareme.Valeur for bareme in baremes if bareme.BorneInf <= fraisdep.Distance1_perso and bareme.BorneSup > fraisdep.Distance1_perso))
|
|
|
+ fraisdep.HeuresDep = next((bareme.Valeur for bareme in baremes if bareme.NomBareme == 'Heures de route' and bareme.BorneInf <= distance2 and bareme.BorneSup > distance2))
|
|
|
+ fraisdep.HeuresDepNuit = next((bareme.Valeur for bareme in baremes if bareme.NomBareme == 'Heures de route (nuit)' and bareme.BorneInf <= distance2 and bareme.BorneSup > distance2))
|
|
|
|
|
|
sql = Sql.format("""INSERT INTO tbl_FormDep
|
|
|
( IDSuivi, CodeAgent, JourRH, MoisRH,
|
|
|
@@ -130,6 +151,7 @@ def main():
|
|
|
agrhum_db.execute(sql)
|
|
|
|
|
|
# on re-parcourt des données de la requête
|
|
|
+ logger.info("Mise à jour des heures supplémentaires")
|
|
|
index_hs = {}
|
|
|
|
|
|
for el in data :
|
|
|
@@ -160,7 +182,7 @@ def main():
|
|
|
totalhs = 0.0
|
|
|
totalhsmois = 0.0
|
|
|
for hs in index_hs.values() :
|
|
|
- totalhs = hs.HeureSup1 + hs.HeureSupNuit + hs.HeureSupDim
|
|
|
+ totalhs = hs.HeureSup1 + hs.HeuresDep + hs.HeureSupNuit + hs.HeureSupDim
|
|
|
if totalhs + totalhsmois <= 14 :
|
|
|
hs.HeureSup1Inf14 = totalhs
|
|
|
elif totalhsmois > 14 :
|
|
|
@@ -189,9 +211,25 @@ def main():
|
|
|
|
|
|
|
|
|
# Commit des données
|
|
|
+ logger.info("Commit des modifications")
|
|
|
agrhum_db.commit()
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
- main()
|
|
|
+
|
|
|
+ # Parse les arguments
|
|
|
+ args = docopt(__doc__, help=False)
|
|
|
+ CodeAgent = args["-c"] if args["-c"] else None
|
|
|
+ MoisRH = args["-m"] if args["-m"] else None
|
|
|
+ AnneeRH = args["-a"] if args["-a"] else None
|
|
|
+
|
|
|
+ if not CodeAgent:
|
|
|
+ CodeAgent = input("Veuillez saisir le code de l'agent à traiter (ex: T9): ")
|
|
|
+ if not MoisRH:
|
|
|
+ MoisRH = input("Veuillez saisir le mois (ex: 3): ")
|
|
|
+ if not AnneeRH:
|
|
|
+ AnneeRH = input("Veuillez saisir l'année (ex: 2018): ")
|
|
|
+
|
|
|
+ main(CodeAgent, int(MoisRH), int(AnneeRH), args["--auto"])
|
|
|
+ logger.info("-- Fin --")
|