|
@@ -0,0 +1,101 @@
|
|
|
+import pandas as pd
|
|
|
+import pyodbc
|
|
|
+import json
|
|
|
+from os import path
|
|
|
+from datetime import date
|
|
|
+from dateutil.relativedelta import relativedelta
|
|
|
+from sqlalchemy import create_engine, inspect
|
|
|
+from suds.client import Client
|
|
|
+from cryptography.fernet import Fernet
|
|
|
+
|
|
|
+# Konfiguration
|
|
|
+fernet_key = b'YBckeKYt-8g7LFvpG7XqAAcEbsYESnI-yl8by9rjeQQ='
|
|
|
+fernet = Fernet(fernet_key)
|
|
|
+
|
|
|
+if path.exists("nasa_config.json"):
|
|
|
+ with open("nasa_config.json", "r") as f:
|
|
|
+ config = json.load(f)
|
|
|
+ with open("nasa_config.crypt", "wb") as f:
|
|
|
+ f.write(fernet.encrypt(json.dumps(config).encode()))
|
|
|
+else:
|
|
|
+ with open("nasa_config.crypt", "rb") as f:
|
|
|
+ config = json.loads(fernet.decrypt(f.read()).decode())
|
|
|
+
|
|
|
+args = [ "2020", "05" ]
|
|
|
+# args = []
|
|
|
+if len(args) >= 2:
|
|
|
+ config['selected_year'] = args[0]
|
|
|
+ config['selected_month'] = args[1]
|
|
|
+else:
|
|
|
+ curr_date = date.today() - relativedelta(months=+1)
|
|
|
+ config['selected_year'] = curr_date.strftime("%Y")
|
|
|
+ config['selected_month'] = curr_date.strftime("%m")
|
|
|
+
|
|
|
+
|
|
|
+select_befehl_auftraege = "SELECT * FROM [Auftraege_NASA_gruppiert] WHERE Periode = '" + config['selected_year'] + config['selected_month'] + "'"
|
|
|
+select_befehl_mitarbeiter = "SELECT * FROM [Mitarbeiter_NASA] WHERE Periode = '" + config['selected_year'] + "-" + config['selected_month'] + "'"
|
|
|
+source_auftraege = "nasa/Auftraege_NASA_gruppiert.csv"
|
|
|
+source_mitarbeiter = "nasa/Mitarbeiter_NASA.csv"
|
|
|
+
|
|
|
+
|
|
|
+header = {
|
|
|
+ 'HaendlerNr': config['client_id'],
|
|
|
+ 'Filiale': "1",
|
|
|
+ 'Jahr': config['selected_year'],
|
|
|
+ 'Monat': config['selected_month'],
|
|
|
+ 'Fabrikat': "Mazda",
|
|
|
+ 'AnzahlMitarbeiter': "0",
|
|
|
+ 'AnzahlProduktiv': "0.0",
|
|
|
+ 'WerkstattDurchlaeufe': "0",
|
|
|
+ 'Token': config['credentials']['token']
|
|
|
+}
|
|
|
+
|
|
|
+def conn_string (dsn):
|
|
|
+ return f"mssql+pyodbc://{dsn['user']}:{dsn['pass']}@{dsn['server']}/{dsn['database']}?driver=SQL+Server+Native+Client+11.0"
|
|
|
+
|
|
|
+
|
|
|
+# Datenbankverbindung
|
|
|
+source_db = create_engine(conn_string(config['source_dsn']))
|
|
|
+
|
|
|
+# Abfrage in Array speichern
|
|
|
+df = pd.read_sql(select_befehl_auftraege, con = source_db)
|
|
|
+# df = pd.read_csv(source_auftraege, sep=";", encoding="ansi", decimal=",")
|
|
|
+df.to_csv("nasa/export/" + config['selected_year'] + "-" + config['selected_month'] + "_auftraege.csv", sep=";", encoding="ansi", decimal=",", index = False)
|
|
|
+
|
|
|
+# Array in gewünschtes Format bringen
|
|
|
+auftragsart = ["Inspektion", "Karosseriearbeit", "Lackierung", "Verschleißteile", "Sonstiges"]
|
|
|
+columns = ["AuftragsArt", "AuftragsArtId", "TeileUmsatz", "LohnUmsatz", "SonstigeUmsatz", "GesamtUmsatz", "AnzahlAuftraege"]
|
|
|
+
|
|
|
+df = df[columns]
|
|
|
+header['WerkstattDurchlaeufe'] = df['AnzahlAuftraege'].sum()
|
|
|
+header['AfterSalesPositionen'] = df.to_dict("records")
|
|
|
+
|
|
|
+# Mitarbeiter gesamt und produktiv
|
|
|
+df = pd.read_sql(select_befehl_mitarbeiter, con = source_db)
|
|
|
+# df = pd.read_csv(source_mitarbeiter, sep=";", encoding="ansi", decimal=",")
|
|
|
+
|
|
|
+df.to_csv("nasa/export/" + config['selected_year'] + "-" + config['selected_month'] + "_mitarbeiter.csv", sep=";", encoding="ansi", decimal=",", index = False)
|
|
|
+
|
|
|
+header['AnzahlMitarbeiter'] = df.shape[0]
|
|
|
+header['AnzahlProduktiv'] = df['Prod'].sum()
|
|
|
+
|
|
|
+# SOAP-Verbindung
|
|
|
+client = Client(config['service_url'], username=config['credentials']['username'], password=config['credentials']['password'])
|
|
|
+
|
|
|
+try:
|
|
|
+ result = client.service.MeldeAfterSalesDaten(header)
|
|
|
+except Exception as e:
|
|
|
+ print(e)
|
|
|
+ result = -1
|
|
|
+
|
|
|
+# Erfolg/Fehler protokollieren
|
|
|
+
|
|
|
+print("Periode: " + config['selected_year'] + "-" + config['selected_month'])
|
|
|
+if len(header['AfterSalesPositionen']) == result:
|
|
|
+ print("Erfolgreich " + str(result) + " Datensätze übertragen")
|
|
|
+else:
|
|
|
+ print("Übertragung der Datensätze Fehlgeschlagen.")
|
|
|
+ if result == -1:
|
|
|
+ print("Fehler! Es waren keine Datensätze vorhanden.")
|
|
|
+ else:
|
|
|
+ print(str(len(header['AfterSalesPositionen']) - result) + " Datensätze nicht verarbeitet")
|