Sollstunden in Übersicht eingefügt

This commit is contained in:
Alexander Malzkuhn 2025-04-23 10:09:46 +02:00
parent 15ad2cd495
commit 99f1ba9336
4 changed files with 147 additions and 88 deletions

View File

@ -38,9 +38,12 @@ class user:
completepath = f"{self.userfolder}/{year}-{month}.txt"
return completepath
def timestamp(self):
def timestamp(self, stamptime=-1):
filename = self.get_stamp_file()
timestamp = int(time.time())
if stamptime == -1:
stamptime = time.time()
print(stamptime)
timestamp = int(stamptime)
try:
# Öffne die Datei im Anhang-Modus ('a')

View File

@ -1,12 +1,10 @@
1743652800
1743667140
1743923400
1743965819
1743965909
1743966000
1743966022
1743966045
1743966047
1743966049
1743544200
1744659900
1743967800
1744889948
1744889966
1744989797
@ -22,7 +20,17 @@
1744991291
1744991473
1744991477
1744991770
1744991777
1745181046
1745181050
1745240760
1745240762
1745390818
1745390894
1745390894
1745391029
1745391037
1745391056
1745391058
1745391059
1743660240

View File

@ -4,44 +4,34 @@
"password": "123456789",
"workhours": {
"2024-04-01": {
"1": "8",
"2": "8",
"3": "8",
"4": "4",
"5": "5",
"6": "4",
"7": "0",
"1": "11",
"2": "12",
"3": "13",
"4": "14",
"5": "15",
"6": "16",
"7": "17",
"vacation": "35"
},
"2025-04-23": {
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"vacation": 0
},
"2025-05-13": {
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"vacation": 0
"1": "0",
"2": "0",
"3": "0",
"4": "0",
"5": "0",
"6": "0",
"7": "0",
"vacation": "0"
},
"2025-04-22": {
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"vacation": 0
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"vacation": "0"
}
}
}

150
web_ui.py
View File

