Robert Bedner 4 жил өмнө
parent
commit
bfcd229cb9

+ 4 - 0
dist/nasa-upload.bat

@@ -0,0 +1,4 @@
+@echo off
+cd /d %~dp0
+nasa-upload.exe
+pause

BIN
dist/nasa-upload.exe


+ 5 - 0
dist/nasa/Auftraege_NASA_gruppiert.csv

@@ -0,0 +1,5 @@
+"Periode";"AuftragsArtSumme";"AuftragsArt";"AuftragsArtId";"AuftragsTypId";"TeileUmsatz";"LohnUmsatz";"SonstigeUmsatz";"GesamtUmsatz";"AnzahlAuftraege"
+"202005";"Extern";"Inspektion";"1";"1";30227,35;25274,41;0,00;55501,76;273
+"202005";"Garantie";"Inspektion";"2";"1";5828,40;3590,32;0,00;9418,72;66
+"202005";"Intern";"Inspektion";"3";"1";898,30;1767,00;0,00;2665,30;29
+"202005";"Theke";"Sonstiges";"4";"5";9034,08;0,00;0,00;9034,08;53

+ 26 - 0
dist/nasa/Mitarbeiter_NASA.csv

@@ -0,0 +1,26 @@
+"Periode";"Produktiv";"Mitarbeiter";"Name";"Prod";"Jahr";"Monat";"Periode_Filter"
+"2020-05";"nicht produktiv";"ANLI";"Angelo Liso";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"CHHA";"Christina Hautzer";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"CIBR";"Cindy Brosowski";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"DKSC";"Dominik Schäfer";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"JOMU";"Joana Mueller";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"JUFE";"Jürgen Feldberg";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"MAGD";"Martina Gödel";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"MIME";"Michael Menge";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"PAJA";"Pascal Jansen";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"ROGI";"Roland Giesen";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"SAHE";"Sandra Hennekes";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"SEKL";"Sebastian Klingen";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"SEWE";"Sebastian Weichert";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"SYBO";"Bonk, Sylwia";0;"2020";"05";"2020-05"
+"2020-05";"produktiv";"ANBO";"Andreas Borchert";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"CHTH";"Christian Thelen";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"DALE";"Dave Lenzen";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"JEFI";"Jerome Fischelmanns";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"NIRA";"Niklas Rahmen";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"ROBI";"Robert Bialy";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"RS2R";"Robert Schenk";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"SAGR";"Sascha Greff";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"STKU";"Kürten, Stefan";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"TOMU";"Tom Mummert";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"VAGO";"Gorr, Vadim";1;"2020";"05";"2020-05"

+ 5 - 0
dist/nasa/export/2020-05_auftraege.csv

@@ -0,0 +1,5 @@
+Periode;AuftragsArtSumme;AuftragsArt;AuftragsArtId;AuftragsTypId;TeileUmsatz;LohnUmsatz;SonstigeUmsatz;GesamtUmsatz;AnzahlAuftraege
+202005;Extern;Inspektion;1;1;30227,35;25274,41;0,0;55501,76;273
+202005;Garantie;Inspektion;2;1;5828,4;3590,32;0,0;9418,72;66
+202005;Intern;Inspektion;3;1;898,3;1767,0;0,0;2665,3;29
+202005;Theke;Sonstiges;4;5;9034,08;0,0;0,0;9034,08;53

+ 26 - 0
dist/nasa/export/2020-05_mitarbeiter.csv

