diff --git a/users.py b/users.py index 496009e..9cea0fc 100644 --- a/users.py +++ b/users.py @@ -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') diff --git a/users/testuser1/2025-4.txt b/users/testuser1/2025-4.txt index 8715008..454cd73 100644 --- a/users/testuser1/2025-4.txt +++ b/users/testuser1/2025-4.txt @@ -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 diff --git a/users/testuser1/settings.json b/users/testuser1/settings.json index 90f686a..248c322 100644 --- a/users/testuser1/settings.json +++ b/users/testuser1/settings.json @@ -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" } } } \ No newline at end of file diff --git a/web_ui.py b/web_ui.py index 67f8541..750f7bb 100644 --- a/web_ui.py +++ b/web_ui.py @@ -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()