@ -98,13 +98,14 @@ def page_admin():
# Basisstruktur
with ui.card():
with ui.row():
def update_user():
pass
userlist = list_users()
ui.markdown("Benutzer:")
time_user = ui.select(options=userlist)
time_user.value = userlist[0]
def update_user():
pass
ui.button("Aktualisieren", on_click=update_user)
# Tabelle konstruieren
@ -153,68 +154,125 @@ def page_admin():
def update_month_and_year():
with ui.grid(columns=6) as table_grid:
ui.markdown("Datum")
ui.markdown("Buchungen")
ui.markdown("Soll")
ui.markdown("Ist")
ui.markdown("Saldo")
ui.markdown("**Datum**")
ui.markdown("**Buchungen**")
ui.markdown("**Soll**")
ui.markdown("**Ist**")
ui.markdown("**Saldo**")
ui.space()
current_user = user(time_user.value)
timestamps = current_user.get_timestamps(year=select_year.value, month=select_month.value)
for day in range(1, monthrange(int(select_year.value), int(select_month.value))[1] + 1):
ui.markdown(f"{day}. {calendar.month_name[int(select_month.value)]}")
day_in_list = datetime.datetime(int(select_year.value), int(select_month.value), day)
ui.markdown(f"{day_in_list.strftime('%a')}., {day}. {calendar.month_name[int(select_month.value)]}")
# ---> Hier die Schleife für die Buchungen
#ui.markdown('BUCHUNGEN')
with ui.row():
counter = 0
for i in timestamps:
actual_timestamp = datetime.datetime.fromtimestamp(int(i))
timestamp_day = actual_timestamp.strftime('%-d')
def edit_entry(t_stamp, day):
with ui.dialog() as edit_dialog, ui.card():
ui.markdown("###Eintrag bearbeiten")
timestamp = datetime.datetime.fromtimestamp(int(t_stamp))
input_time = ui.time().classes('w-full justify-center')
input_time.value = timestamp.strftime('%H:%M')
def save_entry(day):
position = timestamps.index(t_stamp)
new_time_stamp = datetime.datetime(int(select_year.value), int(select_month.value), day, int(input_time.value[:2]), int(input_time.value[-2:]))
print(new_time_stamp)
timestamps[position] = str(int(new_time_stamp.timestamp())) +"\n"
#print(timestamps)
current_user = user(time_user.value)
current_user.write_edited_timestamps(timestamps, select_year.value, select_month.value)
def del_entry():
pass
with ui.row():
ui.button("Speichern", on_click=lambda day=day: save_entry(day))
ui.button("Löschen", on_click=del_entry)
ui.button("Abbrechen", on_click=edit_dialog.close)
edit_dialog.open()
if int(timestamp_day) == int(day):
counter += 1
print(actual_timestamp)
current_button = ui.button(actual_timestamp.strftime('%H:%M'), on_click=lambda t_stamp=i, day=counter: edit_entry(t_stamp, day))
if counter % 2 == 0:
current_button.props('color=red')
else:
current_button.props('color=green')
def edit_entry(t_stamp, day):
with ui.dialog() as edit_dialog, ui.card():
ui.markdown("###Eintrag bearbeiten")
timestamp = datetime.datetime.fromtimestamp(int(t_stamp))
input_time = ui.time().classes('w-full justify-center')
input_time.value = timestamp.strftime('%H:%M')
def save_entry(day):
position = timestamps.index(t_stamp)
new_time_stamp = datetime.datetime(int(select_year.value), int(select_month.value), day, int(input_time.value[:2]), int(input_time.value[-2:]))
timestamps[position] = str(
int(new_time_stamp.timestamp())) + "\n"
# print(timestamps)
current_user = user(time_user.value)
current_user.write_edited_timestamps(timestamps, select_year.value, select_month.value)
edit_dialog.close()
calendar_card.clear()
update_month_and_year()
month_header.set_content(f"###Buchungen für {calendar.month_name[int(select_month.value)]} {select_year.value}")
ui.notify("Eintrag gespeichert")
def del_entry():
timestamps.remove(t_stamp)
timestamps.sort()
current_user = user(time_user.value)
current_user.write_edited_timestamps(timestamps, select_year.value, select_month.value)
edit_dialog.close()
calendar_card.clear()
update_month_and_year()
month_header.set_content(f"###Buchungen für {calendar.month_name[int(select_month.value)]} {select_year.value}")
ui.notify("Eintrag gelöscht")
with ui.row():
ui.button("Speichern",
on_click=lambda day=day: save_entry(day))
ui.button("Löschen", on_click=del_entry)
ui.button("Abbrechen", on_click=edit_dialog.close)
edit_dialog.open()
counter += 1
current_button = ui.button(actual_timestamp.strftime('%H:%M'), on_click=lambda t_stamp=i, day=day: edit_entry(t_stamp, day))
#if counter % 2 == 0:
# current_button.props('color=red')
#else:
# current_button.props('color=green')
# Arbeitszeitsoll bestimmen
workhour_entries = list(current_user.workhours)
workhour_entries.sort()
found_match = False
for entry in reversed(workhour_entries):
if datetime.datetime.strptime(entry, '%Y-%m-%d').timestamp() < day_in_list.timestamp() and found_match == False:
if int(day_in_list.strftime('%w')) == 0:
weekday_index = 7
else:
weekday_index = int(day_in_list.strftime('%w'))
ui.markdown(f"{current_user.workhours[entry][str(weekday_index)]} h")
found_match = True
# ui.markdown("Soll")
ui.markdown("Soll")
ui.markdown("Ist")
ui.markdown("+/-")
ui.button("Eintrag hinzufügen")
def add_entry(day):
with ui.dialog() as add_dialog, ui.card():
ui.markdown("###Eintrag hinzufügen")
input_time = ui.time().classes('w-full justify-center')
def add_entry_save():
if input_time.value == None:
ui.notify("Bitte eine Uhrzeit auswählen.")
return
new_time_stamp = datetime.datetime(int(select_year.value),
int(select_month.value), day,
int(input_time.value[:2]),
int(input_time.value[-2:])).timestamp()
current_user = user(time_user.value)
current_user.timestamp(stamptime=int(new_time_stamp))
calendar_card.clear()
update_month_and_year()
add_dialog.close()
ui.notify("Eintrag hinzugefügt")
ui.button("Speichern", on_click=add_entry_save)
ui.button("Abbrechen", on_click=add_dialog.close)
add_dialog.open()
ui.button("Eintrag hinzufügen", on_click=lambda day=day: add_entry(day))
table_grid.move(calendar_card)
update_month_and_year()