Start kompletter Rewrite

begonnen mit UI
Pin Pad erstellt
This commit is contained in:
Alexander Malzkuhn 2025-04-11 14:01:35 +02:00
parent c617c886a1
commit 1ab664ef87
11 changed files with 118 additions and 113 deletions

3
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

8
.idea/Zeiterfassung.iml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.11" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.11" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Zeiterfassung.iml" filepath="$PROJECT_DIR$/.idea/Zeiterfassung.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

Binary file not shown.

5
definitions.py Normal file
View File

@ -0,0 +1,5 @@
# Zeiterfassung
# Quasi-Konsten
app_title = "Zeiterfassung"
app_version = "0.0.0"

0
main.py Normal file
View File

75
ui.py Normal file
View File

@ -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()

View File

@ -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()