@@ -0,0 +1,26 @@
+Periode;Produktiv;Mitarbeiter;Name;Prod;Jahr;Monat;Periode_Filter
+2020-05;nicht produktiv;ANLI;Angelo Liso;0;2020;05;2020-05
+2020-05;nicht produktiv;CHHA;Christina Hautzer;0;2020;05;2020-05
+2020-05;nicht produktiv;CIBR;Cindy Brosowski;0;2020;05;2020-05
+2020-05;nicht produktiv;DKSC;Dominik Schäfer;0;2020;05;2020-05
+2020-05;nicht produktiv;JOMU;Joana Mueller;0;2020;05;2020-05
+2020-05;nicht produktiv;JUFE;Jürgen Feldberg;0;2020;05;2020-05
+2020-05;nicht produktiv;MAGD;Martina Gödel;0;2020;05;2020-05
+2020-05;nicht produktiv;MIME;Michael Menge;0;2020;05;2020-05
+2020-05;nicht produktiv;PAJA;Pascal Jansen;0;2020;05;2020-05
+2020-05;nicht produktiv;ROGI;Roland Giesen;0;2020;05;2020-05
+2020-05;nicht produktiv;SAHE;Sandra Hennekes;0;2020;05;2020-05
+2020-05;nicht produktiv;SEKL;Sebastian Klingen;0;2020;05;2020-05
+2020-05;nicht produktiv;SEWE;Sebastian Weichert;0;2020;05;2020-05
+2020-05;nicht produktiv;SYBO;Bonk, Sylwia;0;2020;05;2020-05
+2020-05;produktiv;ANBO;Andreas Borchert;1;2020;05;2020-05
+2020-05;produktiv;CHTH;Christian Thelen;1;2020;05;2020-05
+2020-05;produktiv;DALE;Dave Lenzen;1;2020;05;2020-05
+2020-05;produktiv;JEFI;Jerome Fischelmanns;1;2020;05;2020-05
+2020-05;produktiv;NIRA;Niklas Rahmen;1;2020;05;2020-05
+2020-05;produktiv;ROBI;Robert Bialy;1;2020;05;2020-05
+2020-05;produktiv;RS2R;Robert Schenk;1;2020;05;2020-05
+2020-05;produktiv;SAGR;Sascha Greff;1;2020;05;2020-05
+2020-05;produktiv;STKU;Kürten, Stefan;1;2020;05;2020-05
+2020-05;produktiv;TOMU;Tom Mummert;1;2020;05;2020-05
+2020-05;produktiv;VAGO;Gorr, Vadim;1;2020;05;2020-05

+ 18 - 0
dist/nasa_config.json

@@ -0,0 +1,18 @@
+{
+    "service_url": "https://nasa.macs-online.com/services/MacsAfterSalesAnalyseTest.wsdl",
+    "credentials": {
+        "token": "MDDq3CUd9ix0iSqR",
+        "username": "global-cube", 
+        "password": "ATPoIL*O6*%1BE%-"
+    },
+    "client_id": "11197",
+    "selected_year": "2020",
+    "selected_month": "05",
+    "source_dsn": { 
+        "server": "GC-SERVER1\\GLOBALCUBE", 
+        "user": "sa", 
+        "pass": "Mffu3011#", 
+        "database": "GAPS", 
+        "schema": "dbo" 
+    }
+}

+ 101 - 0
nasa-upload.py

@@ -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")

+ 33 - 0
nasa-upload.spec

@@ -0,0 +1,33 @@
+# -*- mode: python ; coding: utf-8 -*-
+
+block_cipher = None
+
+
+a = Analysis(['nasa-upload.py'],
+             pathex=['D:\\Projekte\\Python'],
+             binaries=[],
+             datas=[],
+             hiddenimports=[],
+             hookspath=[],
+             runtime_hooks=[],
+             excludes=[],
+             win_no_prefer_redirects=False,
+             win_private_assemblies=False,
+             cipher=block_cipher,
+             noarchive=False)
+pyz = PYZ(a.pure, a.zipped_data,
+             cipher=block_cipher)
+exe = EXE(pyz,
+          a.scripts,
+          a.binaries,
+          a.zipfiles,
+          a.datas,
+          [],
+          name='nasa-upload',
+          debug=False,
+          bootloader_ignore_signals=False,
+          strip=False,
+          upx=True,
+          upx_exclude=[],
+          runtime_tmpdir=None,
+          console=True )

+ 5 - 0
nasa/Auftraege_NASA_gruppiert.csv

