Zeitbereichsupdates
This commit is contained in:
parent
cf2e8e3ab9
commit
ac57af88b3
35
admin.py
35
admin.py
@ -1,12 +1,13 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from nicegui import ui, app
|
from nicegui import ui, app, events
|
||||||
|
|
||||||
from users import *
|
from users import *
|
||||||
from definitions import *
|
from definitions import *
|
||||||
from calendar import monthrange
|
from calendar import monthrange
|
||||||
from web_ui import *
|
from web_ui import *
|
||||||
|
|
||||||
|
import os.path
|
||||||
import hashlib
|
import hashlib
|
||||||
import calendar
|
import calendar
|
||||||
import locale
|
import locale
|
||||||
@ -67,7 +68,14 @@ def page_admin():
|
|||||||
available_years = current_user.get_years()
|
available_years = current_user.get_years()
|
||||||
select_year.clear()
|
select_year.clear()
|
||||||
select_year.set_options(available_years)
|
select_year.set_options(available_years)
|
||||||
|
try:
|
||||||
|
select_year.value = str(datetime.datetime.now().year)
|
||||||
|
except:
|
||||||
select_year.value = list(available_years)[0]
|
select_year.value = list(available_years)[0]
|
||||||
|
try:
|
||||||
|
select_month.value = datetime.datetime.now().month
|
||||||
|
except:
|
||||||
|
select_month.value = list(available_months)[0]
|
||||||
|
|
||||||
userlist = list_users()
|
userlist = list_users()
|
||||||
ui.markdown("Benutzer:")
|
ui.markdown("Benutzer:")
|
||||||
@ -349,8 +357,15 @@ Dies kann nicht rückgägig gemacht werden!''')
|
|||||||
if isinstance(absence_dates.value, str):
|
if isinstance(absence_dates.value, str):
|
||||||
absence_date = absence_dates.value.split("-")
|
absence_date = absence_dates.value.split("-")
|
||||||
current_user.update_absence(absence_date[0], absence_date[1], absence_date[2], absence_type)
|
current_user.update_absence(absence_date[0], absence_date[1], absence_date[2], absence_type)
|
||||||
|
current_sel_month = select_month.value
|
||||||
|
current_sel_year = select_year.value
|
||||||
|
update_user()
|
||||||
|
update_months()
|
||||||
|
select_year.value = current_sel_year
|
||||||
|
select_month.value = current_sel_month
|
||||||
calendar_card.clear()
|
calendar_card.clear()
|
||||||
update_month_and_year()
|
update_month_and_year()
|
||||||
|
|
||||||
# Bei Zeitbereich, aufteilen
|
# Bei Zeitbereich, aufteilen
|
||||||
elif isinstance(absence_dates.value, dict):
|
elif isinstance(absence_dates.value, dict):
|
||||||
start_date = absence_dates.value["from"]
|
start_date = absence_dates.value["from"]
|
||||||
@ -371,6 +386,11 @@ Dies kann nicht rückgägig gemacht werden!''')
|
|||||||
|
|
||||||
while actual_date <= end_date:
|
while actual_date <= end_date:
|
||||||
current_user.workhours
|
current_user.workhours
|
||||||
|
absences = current_user.get_absence(actual_date.year, actual_date.month)
|
||||||
|
|
||||||
|
if str(actual_date.day) in list(absences):
|
||||||
|
current_user.del_absence(actual_date.year, actual_date.month, actual_date.day)
|
||||||
|
ui.notify(f"Eintrag {absence_entries[absences[str(actual_date.day)]]['name']} am {actual_date.day}.{actual_date.month}.{actual_date.year} überschrieben.")
|
||||||
current_user.update_absence(actual_date.year, actual_date.month, actual_date.day, absence_type)
|
current_user.update_absence(actual_date.year, actual_date.month, actual_date.day, absence_type)
|
||||||
|
|
||||||
actual_date = actual_date + datetime.timedelta(days=1)
|
actual_date = actual_date + datetime.timedelta(days=1)
|
||||||
@ -449,7 +469,9 @@ Dies kann nicht rückgägig gemacht werden!''')
|
|||||||
userlist = list_users()
|
userlist = list_users()
|
||||||
userlist.sort()
|
userlist.sort()
|
||||||
workhours = [ ]
|
workhours = [ ]
|
||||||
|
|
||||||
with ui.row():
|
with ui.row():
|
||||||
|
|
||||||
def user_selection_changed():
|
def user_selection_changed():
|
||||||
try:
|
try:
|
||||||
if user_selection.value != None:
|
if user_selection.value != None:
|
||||||
@ -465,6 +487,8 @@ Dies kann nicht rückgägig gemacht werden!''')
|
|||||||
workhours_select.set_options(workhour_list)
|
workhours_select.set_options(workhour_list)
|
||||||
workhours_select.value = workhour_list[0]
|
workhours_select.value = workhour_list[0]
|
||||||
workinghourscard.visible = True
|
workinghourscard.visible = True
|
||||||
|
|
||||||
|
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -591,12 +615,14 @@ Dies kann nicht rückgägig gemacht werden!''')
|
|||||||
ui.markdown("**Benutzereinstellungen**")
|
ui.markdown("**Benutzereinstellungen**")
|
||||||
with ui.grid(columns=2):
|
with ui.grid(columns=2):
|
||||||
|
|
||||||
ui.label("Benutzername:")
|
ui.markdown("Benutzername:")
|
||||||
username_input = ui.input()
|
username_input = ui.input()
|
||||||
ui.label("Voller Name:")
|
ui.markdown("Voller Name:")
|
||||||
fullname_input = ui.input()
|
fullname_input = ui.input()
|
||||||
ui.label("Passwort")
|
ui.markdown("Passwort")
|
||||||
password_input = ui.input(password=True)
|
password_input = ui.input(password=True)
|
||||||
|
|
||||||
|
|
||||||
with ui.grid(columns=2):
|
with ui.grid(columns=2):
|
||||||
ui.button("Speichern", on_click=save_user_settings)
|
ui.button("Speichern", on_click=save_user_settings)
|
||||||
ui.button("Löschen", on_click=del_user)
|
ui.button("Löschen", on_click=del_user)
|
||||||
@ -638,6 +664,7 @@ Dies kann nicht rückgägig gemacht werden!''')
|
|||||||
with ui.row():
|
with ui.row():
|
||||||
ui.button("Speichern", on_click=save_workhours)
|
ui.button("Speichern", on_click=save_workhours)
|
||||||
ui.button("Löschen", on_click=delete_workhour_entry)
|
ui.button("Löschen", on_click=delete_workhour_entry)
|
||||||
|
|
||||||
def new_workhours_entry():
|
def new_workhours_entry():
|
||||||
current_user = user(user_selection.value)
|
current_user = user(user_selection.value)
|
||||||
|
|
||||||
|
@ -31,4 +31,6 @@ absence_entries = {"U": { "name": "Urlaub",
|
|||||||
"UU": { "name": "Urlaub aus Überstunden",
|
"UU": { "name": "Urlaub aus Überstunden",
|
||||||
"color": "green"},
|
"color": "green"},
|
||||||
"F": { "name": "Fortbildung",
|
"F": { "name": "Fortbildung",
|
||||||
"color": "black"}}
|
"color": "black"},
|
||||||
|
"EZ": { "name": "Elternzeit",
|
||||||
|
"color": "purple"}}
|
||||||
|
2
main.py
2
main.py
@ -1,3 +1,5 @@
|
|||||||
|
# Zeiterfassung
|
||||||
|
|
||||||
from web_ui import *
|
from web_ui import *
|
||||||
from admin import *
|
from admin import *
|
||||||
from login import *
|
from login import *
|
||||||
|
3
users.py
3
users.py
@ -288,6 +288,9 @@ class user:
|
|||||||
hours_to_work = -1
|
hours_to_work = -1
|
||||||
return hours_to_work
|
return hours_to_work
|
||||||
|
|
||||||
|
def delete_photo(self):
|
||||||
|
os.remove(self.photofile)
|
||||||
|
|
||||||
# Benutzer auflisten
|
# Benutzer auflisten
|
||||||
def list_users():
|
def list_users():
|
||||||
users = [d for d in os.listdir(userfolder) if os.path.isdir(os.path.join(userfolder, d))]
|
users = [d for d in os.listdir(userfolder) if os.path.isdir(os.path.join(userfolder, d))]
|
||||||
|
5
users/testuser1/2025-11.json
Normal file
5
users/testuser1/2025-11.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"archived": 0,
|
||||||
|
"overtime": 0,
|
||||||
|
"absence": {}
|
||||||
|
}
|
37
users/testuser1/2025-12.json
Normal file
37
users/testuser1/2025-12.json
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"archived": 0,
|
||||||
|
"overtime": 0,
|
||||||
|
"absence": {
|
||||||
|
"1": "EZ",
|
||||||
|
"2": "EZ",
|
||||||
|
"3": "EZ",
|
||||||
|
"4": "EZ",
|
||||||
|
"5": "EZ",
|
||||||
|
"6": "EZ",
|
||||||
|
"7": "EZ",
|
||||||
|
"8": "EZ",
|
||||||
|
"9": "EZ",
|
||||||
|
"10": "EZ",
|
||||||
|
"11": "EZ",
|
||||||
|
"12": "EZ",
|
||||||
|
"13": "EZ",
|
||||||
|
"14": "EZ",
|
||||||
|
"15": "EZ",
|
||||||
|
"16": "EZ",
|
||||||
|
"17": "EZ",
|
||||||
|
"18": "EZ",
|
||||||
|
"19": "EZ",
|
||||||
|
"20": "EZ",
|
||||||
|
"21": "EZ",
|
||||||
|
"22": "EZ",
|
||||||
|
"23": "EZ",
|
||||||
|
"24": "EZ",
|
||||||
|
"25": "EZ",
|
||||||
|
"26": "EZ",
|
||||||
|
"27": "EZ",
|
||||||
|
"28": "EZ",
|
||||||
|
"29": "EZ",
|
||||||
|
"30": "EZ",
|
||||||
|
"31": "EZ"
|
||||||
|
}
|
||||||
|
}
|
@ -2,8 +2,9 @@
|
|||||||
"archived": 0,
|
"archived": 0,
|
||||||
"overtime": 0,
|
"overtime": 0,
|
||||||
"absence": {
|
"absence": {
|
||||||
"7": "K",
|
"7": "U",
|
||||||
"8": "UU",
|
"8": "U",
|
||||||
"9": "KK"
|
"9": "U",
|
||||||
|
"10": "U"
|
||||||
}
|
}
|
||||||
}
|
}
|
34
users/testuser1/2026-1.json
Normal file
34
users/testuser1/2026-1.json
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"archived": 0,
|
||||||
|
"overtime": 0,
|
||||||
|
"absence": {
|
||||||
|
"1": "EZ",
|
||||||
|
"2": "EZ",
|
||||||
|
"3": "EZ",
|
||||||
|
"4": "EZ",
|
||||||
|
"5": "EZ",
|
||||||
|
"6": "EZ",
|
||||||
|
"7": "EZ",
|
||||||
|
"8": "EZ",
|
||||||
|
"9": "EZ",
|
||||||
|
"10": "EZ",
|
||||||
|
"11": "EZ",
|
||||||
|
"12": "EZ",
|
||||||
|
"13": "EZ",
|
||||||
|
"14": "EZ",
|
||||||
|
"15": "EZ",
|
||||||
|
"16": "EZ",
|
||||||
|
"17": "EZ",
|
||||||
|
"18": "EZ",
|
||||||
|
"19": "EZ",
|
||||||
|
"20": "EZ",
|
||||||
|
"21": "EZ",
|
||||||
|
"22": "EZ",
|
||||||
|
"23": "EZ",
|
||||||
|
"24": "EZ",
|
||||||
|
"25": "EZ",
|
||||||
|
"26": "EZ",
|
||||||
|
"27": "EZ",
|
||||||
|
"28": "EZ"
|
||||||
|
}
|
||||||
|
}
|
4
users/testuser3/2025-4.json
Normal file
4
users/testuser3/2025-4.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"archived": 0,
|
||||||
|
"total_hours": 0
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user