瀏覽代碼

Ajout du script d'export des fichiers de config de la base PDA vers
l'appli SuiviDesActivites

olivier.massot 8 年之前
父節點
當前提交
6772cdf89b
共有 2 個文件被更改,包括 71 次插入2 次删除
  1. 6 2
      core/pde.py
  2. 65 0
      pda2suiviactivite.py

+ 6 - 2
core/pde.py

@@ -22,8 +22,8 @@ def mk_workdir(name):
     workdir.mkdir_p()
     return workdir
 
-# DB_DIRPATH = Path(r"\\h2o\local\4-transversal\BDD\mdb")
-DB_DIRPATH = Path(r"C:\wrktmp\mdb")
+DB_DIRPATH = Path(r"\\h2o\local\4-transversal\BDD\mdb")
+# DB_DIRPATH = Path(r"C:\wrktmp\mdb")
 
 FACTURES_DB_PATH = DB_DIRPATH / "Facture_data.mdb"
 CONTROLES_DB_PATH = DB_DIRPATH / "cg67Parc_data.mdb"
@@ -32,6 +32,7 @@ COMMUN_DB_PATH = DB_DIRPATH / "Commun_Data.mdb"
 ANALYTIQUE_DB_PATH = DB_DIRPATH / "Db_analytique.mdb"
 BO_DB_PATH = DB_DIRPATH / "dbBO.mdb"
 AGRHUM_DB_PATH = DB_DIRPATH / "BDD_ParcRH.mdb"
+PDA_DB_PATH = DB_DIRPATH / "PDA" / "db_PDA.mdb"
 
 class ParcDb(AccessSDb):
     _path = ""
@@ -59,6 +60,9 @@ class BoDb(ParcDb):
 class AgrhumDb(ParcDb):
     _path = AGRHUM_DB_PATH
 
+class PdaDb(ParcDb):
+    _path = PDA_DB_PATH
+
 
 if __name__ == "__main__":
     for cls in (FacturesDb, ControlesDb, WincanDb, CommunDb, AnalytiqueDb, BoDb, AgrhumDb):

+ 65 - 0
pda2suiviactivite.py

@@ -0,0 +1,65 @@
+'''
+
+    Script d'export des données de configuration des applcations SuiviDesActivtes et SuiviActivitePC
+
+    Les données d'origine sont issues de la base \\h2o\LOCAL\4-transversal\BDD\mdb\PDA\db_PDA.mdb
+
+    Les fichiers résultats sont les fichiers *.xml du répertoire \\h2o\LOCAL\4-transversal\BDD\mdb\PDA\Fichiers_PDA\
+
+'''
+import logging
+
+from lxml import builder  # @UnresolvedImport
+from lxml import etree  # @UnresolvedImport
+from path import Path
+
+from core import logconf
+from core.pde import PdaDb
+
+
+logger = logging.getLogger("gf2factures")
+logconf.start("gf2factures", logging.INFO)
+
+logger.info("Initialization")
+
+# Connect to db_PDA.mdb
+pda_db = PdaDb(autocommit=True)
+
+target_dir = Path(r"\\h2o\LOCAL\4-transversal\BDD\mdb\PDA\Fichiers_PDA")
+
+# Mapping: (nom de la table, {correspondance champ : alias}, nom des noeuds, nom du fichier cible)
+mapping = [
+            ("pdaEngin", {"strEnginId": "Id", "strEnginLibelleLong": "Nom"}, "Attelage", "attelages.xml"),
+            ("pdaorigine", {"lngorigine": "Id", "strorigine": "Nom"}, "Depart", "depart.xml"),
+            ("pdaEquip", {"strEquipesId": "Id", "strEquipesLibelle": "Nom"}, "Equipe", "equipes.xml"),
+            ("pdalocalisation", {"lngTiersId": "Id", "strTiersMnemo": "Nom"}, "Localisation", "localisation.xml"),
+            ("pdaNatInterv", {"strCategorieInterventioinId": "Id", "strCategorieInterventioinLibelle": "Nom"}, "NatureRealisation", "naturesinterventions.xml"),
+            ("pdaHeures", {"annee": "annee", "mois": "mois", "heures": "heures"}, "pdaHeures", "heures.xml"),
+            ]
+
+for tablename, fieldmapping, eltname, filename in mapping:
+
+    maker = builder.ElementMaker(nsmap={'xsd': "http://www.w3.org/2001/XMLSchema",
+                                        'xsi': "http://www.w3.org/2001/XMLSchema-instance"})
+    nodes = []
+
+    sql = "SELECT {} FROM {}".format(
+                                    ",".join([("{} AS {}".format(name, alias) if name != alias else name) for name, alias in fieldmapping.items()]),
+                                    tablename
+                                    )
+
+    data = pda_db.read_all(sql)
+
+    for record in data:
+        node = maker.__call__(eltname, *[maker.__call__(field, str(value)) for field, value in record.items()])
+        nodes.append(node)
+
+    root = maker.__call__("ArrayOf" + eltname, *nodes)
+
+    with open(target_dir / filename, "wb") as f:
+        f.write(etree.tostring(root, xml_declaration=True, encoding='utf-8', pretty_print=True))
+    logger.info("> Exporte: {}".format(filename))
+
+logger.info("Export termine")
+
+