123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 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
- 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="latin-1", decimal=",")
- df.to_csv(
- "mazda/export/" + config["selected_year"] + "-" + config["selected_month"] + "_auftraege.csv",
- sep=";",
- encoding="latin-1",
- 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="latin-1", decimal=",")
- df.to_csv(
- "mazda/export/" + config["selected_year"] + "-" + config["selected_month"] + "_mitarbeiter.csv",
- sep=";",
- encoding="latin-1",
- decimal=",",
- index=False,
- )
- header["AnzahlMitarbeiter"] = df.shape[0]
- header["AnzahlProduktiv"] = df["Prod"].sum()
- # SOAP-Verbindung
- client = Client(
- url=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")
|