import sys from logging import exception from nicegui import * from definitions import * from web_ui import * from users import * from datetime import datetime import calendar # Überblicksseite zum Ausdrucken oder als PDF speichern @ui.page('/api/overview/month/{username}-{year}-{month}') def page(username: str, year: int, month: int): #try: current_user = user(username) ui.page_title(f"Bericht für {current_user.fullname} für {calendar.month_name[month]} {year}") ui.label(datetime.now().strftime('%d.%m.%Y')).classes('absolute top-5 right-5') ui.markdown(f'#Bericht für {current_user.fullname} für {calendar.month_name[month]} {year}') columns = [ {'name': 'date', 'label': 'Datum', 'field': 'date', 'required': True, 'align': 'left'}, {'name:': 'bookings', 'label': 'Buchungen', 'field': 'bookings', 'align': 'left'}, {'name:': 'is_time', 'label': 'Ist', 'field': 'is_time', 'align': 'left'}, {'name:': 'target_time', 'label': 'Soll', 'field': 'target_time', 'align': 'left'}, {'name:': 'total', 'label': 'Saldo', 'field': 'total', 'align': 'left'} ] rows = [ ] # Timestamp in ein Array schreiben timestamps = current_user.get_timestamps(year, month) timestamps.sort() # Abwesenheitsdaten in ein Dict schreiben user_absent = current_user.get_absence(year, month) # Dictionary für sortierte Timestamps timestamps_dict = { } # Dictionary mit zunächst leeren Tageinträgen befüllen for day in range(1, monthrange(year, month)[1] + 1): # Jeder Tag bekommt eine leere Liste timestamps_dict[day] = [ ] # Timestamps den Monatstagen zuordnen for stamp in timestamps: day_of_month_of_timestamp = datetime.fromtimestamp(int(stamp)).day timestamps_dict[day_of_month_of_timestamp].append(int(stamp)) timestamps_dict[day_of_month_of_timestamp].append(int(stamp)) general_saldo = 0 # Gehe jeden einzelnen Tag des Dictionaries für die Timestamps durch for day in list(timestamps_dict): booking_text = "" current_day_date = f"{day}.{month}.{year}" # Abwesenheitseinträge try: # Abwesenheitszeiten behandeln for i in list(user_absent): if int(i) == day: booking_text += absence_entries[user_absent[i]]["name"] + " " # Buchungen behandeln for i in range(len(timestamps_dict[day])): try: temp_pair = [timestamps_dict[day][i], timestamps_dict[day][i + 1]] booking_text = booking_text + str(datetime.fromtimestamp(temp_pair[0]).strftime('%H:%M')) + "-" + str(datetime.fromtimestamp(temp_pair[1]).strftime('%H:%M')) + "\n" except: if len(timestamps_dict[day]) % 2 != 0: booking_text += datetime.fromtimestamp(int(timestamps_dict[day][i])).strftime('%H:%M') except Exception as e: print(e) pass rows.append({'date': current_day_date, 'bookings': booking_text, 'is_time': 0, 'target_time': 0, 'total': 0}) #rows = [ # {'date': '1.1.2024', 'bookings': '12345', 'is_time': '12345', 'target_time': '98765', 'total': 123} #] overview_table = ui.table(columns=columns, rows=rows).classes('w-120') overview_table.add_slot('body-cell', r''' {{ props.value }} ''') #except Exception as e: # print(e) # ui.markdown('#Fehler') # ui.markdown('Benutzer existiert nicht')