diff --git a/__pycache__/definitions.cpython-311.pyc b/__pycache__/definitions.cpython-311.pyc index 6e45d15..a163037 100644 Binary files a/__pycache__/definitions.cpython-311.pyc and b/__pycache__/definitions.cpython-311.pyc differ diff --git a/__pycache__/jsonhandler.cpython-311.pyc b/__pycache__/jsonhandler.cpython-311.pyc index ee3f40f..148655f 100644 Binary files a/__pycache__/jsonhandler.cpython-311.pyc and b/__pycache__/jsonhandler.cpython-311.pyc differ diff --git a/__pycache__/timestamping.cpython-311.pyc b/__pycache__/timestamping.cpython-311.pyc index c66d928..63c67f1 100644 Binary files a/__pycache__/timestamping.cpython-311.pyc and b/__pycache__/timestamping.cpython-311.pyc differ diff --git a/__pycache__/ui.cpython-311.pyc b/__pycache__/ui.cpython-311.pyc new file mode 100644 index 0000000..db35bf9 Binary files /dev/null and b/__pycache__/ui.cpython-311.pyc differ diff --git a/__pycache__/users.cpython-311.pyc b/__pycache__/users.cpython-311.pyc index 2b379db..1c084e8 100644 Binary files a/__pycache__/users.cpython-311.pyc and b/__pycache__/users.cpython-311.pyc differ diff --git a/definitions.py b/definitions.py index c61471d..e132721 100644 --- a/definitions.py +++ b/definitions.py @@ -6,4 +6,5 @@ userfolder = "users" settingsfolder = "settings" usersettingsfilename = "settings.json" program_name = "Zeiterfassung" -program_version = "Development" \ No newline at end of file +program_version = "Development" + diff --git a/jsonhandler.py b/jsonhandler.py index 2bd4f65..09fba28 100644 --- a/jsonhandler.py +++ b/jsonhandler.py @@ -1,20 +1,28 @@ # Zeiterfassung - # JSON Handling # Imports import json -from users import * -from definitions import * - -# Datenstrutur: +# Datenstruktur: # user: Benutzername # name: Vollständiger Name # password: gehashtes Passwort +# Montatsspezifische Informationen: +# Gültigkeitsdatum, ab wann gülitg +# +# monday: Stunden +# tuesday: Stunden +# wednesday: Stunden +# thursday: Stunden +# friday: Stunden +# saturday: Stunden +# sunday: Stunden +# pto: Tage pro Jahr + def load_settings(filename): with open(filename) as json_file: diff --git a/test.json b/test.json new file mode 100644 index 0000000..f304e61 --- /dev/null +++ b/test.json @@ -0,0 +1,22 @@ +{ + "2024-04-01": { + "0": "0", + "1": "8", + "2": "8", + "3": "8", + "4": "8", + "5": "8", + "6": "0", + "vacation": "30" + }, + "2024-04-07": { + "0": "0", + "1": "6", + "2": "6", + "3": "6", + "4": "8", + "5": "6", + "6": "0", + "vacation": "28" + } +} \ No newline at end of file diff --git a/testing ttk.py b/testing ttk.py new file mode 100644 index 0000000..1431c0d --- /dev/null +++ b/testing ttk.py @@ -0,0 +1,29 @@ +import tkinter as tk +from tkinter import ttk + +# Funktion, die die Farben des Buttons ändert +def aendere_farbe(button, bg_farbe, fg_farbe): + # Ändern der Hintergrund- und Textfarbe des Buttons + button.configure(bg=bg_farbe, fg=fg_farbe) + +# Erstellen des Hauptfensters +root = tk.Tk() +root.title("Buttons mit unterschiedlichen Farben") + +# Liste von Button-Beschriftungen und den gewünschten Farben +button_info = [ + ('Button 1', 'green', 'white'), + ('Button 2', 'blue', 'yellow'), + ('Button 3', 'red', 'black') +] + +# Erstellen der Buttons aus der Liste +buttons = [] +for text, bg, fg in button_info: + # Einen Button erstellen und die Farben ändern + button = tk.Button(root, text=text, command=lambda b=button, bg=bg, fg=fg: aendere_farbe(b, bg, fg)) + button.pack(pady=10) + buttons.append(button) + +# Hauptloop starten +root.mainloop() diff --git a/timestamping.py b/timestamping.py index ce0480b..6ed1981 100644 --- a/timestamping.py +++ b/timestamping.py @@ -15,6 +15,7 @@ def append_timestamp(filename): with open(filename, 'a') as file: # Schreibe den Timestamp in die Datei und füge einen Zeilenumbruch hinzu file.write(f"{timestamp}\n") + file.close() except FileNotFoundError: # Fehlende Verzeichnisse anlegen folder_path = os.path.dirname(filename) @@ -28,7 +29,9 @@ def len_timestamps(filename): with open(filename, 'r') as file: # Zähle die Zeilen lines = file.readlines() - return len(lines) + file.close() + print(len(lines)) + return len(lines) except FileNotFoundError: print(f"Die Datei {filename} wurde nicht gefunden.") return 0 @@ -50,23 +53,33 @@ def overview(filename): with open(filename, 'r') as file: lines = file.readlines() - in_times = [] - out_times = [] + timelist = [[] for i in range(3)] for i in range(0, len(lines)): if (i + 1) % 2 == 0: - out_times.append(lines[i]) + timelist[1].append(lines[i]) else: - in_times.append(lines[i]) - if len(in_times) > len(out_times): - out_times.append("") - for i in range(0, len(in_times)): - print(convert_timestamp(in_times[i], "%d.%m.%Y %H:%M") + " - " + convert_timestamp(out_times[i], "%H:%M")) + timelist[0].append(lines[i]) + if len(timelist[0]) > len(timelist[1]): + timelist[1].append("") + for i in range(0, len(timelist[0])): + timelist[2].append(int(timelist[1][i])-int(timelist[0][i])) + + for i in range(0, len(timelist[0])): + print(convert_timestamp(timelist[0][i], "%d.%m.%Y %H:%M") + " - " + convert_timestamp(timelist[1][i], "%d.%m.%Y %H:%M") + " Dauer: " + convert_duration(timelist[2][i])) # Timestamp konvertieren def convert_timestamp(timestamp, format): try: return str(datetime.datetime.fromtimestamp(int(timestamp)).strftime(format)) except: - return ("...") \ No newline at end of file + return ("...") + +#Zeitdauerdarstellung berechnen +def convert_duration(duration): + hours = int(duration / 3600) + minutes = int((duration - hours * 3600) / 60) + seconds = int(duration - hours * 3600 - minutes * 60) + + return(f"{hours:02d}" + ":" + f"{minutes:02d}" + ":" + f"{seconds:02d}") \ No newline at end of file diff --git a/ui.py b/ui.py new file mode 100644 index 0000000..18ce463 --- /dev/null +++ b/ui.py @@ -0,0 +1,46 @@ +# Zeiterfassung +# UI +from wx.lib.agw.aui import aero_up_single + +from definitions import * + +import tkinter as tk +from tkinter import ttk +from tkinter import messagebox + +from timestamping import append_timestamp, len_timestamps +from users import determine_filename + + +def ui_stempeln(button, label): + append_timestamp(determine_filename(label)) + global buttons + if len_timestamps(determine_filename(label)) % 2 == 0: + buttons[button].configure(relief="raised", bg="red") + else: + buttons[button].configure(relief="sunken", bg="green") + +def stempeln(userlist): + stempeln = tk.Tk() + stempeln.title(program_name + " " + program_version) + stempeln.geometry("600x400") + stempeln.minsize(width=200, height=200) + + global buttons + buttons = [ ] + button_index = 0 + windowSize = stempeln.winfo_height() + + + for i in userlist: + buttonheight = int(windowSize / len(userlist) - 10) + button = tk.Button(stempeln, text=i, height=buttonheight, command=lambda b=button_index, label=i: ui_stempeln(b, label)) + if len_timestamps(determine_filename(i)) % 2 == 0: + button.configure(relief="raised", bg ="red") + else: + button.configure(relief="sunken", bg="green") + button.pack(fill="x", pady=5) + buttons.append(button) + button_index+=1 + + stempeln.mainloop() \ No newline at end of file diff --git a/users.py b/users.py index d9406d2..0aedf62 100644 --- a/users.py +++ b/users.py @@ -2,7 +2,6 @@ # Benutzerfunktionen import os -import time import datetime from definitions import * @@ -22,7 +21,13 @@ def determine_filename(user, type="stamping"): completepath = scriptpath() + "/" + userfolder +"/" + user + "/" + usersettingsfilename return completepath +# Benutzerliste anzeigen +def printUserList(): + userlist = list_users(scriptpath() + "/" + userfolder) + for i in range(0, len(userlist)): + print(str(i + 1) + ": " + str(userlist[i])) + return(userlist) + # Installationsverzeichnis bestimmen def scriptpath(): - - return os.path.dirname(os.path.abspath(__file__)) \ No newline at end of file + return os.path.dirname(os.path.abspath(__file__)) diff --git a/users/testuser/2025-4.txt b/users/testuser/2025-4.txt index 1fb89f3..0f2a1af 100644 --- a/users/testuser/2025-4.txt +++ b/users/testuser/2025-4.txt @@ -7,3 +7,68 @@ 1743967346 1744024713 1744024974 +1744107474 +1744194019 +1744194047 +1744194048 +1744194049 +1744194602 +1744194612 +1744194613 +1744194613 +1744194614 +1744194709 +1744196085 +1744196089 +1744196089 +1744196120 +1744196189 +1744196243 +1744196307 +1744196315 +1744196324 +1744196333 +1744196334 +1744196335 +1744196337 +1744196338 +1744196339 +1744196340 +1744196342 +1744196343 +1744196344 +1744196345 +1744196346 +1744196500 +1744196505 +1744196506 +1744196507 +1744196663 +1744196665 +1744196667 +1744196667 +1744196719 +1744196721 +1744196991 +1744197071 +1744197205 +1744197211 +1744197213 +1744197215 +1744197217 +1744197218 +1744197219 +1744197253 +1744197300 +1744197301 +1744197302 +1744197303 +1744197765 +1744197766 +1744197769 +1744197868 +1744197871 +1744198070 +1744198071 +1744198392 +1744198393 diff --git a/users/testuser/settings.json b/users/testuser/settings.json index 6d4dc88..b6c1df5 100644 --- a/users/testuser/settings.json +++ b/users/testuser/settings.json @@ -1,5 +1,25 @@ { "username": "testuser", "name": "Der neue Tester", - "password": "123456789" + "password": "123456789", + "2024-04-01": { + "0": "0", + "1": "8", + "2": "8", + "3": "8", + "4": "8", + "5": "8", + "6": "0", + "vacation": "30" + }, + "2024-04-07": { + "0": "0", + "1": "6", + "2": "6", + "3": "6", + "4": "8", + "5": "6", + "6": "0", + "vacation": "28" + } } \ No newline at end of file diff --git a/users/testuser2/2025-4.txt b/users/testuser2/2025-4.txt index 3502cbb..e1a06f5 100644 --- a/users/testuser2/2025-4.txt +++ b/users/testuser2/2025-4.txt @@ -6,3 +6,15 @@ 1744018696 1744100316 1744100330 +1744194603 +1744196086 +1744196347 +1744196348 +1744196349 +1744196350 +1744196350 +1744196351 +1744197304 +1744197306 +1744197767 +1744197768 diff --git a/zeiterfassung.py b/zeiterfassung.py index 074b0ad..1d25594 100644 --- a/zeiterfassung.py +++ b/zeiterfassung.py @@ -3,31 +3,28 @@ # Zeiterfassung # Bibliotheksimports -import time -import datetime -import os from timestamping import * from users import * from jsonhandler import * from definitions import * +from ui import * # Funktionen -def printUserList(): - userlist = list_users(scriptpath() + "/" + userfolder) - for i in range(0, len(userlist)): - print(str(i + 1) + ": " + str(userlist[i])) - return(userlist) - # Hauptfunktion def main(): + + userList = printUserList() + stempeln(userList) + exit() + +# Konsole while True: print(program_name + " " + str(program_version)) print("Welche Funktion soll ausgeführt werden?") print("1: Stempeln") print("2: Stempelübersicht anzeigen") - print("3: Einstellungen ändern") print("0: Beenden") question = int(input("Geben Sie Ihre Antwort ein: ")) @@ -42,23 +39,6 @@ def main(): print("Zustand: " + stempel_zustand(determine_filename(userlist[int(which_user) -1]))) overview(determine_filename(userlist[int(which_user) - 1])) - elif question == 3: - userlist = printUserList() - which_user = input("Für welchen Benutzer sollen die Einstellungen geändert werden? ") - selected_user = userlist[int(which_user) - 1] - print("Benutzereinstellungen für Benutzer " + str(selected_user) + ":") - settings = load_settings(determine_filename(selected_user, "settings")) - for x in settings: - print(x + ": " + settings[x]) - setting_to_change = input("Welche Einstellung soll geändert werden? ") - if setting_to_change in settings: - new_value = input("Wie ist der neue Wert? ") - settings[setting_to_change] = new_value - for x in settings: - print(x + ": " + settings[x]) - print("Speicher Einstellungen") - write_settings(determine_filename(selected_user, type="settings"), settings) - elif question == 0: exit() else: