Просмотр исходного кода

[NEW] Reprise ctrl2analytique [en cours]

olivier.massot 7 лет назад
Родитель
Сommit
1a80b583f8
1 измененных файлов с 113 добавлено и 5 удалено
  1. 113 5
      ctrl2analytique.py

+ 113 - 5
ctrl2analytique.py

@@ -16,7 +16,7 @@ from path import Path
 
 
 from core import logconf
 from core import logconf
 from core.model import Model
 from core.model import Model
-from core.pde import ControlesDb, AnalytiqueDb, mk_workdir
+from core.pde import ControlesDb, AnalytiqueDb, mk_workdir, CommunDb
 
 
 logger = logging.getLogger("ctrl2analytique")
 logger = logging.getLogger("ctrl2analytique")
 logconf.start("ctrl2analytique", logging.DEBUG)
 logconf.start("ctrl2analytique", logging.DEBUG)
@@ -27,6 +27,7 @@ logconf.start("ctrl2analytique", logging.DEBUG)
 logger.warning("<<<<<<<<<<<<<<   Mode TEST   >>>>>>>>>>>>>>>>>")
 logger.warning("<<<<<<<<<<<<<<   Mode TEST   >>>>>>>>>>>>>>>>>")
 ControlesDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\cg67Parc_data.mdb")
 ControlesDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\cg67Parc_data.mdb")
 AnalytiqueDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\Db_analytique.mdb")
 AnalytiqueDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\Db_analytique.mdb")
+CommunDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\Commun_Data.mdb")
 
 
 ##-----------------------------------------------
 ##-----------------------------------------------
 
 
@@ -43,11 +44,17 @@ analytique_db = AnalytiqueDb(autocommit=False)
 # Connexion à Controles
 # Connexion à Controles
 controles_db = ControlesDb(autocommit=False)
 controles_db = ControlesDb(autocommit=False)
 
 
+# Connexion à CommunDb
+commun_db = CommunDb(autocommit=False)
+
 # Make the working directory
 # Make the working directory
 workdir = mk_workdir("ctrl2analytique")
 workdir = mk_workdir("ctrl2analytique")
 affaires_file = workdir / "affaires.csv"
 affaires_file = workdir / "affaires.csv"
 intervs_file = workdir / "intervs.csv"
 intervs_file = workdir / "intervs.csv"
 
 
+errors = []
+
+
 # > Supprime les fichiers d'import s'il existent
 # > Supprime les fichiers d'import s'il existent
 for file in (affaires_file, intervs_file):
 for file in (affaires_file, intervs_file):
     if file.exists():
     if file.exists():
@@ -104,6 +111,7 @@ with open(affaires_file, 'w+') as f:
 
 
 # on insère les affaires depuis tblCommandes et tblChantier (le lien est strLiaisonControle)
 # on insère les affaires depuis tblCommandes et tblChantier (le lien est strLiaisonControle)
 
 
+compteur = 0
 sql = """ SELECT tblCommandes.lngChantierId, tblCommandes.bytCommandeId, tblChantiers.strSubdivisionId, tblChantiers.strCollectiviteId as ChantierCollectiviteId, tblChantiers.strLocChantier,
 sql = """ SELECT tblCommandes.lngChantierId, tblCommandes.bytCommandeId, tblChantiers.strSubdivisionId, tblChantiers.strCollectiviteId as ChantierCollectiviteId, tblChantiers.strLocChantier,
           tblChantiers.strEntrepriseId, tblCommandes.strCollectiviteId as CommandeCollectiviteId, tblCommandes.dtmCommande, tblCommandes.strRefCommande, tblCommandes.blnMarche, tblCommandes.dblMtMarche, tblCommandes.strdevis
           tblChantiers.strEntrepriseId, tblCommandes.strCollectiviteId as CommandeCollectiviteId, tblCommandes.dtmCommande, tblCommandes.strRefCommande, tblCommandes.blnMarche, tblCommandes.dblMtMarche, tblCommandes.strdevis
           FROM tblChantiers INNER JOIN tblCommandes ON tblChantiers.lngChantierId = tblCommandes.lngChantierId
           FROM tblChantiers INNER JOIN tblCommandes ON tblChantiers.lngChantierId = tblCommandes.lngChantierId
