|
@@ -0,0 +1,70 @@
|
|
|
+import json
|
|
|
+from datetime import datetime
|
|
|
+from pathlib import Path
|
|
|
+
|
|
|
+import pyodbc
|
|
|
+
|
|
|
+pyodbc.lowercase = False
|
|
|
+
|
|
|
+
|
|
|
+def run_query(cur: pyodbc.Cursor, query: str) -> list[dict[str, str]]:
|
|
|
+ cur.execute(query)
|
|
|
+
|
|
|
+ col_names = [x[0] for x in cur.description]
|
|
|
+ res = []
|
|
|
+ while True:
|
|
|
+ row = cur.fetchone()
|
|
|
+ if row is None:
|
|
|
+ return res
|
|
|
+ r = {}
|
|
|
+ for i, col in enumerate(row):
|
|
|
+ r[col_names[i]] = str(col).strip()
|
|
|
+ res.append(r)
|
|
|
+
|
|
|
+
|
|
|
+def print_mdb_details(mdb_file: str):
|
|
|
+ print("--")
|
|
|
+ print("[" + mdb_file + "]")
|
|
|
+ ts = datetime.fromtimestamp(Path(mdb_file).stat().st_mtime)
|
|
|
+ res = {"Datum_MDB_Datei": ts.strftime("%Y-%m-%d %H:%M:%S")}
|
|
|
+
|
|
|
+ try:
|
|
|
+ conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + mdb_file + ";")
|
|
|
+ cur = conn.cursor()
|
|
|
+ except pyodbc.Error:
|
|
|
+ print("Error connecting to file")
|
|
|
+ return
|
|
|
+
|
|
|
+ date_range = "SELECT min(dtDatum) as Datum_min, max(dtDatum) as Datum_max, min(dtWJ) as Wirtschaftsjahr FROM tblKNW"
|
|
|
+ res1 = run_query(cur, date_range)
|
|
|
+ res.update(res1[0])
|
|
|
+
|
|
|
+ main_site = (
|
|
|
+ "SELECT FIRMAI as Firma_Nr, FIRMAS as Firma_Name, BERATER as Berater_Nr, "
|
|
|
+ "MANDANT as Mandant_Nr, dtWJAnzeige as WJ_Anzeige FROM ORDDAT"
|
|
|
+ )
|
|
|
+ res2 = run_query(cur, main_site)
|
|
|
+ res.update(res2[0])
|
|
|
+
|
|
|
+ sites = "SELECT KSTESA_NUMMER as Standort_Nr, KSTESA_BEZEICHNUNG as Standort_Name FROM tblKS_KSTESA WHERE KSTESA_OWN_ID = 2"
|
|
|
+ res3 = run_query(cur, sites)
|
|
|
+ res["Standorte"] = res3
|
|
|
+
|
|
|
+ print(json.dumps(res, indent=2))
|
|
|
+ client_db = res.get("Mandant_Nr", "1")
|
|
|
+ year_id = res.get("Wirtschaftsjahr", "00000101")
|
|
|
+ new_filename = str(Path(mdb_file).parent) + f"\\KostSt_{client_db}_{year_id}.mdb"
|
|
|
+
|
|
|
+ with open(new_filename + ".json", "w") as fwh:
|
|
|
+ json.dump(res, fwh, indent=2)
|
|
|
+ cur.close()
|
|
|
+ conn.close()
|
|
|
+
|
|
|
+
|
|
|
+def print_all_mdb_files(folder: str):
|
|
|
+ for mdb_file in Path(folder).resolve().rglob("KostSt.mdb"):
|
|
|
+ print_mdb_details(str(mdb_file))
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ print_all_mdb_files("C:\\Users\\GAPS")
|