102 lines
3.8 KiB
Python
102 lines
3.8 KiB
Python
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'''
|
|
<td :props="props" :style="{'white-space':'pre-line'}">{{ props.value }}</td>
|
|
''')
|
|
|
|
#except Exception as e:
|
|
# print(e)
|
|
# ui.markdown('#Fehler')
|
|
# ui.markdown('Benutzer existiert nicht') |