qgis_sync_videores.py 2.8 KB

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