@@ -132,13 +140,16 @@ for data in controles_db.read(sql):
     with open(affaires_file, 'a') as f:
     with open(affaires_file, 'a') as f:
         f.write(affaire.to_csv())
         f.write(affaire.to_csv())
 
 
+    compteur += 1
+
+logger.info("> {} affaires ajoutées à {}".format(compteur, affaires_file))
 
 
 # *** 2- Import des interventions de contrôle du compactage dans le fichier intervs.csv
 # *** 2- Import des interventions de contrôle du compactage dans le fichier intervs.csv
 
 
 class Interv(Model):
 class Interv(Model):
     _FIELDS = ["strEquipeId", "strEnginId", "strRapportId", "strTypeInterventionId",
     _FIELDS = ["strEquipeId", "strEnginId", "strRapportId", "strTypeInterventionId",
                "strTypeInterventionId", "strCatégorieInterventionId", "dblquantite", "strunite", "dtmIntervention",
                "strTypeInterventionId", "strCatégorieInterventionId", "dblquantite", "strunite", "dtmIntervention",
-               "dtmDureeIntervention", "dtmDureeInstallation", "strLiaisonControle", "strArticleId",
+               "dtmDureeIntervention", "dtmDureeInstallation", "strLiaisonControle", "strArticleId", "intPeriode",
                "remarques", "strgrandeur1", "strgrandeur2", "strgrandeur3",
                "remarques", "strgrandeur1", "strgrandeur2", "strgrandeur3",
                "strcaracteristique1", "strcaracteristique2", "strcaracteristique3",
                "strcaracteristique1", "strcaracteristique2", "strcaracteristique3",
                "dtmImportation", "strTest", "LienAff"
                "dtmImportation", "strTest", "LienAff"
@@ -149,6 +160,17 @@ firstline = "\t".join(Interv._FIELDS + ["\n"])
 with open(intervs_file, 'w+') as f:
 with open(intervs_file, 'w+') as f:
     f.write(firstline)
     f.write(firstline)
 
 
+def engin_existe(strEnginId):
+    return analytique_db.exists("SELECT strEnginId FROM tbl_Engin WHERE strEnginId='{}'".format(strEnginId))
+
+def get_periode_validite(date_interv):
+    sql = """SELECT intPeriodeValiditeId FROM tblTarifValidite
+            WHERE [dtmValiditeDebut] <= #{date_interv}# AND [dtmValiditeFin] > #{date_interv}# AND [bytClasseTarifId]=1
+    """.format(date_interv=date_interv)
+    return commun_db.first(sql).intPeriodeValiditeId
+
+compteur = 0
+
 sql = """SELECT tblCompactageIntervs.lngChantierId, tblCompactageIntervs.bytCommandeId, tblCompactageIntervs.bytIntervId, tblCompactageIntervs.strEquipeId,
 sql = """SELECT tblCompactageIntervs.lngChantierId, tblCompactageIntervs.bytCommandeId, tblCompactageIntervs.bytIntervId, tblCompactageIntervs.strEquipeId,
         tblCompactageEngins.strEnginId, tblCompactageIntervs.lngRapportId, tblCompactageBases.memTravaux, tblCompactageResultats.dtmEssai,
         tblCompactageEngins.strEnginId, tblCompactageIntervs.lngRapportId, tblCompactageBases.memTravaux, tblCompactageResultats.dtmEssai,
         tblCompactageResultats.dtmDuree, tblCompactagePartChantiers.strTrcRegard, tblMateriaux.strMatériau,
         tblCompactageResultats.dtmDuree, tblCompactagePartChantiers.strTrcRegard, tblMateriaux.strMatériau,
@@ -179,10 +201,12 @@ def get_type_compactage_interv(observation):
 for data in controles_db.read(sql):
 for data in controles_db.read(sql):
     interv = Interv()
     interv = Interv()
 
 
+    if not engin_existe(data.strEnginId):
+        errors.append("""Intervention compactage {}/{}/{}/{}: l'engin {} n'existe pas"""
+                      .format(data.lngChantierId, data.bytCommandeId, data.bytIntervId, data.bytPartChantierId, data.strEnginId))
+
     interv.strEquipeId = "C{}".format(data.strEquipeId)
     interv.strEquipeId = "C{}".format(data.strEquipeId)
     interv.strEnginId = data.strEnginId
     interv.strEnginId = data.strEnginId
-    # TODO: Contrôler si l'engin existe dans tbl_Engin
-    interv.strEnginId = data.strEnginId
     interv.strRapportId = data.strRapportId
     interv.strRapportId = data.strRapportId
     interv.strTypeInterventionId = get_type_compactage_interv(data.memTravaux)
     interv.strTypeInterventionId = get_type_compactage_interv(data.memTravaux)
     interv.strCatégorieInterventionId = "CC"
     interv.strCatégorieInterventionId = "CC"
@@ -193,6 +217,7 @@ for data in controles_db.read(sql):
     interv.dtmDureeInstallation = 0  # Les temps d'installation seront recalculés en fin de traitement
     interv.dtmDureeInstallation = 0  # Les temps d'installation seront recalculés en fin de traitement
     interv.strLiaisonControle = "{}/{}/{}".format(data.lngChantierId, data.bytCommandeId, data.bytIntervId)
     interv.strLiaisonControle = "{}/{}/{}".format(data.lngChantierId, data.bytCommandeId, data.bytIntervId)
     interv.strArticleId = data.strEnginId
     interv.strArticleId = data.strEnginId
+    interv.intPeriode = get_periode_validite(data.dtmEssai)
     interv.remarques = data.strTrcRegard
     interv.remarques = data.strTrcRegard
     interv.strgrandeur1 = data.strMatériau
     interv.strgrandeur1 = data.strMatériau
     interv.strgrandeur2 = data.strMatériau
     interv.strgrandeur2 = data.strMatériau
@@ -207,7 +232,12 @@ for data in controles_db.read(sql):
     with open(intervs_file, 'a') as f:
     with open(intervs_file, 'a') as f:
         f.write(interv.to_csv())
         f.write(interv.to_csv())
 
 
+    compteur += 1
+
+logger.info("> {} interventions Compactage ajoutées à {}".format(compteur, intervs_file))
+
 # *** 3- Import des interventions de contrôle d'étanchéité dans le fichier intervs.csv
 # *** 3- Import des interventions de contrôle d'étanchéité dans le fichier intervs.csv
+compteur = 0
 
 
 sql = """SELECT tblEtancheiteIntervs.lngChantierId, tblEtancheiteIntervs.bytCommandeId, tblEtancheiteIntervs.bytIntervId, tblEtancheiteIntervs.strEquipeId,
 sql = """SELECT tblEtancheiteIntervs.lngChantierId, tblEtancheiteIntervs.bytCommandeId, tblEtancheiteIntervs.bytIntervId, tblEtancheiteIntervs.strEquipeId,
             tblEtancheiteIntervs.lngRapportId, tblEtancheitePartChantiers.bytTypeEssai, tblMateriaux.strMateriauId, tblMateriaux.strMatériau,
             tblEtancheiteIntervs.lngRapportId, tblEtancheitePartChantiers.bytTypeEssai, tblMateriaux.strMateriauId, tblMateriaux.strMatériau,
@@ -244,6 +274,7 @@ for data in controles_db.read(sql):
     interv.dtmDureeInstallation = 0  # Les temps d'installation seront recalculés en fin de traitement
     interv.dtmDureeInstallation = 0  # Les temps d'installation seront recalculés en fin de traitement
     interv.strLiaisonControle = "{}/{}/{}".format(data.lngChantierId, data.bytCommandeId, data.bytIntervId)
     interv.strLiaisonControle = "{}/{}/{}".format(data.lngChantierId, data.bytCommandeId, data.bytIntervId)
     interv.strArticleId = interv.strEnginId
     interv.strArticleId = interv.strEnginId
+    interv.intPeriode = get_periode_validite(data.dtmEssai)
     interv.remarques = data.strTrcRegard
     interv.remarques = data.strTrcRegard
     interv.strgrandeur1 = data.strMatériau
     interv.strgrandeur1 = data.strMatériau
     interv.strgrandeur2 = data.intDiametre
     interv.strgrandeur2 = data.intDiametre
@@ -260,8 +291,12 @@ for data in controles_db.read(sql):
     with open(intervs_file, 'a') as f:
     with open(intervs_file, 'a') as f:
         f.write(interv.to_csv())
         f.write(interv.to_csv())
 
 
+    compteur += 1
+
+logger.info("> {} interventions Etanchéité ajoutées à {}".format(compteur, intervs_file))
 
 
 # *** 4- Import des interventions d'inspection vidéo dans le fichier intervs.csv
 # *** 4- Import des interventions d'inspection vidéo dans le fichier intervs.csv
+compteur = 0
 
 
 sql = """SELECT tblVideoIntervs.lngChantierId, tblVideoIntervs.bytCommandeId, tblVideoIntervs.bytIntervId, tblVideoIntervs.strEquipeId,
 sql = """SELECT tblVideoIntervs.lngChantierId, tblVideoIntervs.bytCommandeId, tblVideoIntervs.bytIntervId, tblVideoIntervs.strEquipeId,
         tblVideoEngins.strEnginId, tblVideoIntervs.lngRapportId, First(tblso_rate_Analyse.MateriauCourt) AS strmateriau, tblVideoIntervs.lngTroncon,
         tblVideoEngins.strEnginId, tblVideoIntervs.lngRapportId, First(tblso_rate_Analyse.MateriauCourt) AS strmateriau, tblVideoIntervs.lngTroncon,
@@ -279,6 +314,11 @@ sql = """SELECT tblVideoIntervs.lngChantierId, tblVideoIntervs.bytCommandeId, tb
 for data in controles_db.read(sql):
 for data in controles_db.read(sql):
     interv = Interv()
     interv = Interv()
 
 
+
+    if not engin_existe(data.strEnginId):
+        errors.append("""Intervention compactage {}/{}/{}/1: l'engin {} n'existe pas"""
+                      .format(data.lngChantierId, data.bytCommandeId, data.bytIntervId, data.strEnginId))
+
     interv.strEquipeId = "C{}".format(data.strEquipeId)
     interv.strEquipeId = "C{}".format(data.strEquipeId)
     interv.strEnginId = data.strEnginId
     interv.strEnginId = data.strEnginId
     interv.strRapportId = data.lngRapportId
     interv.strRapportId = data.lngRapportId
@@ -291,6 +331,7 @@ for data in controles_db.read(sql):
     interv.dtmDureeInstallation = 0  # Les temps d'installation seront recalculés en fin de traitement
     interv.dtmDureeInstallation = 0  # Les temps d'installation seront recalculés en fin de traitement
     interv.strLiaisonControle = "{}/{}/{}".format(data.lngChantierId, data.bytCommandeId, data.bytIntervId)
     interv.strLiaisonControle = "{}/{}/{}".format(data.lngChantierId, data.bytCommandeId, data.bytIntervId)
     interv.strArticleId = data.strEnginId
     interv.strArticleId = data.strEnginId
+    interv.intPeriode = get_periode_validite(data.dtmIntervDu)
     interv.remarques = data.memObservation
     interv.remarques = data.memObservation
     interv.strgrandeur1 = data.strmateriau
     interv.strgrandeur1 = data.strmateriau
     interv.strgrandeur2 = data.diam
     interv.strgrandeur2 = data.diam
@@ -307,11 +348,78 @@ for data in controles_db.read(sql):
     with open(intervs_file, 'a') as f:
     with open(intervs_file, 'a') as f:
         f.write(interv.to_csv())
         f.write(interv.to_csv())
 
 
+    compteur += 1
+
+logger.info("> {} interventions ITV ajoutées à {}".format(compteur, intervs_file))
+
+# *** 5- Interruption pour corection manuelle des données (si nécessaire)
+logging.info("Les données à importer ont été ajoutées aux fichiers '{}' et '{}'".format(affaires_file, intervs_file))
+
+if errors:
+    logging.error("<!> Des erreurs ont été détectées dans les données à importer. <!>")
+    for msg in errors:
+        logging.error(msg)
+
+prompt = ""
+while prompt != "v":
+    prompt = input(">> Veuillez contrôler les données, puis taper 'v' pour continuer, ou 'q' pour quitter...")
+    if prompt == "q":
+        sys.exit(1)
+
+
+# *** 6- Insertion des données dans les tables Analytique
+with open(affaires_file) as f:
+    next(f)  # saute la première ligne
+
+    for line in f:
+        affaire = Affaire.from_csv(line)
+
+        sql = """ INSERT INTO tbl_Affaires ( strMOId, strMOeId, strEntrepriseId, strCommneId, strLieux, strTypeId, dtmCommande, Ref,
+                                            blnMarche, dblMarche, intTypeContrat, strCT, strAvancement, strLiaisonControle, intDevisId, blnTarification,
+                                            blnAnalyse, remarques, strSituation, dtmFin, intCoefFG )
+           SELECT {strMOId}, {strMOeId}, {strEntrepriseId}, {strCommneId}, {strLieux}, {strTypeId}, {dtmCommande},
+           {Ref}, {blnMarche}, {dblMarche}, {intTypeContrat}, {strCT}, {strAvancement}, {strLiaisonControle}, {intDevisId},
+           {blnTarification}, {blnAnalyse}, {remarques}, {strSituation}, {dtmFin}, {intCoefFG}
+           """.format(strMOId=affaire.strMOId,
+                      strMOeId=affaire.strMOeId,
+                      strEntrepriseId=affaire.strEntrepriseId,
+                      strCommneId=affaire.strCommneId,
+                      dtmCommande=affaire.dtmCommande,
+                      Ref=affaire.Ref,
+                      blnMarche=affaire.blnMarche,
+                      dblMarche=affaire.dblMarche,
+                      intTypeContrat=affaire.intTypeContrat,
+                      strCT=affaire.strCT,
+                      strAvancement=affaire.strAvancement,
+                      strLiaisonControle=affaire.strLiaisonControle,
+                      intDevisId=affaire.intDevisId,
+                      blnTarification=affaire.blnTarification,
+                      blnAnalyse=affaire.blnAnalyse,
+                      remarques=affaire.remarques,
+                      strSituation=affaire.strSituation,
+                      dtmFin=affaire.dtmFin,
+                      intCoefFG=affaire.intCoefFG)
+
+        analytique_db.execute(sql)
+
+        affaire.affaireId = analytique_db.first("SELECT TOP 1 DblAffaireId FROM tbl_Affaires ORDER BY DblAffaireId DESC").DblAffaireId
+        # Stocker cette valeur dans un dico associéeau strLiaisonControle, pour la maj de tblIntervs
+
+        # Insérer ici les intervs liées à l'affaire (?)
+
+        # Maj champs MOS, puis committer
+
+
+with open(intervs_file) as f:
+    next(f)  # saute la première ligne
 
 
-# *** 5- Mises à jours et contrôles des erreurs
+    for line in f:
+        interv = Interv.from_csv(line)
 
 
 
 
+# Reprendre la fonction PostVerif
 
 
+# Maj des temps d'installation