diff --git a/users.py b/users.py index 5be1841..2304326 100644 --- a/users.py +++ b/users.py @@ -124,35 +124,66 @@ class user: def del_user(self): shutil.rmtree(self.userfolder) + def get_starting_day(self): + starting_date = list(self.workhours) + starting_date.sort() + year = str(starting_date[0])[:4] + month = str(starting_date[0])[5:7] + day = str(starting_date[0])[8:10] + + return (year, month, day) + def get_years(self): - txtfiles = [ ] - for file in os.listdir(self.userfolder): - if file.endswith(".txt"): - txtfiles.append(file) - for i in range(len(txtfiles)): - txtfiles[i] = txtfiles[i][:4] - txtfiles = list(set(txtfiles)) - txtfiles.sort() - return txtfiles + years = [ ] + + # Aktuelles Jahr bestimmen + year_now = int(datetime.datetime.fromtimestamp(time.time()).strftime('%Y')) + + for i in range(int(self.get_starting_day()[0]), year_now + 1): + years.append(str(i)) + + return years def get_months(self, year): - txtfiles = [ ] - for file in os.listdir(self.userfolder): - if file.endswith(".txt"): - txtfiles.append(file) - txtfiles.sort() available_months = [ ] - for entry in txtfiles: - if entry[:4] == str(year): - available_months.append(entry[5:-4]) + # Anfangsdatum bestimmen + start_year = int(self.get_starting_day()[0]) + start_month = int(self.get_starting_day()[1]) + year_now = int(datetime.datetime.now().year) + month_now = int(datetime.datetime.now().month) + + if start_year == year: + if start_year == year_now: + for i in range(start_month, month_now + 1): + available_months.append(i) + elif start_year < year_now: + for i in range(start_month, 13): + available_months.append(i) + else: + if int(year) == year_now: + for i in range(1, month_now + 1): + available_months.append(i) + elif int(year) < year_now: + for i in range(1, 13): + available_months.append(i) + + return(available_months) + + + + return available_months def get_timestamps(self, year, month): - with open(f"{self.userfolder}/{year}-{month}.txt", "r") as file: - timestamps = file.readlines() - timestamps.sort() - return timestamps + try: + with open(f"{self.userfolder}/{year}-{month}.txt", "r") as file: + timestamps = file.readlines() + timestamps.sort() + return timestamps + except: + timestamps = [ ] + return timestamps def write_edited_timestamps(self, timestamps, year, month): with open(f"{self.userfolder}/{year}-{month}.txt", "w") as file: diff --git a/web_ui.py b/web_ui.py index 774f892..419251a 100644 --- a/web_ui.py +++ b/web_ui.py @@ -22,7 +22,7 @@ class pageheader: class ValueBinder: def __init__(self): - self.value_to_bind = "" + self.value = "" def cookie_hash(user, password): return hashlib.sha256(b"{user}{app.storage.user['id']}{password}").hexdigest() @@ -120,7 +120,7 @@ def page_admin(): users = ui.tab('Benutzer') settings = ui.tab('Einstellungen') - with (ui.tab_panels(tabs, value=time_overview)): + with ((ui.tab_panels(tabs, value=time_overview))): with ui.tab_panel(time_overview): ui.markdown("##Übersichten") @@ -133,47 +133,55 @@ def page_admin(): month_binder = ValueBinder() def update_months(): - try: + #try: + print('Update Months called') current_user = user(time_user.value) - available_months = current_user.get_months(year_binder.value_to_bind) + available_months = current_user.get_months(year_binder.value) available_months_dict = {} for element in available_months: available_months_dict[element] = calendar.month_name[int(element)] + print(available_months_dict) select_month.clear() select_month.set_options(available_months_dict) select_month.value = list(available_months)[0] - except: - pass + + #except: + # print("select.month existiert noch nicht") userlist = list_users() ui.markdown("Benutzer:") - time_user = ui.select(options=userlist, on_change=update_months) + print("Time User wird konstruiert") + time_user = ui.select(options=userlist, value=userlist[0], on_change=update_months) + + user_to_select_for_start = userlist[0] + current_user = user(user_to_select_for_start) - time_user.value = userlist[0] current_year = datetime.datetime.now().year current_month = datetime.datetime.now().month - - current_user = user(time_user.value) + current_user = user(user_to_select_for_start) available_years = current_user.get_years() available_months = current_user.get_months(current_year) - available_months_dict = { } for element in available_months: available_months_dict[element] = calendar.month_name[int(element)] + print('Selektoren konstruiert') + print(f" current_month: {current_month} und available_months: {available_months}") + if current_month in available_months: + set_month = current_month + else: + set_month = available_months[0] + print(set_month) + print(f" current_year: {current_year} und available_years: {available_years}") + if str(current_year) in available_years: + set_year = str(current_year) + else: + set_year = (available_years[0]) + print(set_year) + select_month = ui.select(options=available_months_dict, value=set_month).bind_value_to(month_binder, 'value') + select_year = ui.select(options=available_years, value=set_year, on_change=update_months).bind_value_to(year_binder, 'value') - select_month = ui.select(options=available_months_dict).bind_value(month_binder, 'value_to_bind') - select_year = ui.select(options=available_years, on_change=update_months).bind_value(year_binder, 'value_to_bind') - try: - select_year.value = str(current_year) - except: - pass - try: - select_month.value = str(current_month) - except: - select_month.value = str(available_months[0]) - - month_header = ui.markdown(f"###Buchungen für {calendar.month_name[int(select_month.value)]} {select_year.value}") + month_header = ui.markdown(f"###Buchungen für {current_user.fullname} für {calendar.month_name[int(select_month.value)]} {select_year.value}") # Tabelle aufbauen with ui.card() as calendar_card: @@ -347,7 +355,8 @@ def page_admin(): def clear_card(): 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}") + current_user = user(time_user.value) + month_header.set_content(f"###Buchungen für {current_user.fullname} für {calendar.month_name[int(select_month.value)]} {select_year.value}") button_update = ui.button("Aktualisieren", on_click=clear_card) button_update.move(timetable_header)