@@ -0,0 +1,5 @@
+"Periode";"AuftragsArtSumme";"AuftragsArt";"AuftragsArtId";"AuftragsTypId";"TeileUmsatz";"LohnUmsatz";"SonstigeUmsatz";"GesamtUmsatz";"AnzahlAuftraege"
+"202005";"Extern";"Inspektion";"1";"1";30227,35;25274,41;0,00;55501,76;273
+"202005";"Garantie";"Inspektion";"2";"1";5828,40;3590,32;0,00;9418,72;66
+"202005";"Intern";"Inspektion";"3";"1";898,30;1767,00;0,00;2665,30;29
+"202005";"Theke";"Sonstiges";"4";"5";9034,08;0,00;0,00;9034,08;53

+ 26 - 0
nasa/Mitarbeiter_NASA.csv

@@ -0,0 +1,26 @@
+"Periode";"Produktiv";"Mitarbeiter";"Name";"Prod";"Jahr";"Monat";"Periode_Filter"
+"2020-05";"nicht produktiv";"ANLI";"Angelo Liso";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"CHHA";"Christina Hautzer";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"CIBR";"Cindy Brosowski";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"DKSC";"Dominik Schäfer";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"JOMU";"Joana Mueller";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"JUFE";"Jürgen Feldberg";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"MAGD";"Martina Gödel";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"MIME";"Michael Menge";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"PAJA";"Pascal Jansen";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"ROGI";"Roland Giesen";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"SAHE";"Sandra Hennekes";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"SEKL";"Sebastian Klingen";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"SEWE";"Sebastian Weichert";0;"2020";"05";"2020-05"
+"2020-05";"nicht produktiv";"SYBO";"Bonk, Sylwia";0;"2020";"05";"2020-05"
+"2020-05";"produktiv";"ANBO";"Andreas Borchert";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"CHTH";"Christian Thelen";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"DALE";"Dave Lenzen";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"JEFI";"Jerome Fischelmanns";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"NIRA";"Niklas Rahmen";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"ROBI";"Robert Bialy";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"RS2R";"Robert Schenk";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"SAGR";"Sascha Greff";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"STKU";"Kürten, Stefan";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"TOMU";"Tom Mummert";1;"2020";"05";"2020-05"
+"2020-05";"produktiv";"VAGO";"Gorr, Vadim";1;"2020";"05";"2020-05"

+ 5 - 0
nasa/export/2020-05_auftraege.csv

@@ -0,0 +1,5 @@
+Periode;AuftragsArtSumme;AuftragsArt;AuftragsArtId;AuftragsTypId;TeileUmsatz;LohnUmsatz;SonstigeUmsatz;GesamtUmsatz;AnzahlAuftraege
+202005;Extern;Inspektion;1;1;30227,35;25274,41;0,0;55501,76;273
+202005;Garantie;Inspektion;2;1;5828,4;3590,32;0,0;9418,72;66
+202005;Intern;Inspektion;3;1;898,3;1767,0;0,0;2665,3;29
+202005;Theke;Sonstiges;4;5;9034,08;0,0;0,0;9034,08;53

+ 26 - 0
nasa/export/2020-05_mitarbeiter.csv

