####################################################################################################################### ##### Import ##### ####################################################################################################################### from tkinter import* from datetime import datetime import cv2 import numpy as np from pyzbar.pyzbar import decode import requests ####################################################################################################################### ##### Server-Options ##### ####################################################################################################################### WebServiceURL = "172.24.12.56" WebServiceBenutzerName = "a" WebServiceBenutzerPasswort = "b" WinLineMandant = "MEDT" WebServiceTemplateSTART = "Zeitnahme" WebServiceTemplateSTOP = "STOP" WebServiceType = "36" WebServiceActioncode = "1" ####################################################################################################################### ##### WinLine-Options ##### ####################################################################################################################### Fehlzeitenstamm = "1" ####################################################################################################################### ###### Frame ###### ####################################################################################################################### def BuildMainFrame(): fenster = Tk() fenster.configure(bg="white") fenster.title("DD-Zeiterfassung") fenster.geometry("1024x768") start_button = Button(fenster, text="Arbeitstag beginnen", fg="white", bg="green", command=Startbutton_action) exit_button = Button (fenster, text="Arbeitstag beenden ", fg="white", bg="red", command=Stopbutton_action) pause_button = Button (fenster, text="Pause beginnen", fg="white", bg="#b47a0e", command=PauseStartbutton_action) pause_end_button = Button (fenster, text="Pause beenden", fg="white", bg="#b47a0e", command=PauseStopbutton_action) anweisungs_label = Label(fenster, justify=CENTER, text="Wählen Sie eine Buchungsart") anweisungs_label2 = Label(fenster, bg="white", justify=CENTER, fg="black") anweisungs_label.grid(row=0, column=2, pady=20, padx=10, sticky='ew') anweisungs_label2.grid(row=1, column=2, pady=20, padx=10, sticky='ew') start_button.grid(row=2, column=1, pady=20, padx=10, sticky='ew') exit_button.grid(row=2, column=2, pady=20, padx=10, sticky='ew') pause_button.grid(row=2, column=3, pady=20, padx=10, sticky='ew') pause_end_button.grid(row=2, column=4, pady=20, padx=10, sticky='ew') fenster.mainloop() ####################################################################################################################### ##### Build Start-XML ##### ####################################################################################################################### def BuildXMLStart(RequestTyp, myData, Datumvon): if RequestTyp == 1: ArbeitsZeitPause = "0" else: ArbeitsZeitPause = "1" myDataListe = myData.split("-") AN_Gruppe_Ressource = myDataListe[0] XML_Start = "" XML_Start = XML_Start + "" XML_Start = XML_Start + "" XML_Start = XML_Start + "<" + WebServiceTemplateSTART + ">" #Location for WinLine fields XML_Start = XML_Start + "" + Datumvon + "" XML_Start = XML_Start + "" + Fehlzeitenstamm + "" XML_Start = XML_Start + "" + AN_Gruppe_Ressource + "" XML_Start = XML_Start + "" + ArbeitsZeitPause + "" XML_Start = XML_Start + "" XML_Start = XML_Start + "" return XML_Start ####################################################################################################################### ##### Build Start-URL ##### ####################################################################################################################### def BuildURLStart(XML_Start): URL_Start = "http://%SERVER%/ewlservice/import?User=%USER%&Password=%PASSWORD%&Company=%COMPANY%&Type=%TYPE%&Vorlage=%VORLAGE%&Actioncode=%ACTIONCODE%&byref=0&Data=%DATA%" URL_Start = URL_Start.replace("%SERVER%", WebServiceURL) URL_Start = URL_Start.replace("%USER%", WebServiceBenutzerName) URL_Start = URL_Start.replace("%PASSWORD%", WebServiceBenutzerPasswort) URL_Start = URL_Start.replace("%COMPANY%", WinLineMandant) URL_Start = URL_Start.replace("%TYPE%", WebServiceType) URL_Start = URL_Start.replace("%VORLAGE%", WebServiceTemplateSTART) URL_Start = URL_Start.replace("%ACTIONCODE%", WebServiceActioncode) URL_Start = URL_Start.replace("%DATA%", XML_Start) return URL_Start ####################################################################################################################### ##### Build Export-URL ##### ####################################################################################################################### def BuildURLExport(myData,RequestTyp): myDataListe = myData.split("-") Arbeitnehmernummer = myDataListe[0] if RequestTyp == 4: WebServiceTemplateExport = "ExportPause" Filter = "FilterTestP-" + Arbeitnehmernummer else: WebServiceTemplateExport = "Export" Filter = "FilterTest-" + Arbeitnehmernummer XMLExport = Filter URL_Export = "http://%SERVER%/ewlservice/export?User=%USER%&Password=%PASSWORD%&Company=%COMPANY%&Type=%TYPE%&Vorlage=%VORLAGE%&Actioncode=%ACTIONCODE%&byref=0&Key=%KEY%" URL_Export = URL_Export.replace("%SERVER%", WebServiceURL) URL_Export = URL_Export.replace("%USER%", WebServiceBenutzerName) URL_Export = URL_Export.replace("%PASSWORD%", WebServiceBenutzerPasswort) URL_Export = URL_Export.replace("%COMPANY%", WinLineMandant) URL_Export = URL_Export.replace("%TYPE%", WebServiceType) URL_Export = URL_Export.replace("%VORLAGE%", WebServiceTemplateExport) URL_Export = URL_Export.replace("%ACTIONCODE%", WebServiceActioncode) URL_Export = URL_Export.replace("%KEY%", XMLExport) URL_Export = URL_Export.replace("%FILTER%", Filter) print("URL_Export = " + URL_Export) HTTPRequest_Export = requests.post(URL_Export) IndexVonDatum = HTTPRequest_Export.text.find("") v1 = IndexVonDatum + len("") v2 = v1 + 19 Datumvon = HTTPRequest_Export.text[v1:v2] return Datumvon ####################################################################################################################### ##### Build End-XML ##### ####################################################################################################################### def BuildXMLEnde(RequestTyp, myData, OrgDateTime, ActDateTime): if RequestTyp == 2: ArbeitsZeitPause = "0" else: ArbeitsZeitPause = "1" myDataListe = myData.split("-") AN_Gruppe_Ressource = myDataListe[0] XML_Ende = "" XML_Ende = XML_Ende + "" XML_Ende = XML_Ende + "" XML_Ende = XML_Ende + "<" + WebServiceTemplateSTOP + ">" XML_Ende = XML_Ende + "" + OrgDateTime + "" XML_Ende = XML_Ende + "" + ActDateTime + "" XML_Ende = XML_Ende + "" + Fehlzeitenstamm + "" XML_Ende = XML_Ende + "" + AN_Gruppe_Ressource + "" XML_Ende = XML_Ende + "" + ArbeitsZeitPause + "" XML_Ende = XML_Ende + "" + "1" + "" XML_Ende = XML_Ende + "" XML_Ende = XML_Ende + "" return XML_Ende ####################################################################################################################### ##### Build End-URL ##### ####################################################################################################################### def BuildURLEnde(XML_Ende): URL_Ende = "http://%SERVER%/ewlservice/import?User=%USER%&Password=%PASSWORD%&Company=%COMPANY%&Type=%TYPE%&Vorlage=%VORLAGE%&Actioncode=%ACTIONCODE%&byref=0&Data=%DATA%" URL_Ende = URL_Ende.replace("%SERVER%", WebServiceURL) URL_Ende = URL_Ende.replace("%USER%", WebServiceBenutzerName) URL_Ende = URL_Ende.replace("%PASSWORD%", WebServiceBenutzerPasswort) URL_Ende = URL_Ende.replace("%COMPANY%", WinLineMandant) URL_Ende = URL_Ende.replace("%TYPE%", WebServiceType) URL_Ende = URL_Ende.replace("%VORLAGE%", WebServiceTemplateSTOP) URL_Ende = URL_Ende.replace("%ACTIONCODE%", WebServiceActioncode) URL_Ende = URL_Ende.replace("%DATA%", XML_Ende) return URL_Ende ####################################################################################################################### ###### WinLine Requests ###### ####################################################################################################################### def MakeWinLineRequest(RequestTyp, myData, actDateTime): if RequestTyp == 1: XMLStart = BuildXMLStart(RequestTyp, myData, actDateTime) URLStart = BuildURLStart(XMLStart) HTTPRequest_Start = requests.post(URLStart) print(HTTPRequest_Start.text) elif RequestTyp == 2: OrgDateTime = BuildURLExport(myData, RequestTyp) XMLEnde = BuildXMLEnde(RequestTyp, myData, OrgDateTime, actDateTime) URLEnde = BuildURLEnde(XMLEnde) HTTPRequest_Ende = requests.post(URLEnde) print(HTTPRequest_Ende.text) elif RequestTyp == 3: XMLStart = BuildXMLStart(RequestTyp, myData, actDateTime) URLStart = BuildURLStart(XMLStart) HTTPRequest_Start = requests.post(URLStart) print(HTTPRequest_Start.text) elif RequestTyp == 4: OrgDateTime = BuildURLExport(myData, RequestTyp) XMLEnde = BuildXMLEnde(RequestTyp, myData, OrgDateTime, actDateTime) URLEnde = BuildURLEnde(XMLEnde) HTTPRequest_Ende = requests.post(URLEnde) print(HTTPRequest_Ende.text) ####################################################################################################################### ##### Scanner ###### ####################################################################################################################### def Scanner(): cap = cv2.VideoCapture(0) cap.set(3, 640) cap.set(4, 480) x = True myData = None while x == True: success, img = cap.read() for barcode in decode(img): myData = barcode.data.decode('utf-8') cv2.imshow('Result', img) cv2.waitKey(1) if myData is not None: x = False return myData ####################################################################################################################### ###### Button-Action ###### # Legende # # RequestTyp = 1 = Arbeitstag beginnen # # RequestTyp = 2 = Arbeitstag beenden # # RequestTyp = 3 = Pause beginnen # # RequestTyp = 4 = Pause beenden # ####################################################################################################################### def Button_action(self, RequestTyp): myData = Scanner() myDataListe = myData.split("-") name = myDataListe[1] now = datetime.now() actDateTime = now.strftime('%Y-%m-%d') + "T" + now.strftime('%H:%M:%S') TimeWithoutsec = now.strftime('%H:%M:%S') MakeWinLineRequest(RequestTyp, myData, actDateTime) if RequestTyp == 1: anweisungs_label = Label(text="Hallo, " + str(name)) anweisungs_label.grid(row=0, column=2, sticky='ew') anweisungs_label2 = Label(text="Es ist " + str(TimeWithoutsec) + " Uhr ") anweisungs_label2.grid(row=1, column=2, sticky='ew') self.after(3000, LabelReset) elif RequestTyp == 2: anweisungs_label = Label(text="Auf Wiedersehen, " + str(name)) anweisungs_label.grid(row=0, column=2, sticky='ew') anweisungs_label2 = Label(text="Es ist " + str(TimeWithoutsec) + " Uhr ") anweisungs_label2.grid(row=1, column=2, sticky='ew') elif RequestTyp == 3: anweisungs_label = Label(text="Eine schöne Pause, " + str(name)) anweisungs_label.grid(row=0, column=2, sticky='ew') anweisungs_label2 = Label(text="Es ist " + str(TimeWithoutsec) + " Uhr ") anweisungs_label2.grid(row=1, column=2, sticky='ew') elif RequestTyp == 4: anweisungs_label = Label(text="Willkommen zurück, " + str(name)) anweisungs_label.grid(row=0, column=2, sticky='ew') anweisungs_label2 = Label(text="Es ist " + str(TimeWithoutsec) + " Uhr ") anweisungs_label2.grid(row=1, column=2, sticky='ew') def LabelReset(): anweisungs_label = Label(text="Hallo2!!") anweisungs_label.grid(row=0, column=2, sticky='ew') ####################################################################################################################### ###### Diffrent-Buttons ###### ####################################################################################################################### def Startbutton_action(): RequestTyp = 1 Button_action(RequestTyp) ####################################################################################################################### def Stopbutton_action(): RequestTyp = 2 Button_action(RequestTyp) ####################################################################################################################### def PauseStartbutton_action(): RequestTyp = 3 Button_action(RequestTyp) ####################################################################################################################### def PauseStopbutton_action(): RequestTyp = 4 Button_action(RequestTyp) ####################################################################################################################### ##### Main ##### ####################################################################################################################### BuildMainFrame()