gf2factures.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. '''
  2. Script d'import des données de facturation depuis la base de données ASTRE-GF
  3. vers les tables de la base Factures du Parc Départemental d'Erstein
  4. @author: olivier.massot, juin 2017
  5. '''
  6. from datetime import datetime
  7. import logging
  8. from path import Path # @UnusedImport
  9. from core import logconf
  10. from core.pde import FacturesDb
  11. from core.webservice import GfWebservice
  12. logger = logging.getLogger("gf2factures")
  13. logconf.start("gf2factures", logging.INFO)
  14. # # POUR TESTER, décommenter les lignes suivantes
  15. ##-----------------------------------------------
  16. # GfWebservice._url = r"http://webservices-t.bas-rhin.fr/CG67.AstreGF.WebServices/public/WsPDE.asmx"
  17. # FacturesDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\Facture_data.mdb")
  18. # logger.handlers = [h for h in logger.handlers if (type(h) == logging.StreamHandler)]
  19. # logger.warning("<<<<<<<<<<<<<< Mode TEST >>>>>>>>>>>>>>>>>")
  20. ##-----------------------------------------------
  21. def main():
  22. logger.info("Initialization")
  23. # Connect to factures.mdb
  24. factures_db = FacturesDb(autocommit=False)
  25. # Connect to the astre gf webservice
  26. ws = GfWebservice("GetPDETitres")
  27. analysed = 0
  28. updated = 0
  29. logger.info("Mise à jour de FacturesDb")
  30. for titre in ws:
  31. if not titre:
  32. continue
  33. analysed += 1
  34. strfilter = "[lngDocId]={} AND [bytTypeDocumentId]=50".format(titre["docId"])
  35. record = factures_db.first("SELECT memobsinterne FROM tblPieceEntete WHERE {}".format(strfilter))
  36. if not record:
  37. logger.warning("(!) no record found where '{}'".format(strfilter))
  38. continue
  39. memobs = record.memobsinterne if record.memobsinterne else ""
  40. if "Titre n° : {}".format(titre["titreId"]) in memobs:
  41. # already imported
  42. continue
  43. logger.info("Mise à jour de : {}".format(titre["docId"]))
  44. if memobs:
  45. memobs += "\r\n"
  46. dt = datetime.strptime(titre["dateTitre"][:10], "%Y-%m-%d").strftime("%d/%m/%Y")
  47. memobs += r"Titre n° : {} le {}".format(titre["titreId"], dt)
  48. factures_db.execute("UPDATE tblPieceEntete SET [memObsInterne]='{}' WHERE {}".format(memobs, strfilter))
  49. factures_db.commit()
  50. updated += 1
  51. logger.info("{} lines analysées, {} mises à jour".format(analysed, updated))
  52. if __name__ == "__main__":
  53. main()
  54. logger.info("-- Fin --")