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(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')