| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- '''
- Met à jour les résultats des contrôles ITV des regards et tronçons de la base POSTGIS
- Les résultats à jour sont issus de la base Contrôles
- Pour des raisons de performances, seuls sont contrôlés les essais datant de moins de X mois,
- où X vaut 24 par défaut
- @author: olivier.massot, mai 2018
- '''
- from _datetime import datetime
- import logging
- from dateutil.relativedelta import relativedelta
- from path import Path
- from core import logconf
- from core.model import Sql
- from core.pde import ControlesDb, CSigDb
- logger = logging.getLogger("qgis_sync_videores")
- logconf.start("qgis_sync_videores", logging.DEBUG)
- IMPORT_DEPUIS = 24 # Ne cherche des données à importer que sur les X derniers mois (mettre à 0 pour ignorer)
- # # POUR TESTER, décommenter les lignes suivantes
- ##-----------------------------------------------
- #
- # ControlesDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\cg67Parc_data.mdb")
- # CSigDb.server = "TR-POSTGIS-02"
- # CSigDb.pwd = "Am5VOMkdFHU7WwrfVOs9"
- # logger.handlers = [h for h in logger.handlers if (type(h) == logging.StreamHandler)]
- # logger.warning("<<<<<<<<<<<<<< Mode TEST >>>>>>>>>>>>>>>>>")
- ##-----------------------------------------------
- def main():
- # Connexion à ControlesSig (postgres)
- csig_db = CSigDb(autocommit=False)
- # Connexion à Controles
- controles_db = ControlesDb(autocommit=False)
- # filter results on the last X months, depending on corresponding parameter
- date_min = datetime.today() - relativedelta(months=IMPORT_DEPUIS) if IMPORT_DEPUIS >= 0 else datetime(1899, 12, 30, 0, 0, 0)
- logger.info("Chargement des données")
- qessais = controles_db.read(Sql.format("SELECT lngChantierId, SI_AutoNumber, DG FROM csig_itv_results WHERE SI_Date > {:date}", date_min))
- for essai in qessais:
- troncon = csig_db.first(Sql.format("""SELECT t_chantiers.numero, t_troncons.si_autonumber, t_troncons.res_itv
- FROM (t_troncons INNER JOIN t_chantiers ON t_troncons.id_chantier = t_chantiers.id)
- WHERE t_troncons.si_autonumber={}
- """, essai.SI_AutoNumber))
- if not troncon:
- logger.warning("Le tronçon n'existe pas dans ControlesSIG (si_autonumber=%s)", essai.SI_AutoNumber)
- continue
- if troncon.res_itv != essai.DG:
- logger.info("Mise à jour du tronçon si_autonumber=%s", essai.SI_AutoNumber)
- csig_db.execute(Sql.format("""UPDATE t_troncons
- SET res_itv = {dg:text}
- WHERE si_autonumber = {si_autonumber}""", dg=essai.DG, si_autonumber=essai.SI_AutoNumber))
- csig_db.commit()
- if __name__ == "__main__":
- main()
- logger.info("-- Fin --")
|