@@ -0,0 +1,26 @@
+Periode;Produktiv;Mitarbeiter;Name;Prod;Jahr;Monat;Periode_Filter
+2020-05;nicht produktiv;ANLI;Angelo Liso;0;2020;05;2020-05
+2020-05;nicht produktiv;CHHA;Christina Hautzer;0;2020;05;2020-05
+2020-05;nicht produktiv;CIBR;Cindy Brosowski;0;2020;05;2020-05
+2020-05;nicht produktiv;DKSC;Dominik Schäfer;0;2020;05;2020-05
+2020-05;nicht produktiv;JOMU;Joana Mueller;0;2020;05;2020-05
+2020-05;nicht produktiv;JUFE;Jürgen Feldberg;0;2020;05;2020-05
+2020-05;nicht produktiv;MAGD;Martina Gödel;0;2020;05;2020-05
+2020-05;nicht produktiv;MIME;Michael Menge;0;2020;05;2020-05
+2020-05;nicht produktiv;PAJA;Pascal Jansen;0;2020;05;2020-05
+2020-05;nicht produktiv;ROGI;Roland Giesen;0;2020;05;2020-05
+2020-05;nicht produktiv;SAHE;Sandra Hennekes;0;2020;05;2020-05
+2020-05;nicht produktiv;SEKL;Sebastian Klingen;0;2020;05;2020-05
+2020-05;nicht produktiv;SEWE;Sebastian Weichert;0;2020;05;2020-05
+2020-05;nicht produktiv;SYBO;Bonk, Sylwia;0;2020;05;2020-05
+2020-05;produktiv;ANBO;Andreas Borchert;1;2020;05;2020-05
+2020-05;produktiv;CHTH;Christian Thelen;1;2020;05;2020-05
+2020-05;produktiv;DALE;Dave Lenzen;1;2020;05;2020-05
+2020-05;produktiv;JEFI;Jerome Fischelmanns;1;2020;05;2020-05
+2020-05;produktiv;NIRA;Niklas Rahmen;1;2020;05;2020-05
+2020-05;produktiv;ROBI;Robert Bialy;1;2020;05;2020-05
+2020-05;produktiv;RS2R;Robert Schenk;1;2020;05;2020-05
+2020-05;produktiv;SAGR;Sascha Greff;1;2020;05;2020-05
+2020-05;produktiv;STKU;Kürten, Stefan;1;2020;05;2020-05
+2020-05;produktiv;TOMU;Tom Mummert;1;2020;05;2020-05
+2020-05;produktiv;VAGO;Gorr, Vadim;1;2020;05;2020-05

+ 1 - 0
nasa_config.crypt

@@ -0,0 +1 @@
+gAAAAABfNACvqaaql4hPMHggE6DdlK8qJ_FA7-iktrGGeq0OGccuCULZ_nfHUIrGwtYYhv1n2btF1xHkWBi0Mr24HW3rVyXHUZYWOfxLyIt54d6WBPeMJknnNC7Aq3EQTUx9hKGyasTCeMgwHuFZqkVDYo3iPv5Zwfrm71stibCJ4YBR4X-f-mKkv-4XiFbHorFd14pnzs4ll5APF3XQnsohqZd8ZCFRMxHFOsJ3sC7cSgiZ_VM1fE7vXtR2dlgPkXZZjoiT1t8z5-VEHpf9lRc229vgtTCbJdidi8weubExYkt_e5dBX8tebPHU-MKXdQxNYNWtnMQb2GJLGUIDRdXhbGb5RfPKWhF1dMQy9n0Gs1g-OM836U903o78E9ELUh9Ibhj9UqFdHj909PEW4yXz2nzXN0BcJXIvkJoPNFj8aCs8wqynNhMFKXvf15oEmlMcuzrBMlQmfgtokHelsf_2TvhbznWNTTwpscsEGGd7vw2OgFkGcu5XrM0HRoJ9gI1S9SIcyfBSHUHkXqrm1Axg3B9YJq0Lhsi3Rhltw5Fo5b0lLZUzyJmhasbK0yws1xGdKZd2fKG5Ef4KrGFPSR_DhmCxQQcx5A==

+ 18 - 0
nasa_config_.json

@@ -0,0 +1,18 @@
+{
+    "service_url": "https://nasa.macs-online.com/services/MacsAfterSalesAnalyseTest.wsdl",
+    "credentials": {
+        "token": "MDDq3CUd9ix0iSqR",
+        "username": "global-cube", 
+        "password": "ATPoIL*O6*%1BE%-"
+    },
+    "client_id": "11197",
+    "selected_year": "2020",
+    "selected_month": "05",
+    "source_dsn": { 
+        "server": "GC-SERVER1\\GLOBALCUBE", 
+        "user": "sa", 
+        "pass": "Mffu3011#", 
+        "database": "GAPS", 
+        "schema": "dbo" 
+    }
+}