diff --git a/__pycache__/jsonhandler.cpython-38.pyc b/__pycache__/jsonhandler.cpython-38.pyc new file mode 100644 index 0000000..2160e1a Binary files /dev/null and b/__pycache__/jsonhandler.cpython-38.pyc differ diff --git a/__pycache__/timestamping.cpython-38.pyc b/__pycache__/timestamping.cpython-38.pyc new file mode 100644 index 0000000..701c06a Binary files /dev/null and b/__pycache__/timestamping.cpython-38.pyc differ diff --git a/__pycache__/users.cpython-38.pyc b/__pycache__/users.cpython-38.pyc new file mode 100644 index 0000000..f0b193f Binary files /dev/null and b/__pycache__/users.cpython-38.pyc differ diff --git a/__pycache__/zeiterfassung.cpython-38.pyc b/__pycache__/zeiterfassung.cpython-38.pyc new file mode 100644 index 0000000..bcf0a87 Binary files /dev/null and b/__pycache__/zeiterfassung.cpython-38.pyc differ diff --git a/jsonhandler.py b/jsonhandler.py new file mode 100644 index 0000000..2601d93 --- /dev/null +++ b/jsonhandler.py @@ -0,0 +1,24 @@ +# Zeiterfassung + +# JSON Handling + +# Imports + +import json + +from users import * +from zeiterfassung import userfolder +from zeiterfassung import settingsfolder + +# Datenstrutur: + +# user: Benutzername +# name: Vollständiger Name +# password: gehashtes Passwort + +def load_settings(filename): + + with open(filename) as json_file: + data = json.load(json_file) + + return data \ No newline at end of file diff --git a/timestamping.py b/timestamping.py new file mode 100644 index 0000000..d3a999e --- /dev/null +++ b/timestamping.py @@ -0,0 +1,71 @@ +# Funktionen bzgl. Timestamps + +import time +import datetime +import os + +# 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("ausgestempelt") + else: + return("eingestempelt") + +# 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)): + if (i + 1) % 2 == 0: + out_times.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")) + + +# 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 diff --git a/users.py b/users.py new file mode 100644 index 0000000..c7f5880 --- /dev/null +++ b/users.py @@ -0,0 +1,30 @@ +# Zeiterfassung +# Benutzerfunktionen + +import os +import time +import datetime + +from zeiterfassung import userfolder +from zeiterfassung import settingsfolder + +# 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 + +def determine_filename(user, type="stamping"): + if type == "stamping": + year = str(datetime.datetime.now().year) + month = str(datetime.datetime.now().month) + completepath = scriptpath() + "/" + userfolder +"/" + user + "/" + year + "-" + month + ".txt" + return completepath + elif type == "settings": + settings_filename = "setting.json" + completepath = scriptpath() + "/" + userfolder +"/" + user + "/" settings_filename + return completepath + +# Installationsverzeichnis bestimmen +def scriptpath(): + + return os.path.dirname(os.path.abspath(__file__)) \ No newline at end of file diff --git a/users/testuser/2025-4.txt b/users/testuser/2025-4.txt index b06d023..1fb89f3 100644 --- a/users/testuser/2025-4.txt +++ b/users/testuser/2025-4.txt @@ -5,3 +5,5 @@ 1743966047 1743966049 1743967346 +1744024713 +1744024974 diff --git a/users/testuser/settings.json b/users/testuser/settings.json new file mode 100644 index 0000000..b6c41f6 --- /dev/null +++ b/users/testuser/settings.json @@ -0,0 +1,5 @@ +{ + "username": "testuser", + "name": "Der Tester", + "password": "123456789" +} diff --git a/zeiterfassung.py b/zeiterfassung.py index 7f45a74..486ae74 100644 --- a/zeiterfassung.py +++ b/zeiterfassung.py @@ -6,6 +6,9 @@ import time import datetime import os +from timestamping import * +from users import * +from jsonhandler import * # Statische Definitionen # Pfade: @@ -16,88 +19,6 @@ 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("ausgestempelt") - else: - return("eingestempelt") - -# 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)): - if (i + 1) % 2 == 0: - out_times.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")) - - -# Timestamp konvertieren -def convert_timestamp(timestamp, format): - try: - return str(datetime.datetime.fromtimestamp(int(timestamp)).strftime(format)) - except: - return ("...") - -# 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))