From 1ab664ef8706f014f8a2bbdea9c0e1df938b3ada Mon Sep 17 00:00:00 2001 From: Alexander Malzkuhn Date: Fri, 11 Apr 2025 14:01:35 +0200 Subject: [PATCH] Start kompletter Rewrite begonnen mit UI Pin Pad erstellt --- .idea/.gitignore | 3 + .idea/Zeiterfassung.iml | 8 ++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 ++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 + __pycache__/definitions.cpython-311.pyc | Bin 0 -> 227 bytes definitions.py | 5 + main.py | 0 ui.py | 75 ++++++++++++ zeiterfassung.py | 113 ------------------ 11 files changed, 118 insertions(+), 113 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/Zeiterfassung.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 __pycache__/definitions.cpython-311.pyc create mode 100644 definitions.py create mode 100644 main.py create mode 100644 ui.py delete mode 100644 zeiterfassung.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/Zeiterfassung.iml b/.idea/Zeiterfassung.iml new file mode 100644 index 0000000..909438d --- /dev/null +++ b/.idea/Zeiterfassung.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..a6218fe --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7c204cb --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/__pycache__/definitions.cpython-311.pyc b/__pycache__/definitions.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ba3c6043969e1fc69c52d9044cb71ef1c9cc150 GIT binary patch literal 227 zcmZ3^%ge<81V`WfNDl(ik3k$5V1zP0^8p#t8B!Rc7*ZIc7*m*n88n%1@kXU)mZTP? zB^DQ#=A~D$8t4I`pC;2S&cuR(_>#<$oYY&~AZA%=QE_H|-b#kgAoG6N>SyHVrs^l= zq*f&6rKA?=yX0q==BDPAr0NG$mSp7T>7y8|pOTuEnU`4tG@)3ppz;@oO>TZlX-=wL l5eLvTkQ0kVfy4)9Mn=XD91OfN4V*XlL>st4u!s#P0|0tRK*9h3 literal 0 HcmV?d00001 diff --git a/definitions.py b/definitions.py new file mode 100644 index 0000000..7ceebf2 --- /dev/null +++ b/definitions.py @@ -0,0 +1,5 @@ +# Zeiterfassung +# Quasi-Konsten + +app_title = "Zeiterfassung" +app_version = "0.0.0" \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..e69de29 diff --git a/ui.py b/ui.py new file mode 100644 index 0000000..971d2cb --- /dev/null +++ b/ui.py @@ -0,0 +1,75 @@ +# Zeiterfassung +# UI Definitionen + +import tkinter as tk +import locale +locale.setlocale(locale.LC_ALL, '') + +from time import strftime +from definitions import app_title, app_version + +# Pinpad +def win_pinpad(): + + def update_time(): + string_time = strftime('%A, der %d.%m.%Y - %H:%M:%S') + nonlocal digital_clock + digital_clock.config(text=string_time) + digital_clock.after(1000, update_time) + + root = tk.Tk() + root.title(app_title + " " + app_version) + # Digital clock label configuration + digital_clock = tk.Label(root) + digital_clock.grid(row=0, column=0, columnspan=3, padx=10, pady=10) + # Initial call to update_time function + update_time() + + # Benutzernummer + tk.Label(root, text="Benutzernummer:").grid(row=1, column=0) + usernr = tk.Entry(root, width=10) + usernr.grid(row=1,column=1) + + # Pinpad + + def buttonPress(key): + + nonlocal usernr + if type(key) is int: + if key < 10: + usernr.insert('end', str(key)) + if key =="OK": + print("OK pressed") + if key == "<-": + usernr.delete(usernr.index("end") - 1 ) + if len(usernr.get()) > 0: + buttons["OK"].configure(state="active") + else: + buttons["OK"].configure(state="disabled") + + # Buttons definieren + button_width = 5 + button_height = 2 + pinframe = tk.Frame(root) + pinframe.grid(row=2, column=0, columnspan=3, padx=10, pady=10) + buttons = { } + + keys = [ + [ 1, 2, 3], + [ 4, 5, 6], + [ 7, 8, 9], + [ "<-", 0, "OK"] + ] + + for y, row in enumerate(keys, 1): + for x, key in enumerate(row): + button = tk.Button(pinframe, width=button_width, height=button_height, text=key, command=lambda key=key: buttonPress(key)) + button.grid(row=y, column=x) + buttons[key] = button + + buttons["OK"].configure(state="disabled") + + # Tkinter main loop + + root.mainloop() + diff --git a/zeiterfassung.py b/zeiterfassung.py deleted file mode 100644 index 52a504d..0000000 --- a/zeiterfassung.py +++ /dev/null @@ -1,113 +0,0 @@ -# -# -# Zeiterfassung - -# Bibliotheksimports -import time -import datetime -import os - -# Statische Definitionen -# Pfade: -userfolder = "users" -settingsfolder = "settings" -program_name = "Zeiterfassung" -program_version = "0.0.0" - -# Funktionen - -# Zeitstempel schreiben -def append_timestamp(filename): - # Hole den aktuellen Timestamp in Epoch-Zeit - timestamp = int(time.time()) - - try: - # Öffne die Datei im Anhang-Modus ('a') - with open(filename, 'a') as file: - # Schreibe den Timestamp in die Datei und füge einen Zeilenumbruch hinzu - file.write(f"{timestamp}\n") - except FileNotFoundError: - # Fehlende Verzeichnisse anlegen - folder_path = os.path.dirname(filename) - os.makedirs(folder_path, exist_ok=True) - append_timestamp(filename) - -# Anzahl der Zeilen zählen -def len_timestamps(filename): - try: - # Öffne die Datei im Lese-Modus ('r') - with open(filename, 'r') as file: - # Zähle die Zeilen - lines = file.readlines() - return len(lines) - except FileNotFoundError: - print(f"Die Datei {filename} wurde nicht gefunden.") - return 0 - -# Stempelzustand auslesen -def stempel_zustand(filename): - lines = len_timestamps(filename) - if lines == 0: - print(f"Keine Einträge") - elif lines % 2 == 0: - return("in") - else: - return("out") - -# Stempelübersicht zusammenstellen -def overview(filename): - - # Öffne die Datei im Lese-Modus ('r') - with open(filename, 'r') as file: - lines = file.readlines() - - in_times = [] - out_times = [] - - for i in range(0, len(lines)-1): - if (i + 1) % 2 == 0: - out_times.append(lines[i]) - else: - in_times.append(lines[i]) - for i in range(0, len(in_times) - 1): - print(str(in_times[i]) + " - " + str(out_times[i])) - -# Pfade bestimmen -def scriptpath(): - return os.path.dirname(os.path.abspath(__file__)) - -def determine_filename(user): - year = str(datetime.datetime.now().year) - month = str(datetime.datetime.now().month) - completepath = scriptpath() + "/" + userfolder +"/" + user + "/" + year + "-" + month + ".txt" - return completepath - -# Benutzer anhand Verzeichnisse auflisten -def list_users(directory): - users = [d for d in os.listdir(directory) if os.path.isdir(os.path.join(directory, d))] - return users - - -# Hauptfunktion -def main(): - print(program_name + " " + str(program_version)) - print("Welche Funktion soll ausgeführt werden?") - print("1: Stempeln") - print("2: Stempelübersicht anzeigen") - question = int(input("Geben Sie Ihre Antwort ein: ")) - - if question == 1: - which_user = input("Für welchen User soll gestempelt werden? ") - append_timestamp(determine_filename(which_user)) - print("Stempeleintrag vorgenommen") - elif question == 2: - which_user = input("Für welchen User sollen die Stempelzeiten angezeigt werden?" ) - print("Zustand: " + stempel_zustand(determine_filename(which_user))) - overview(determine_filename(which_user)) - else: - print("Keine Eingabe erkannt.") - - -# Programmstart -if __name__ == "__main__": - main() \ No newline at end of file