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