# # # 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("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)) 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: userlist = list_users(scriptpath() + "/" + userfolder) print(userlist) for i in range (0, len(userlist)): print(str(i + 1) + ": " + str(userlist[i])) which_user = input("Für welchen User soll gestempelt werden? ") append_timestamp(determine_filename(userlist[int(which_user) - 1])) print("Stempeleintrag vorgenommen") elif question == 2: userlist = list_users(scriptpath() + "/" + userfolder) for i in range (0, len(userlist)): print(str(i + 1) + ": " + str(userlist[i])) which_user = input("Für welchen User sollen die Stempelzeiten angezeigt werden? " ) print("Zustand: " + stempel_zustand(determine_filename(userlist[int(which_user) -1]))) overview(determine_filename(userlist[int(which_user) - 1])) else: print("Keine Eingabe erkannt.") # Programmstart if __name__ == "__main__": main()