215 lines
7.4 KiB
Python
215 lines
7.4 KiB
Python
from nicegui import ui, app
|
|
from users import *
|
|
from definitions import *
|
|
import hashlib
|
|
|
|
class pageheader:
|
|
def __init__(self, heading):
|
|
self.heading = heading
|
|
|
|
ui.markdown(f"##{app_title} {app_version}")
|
|
ui.markdown(f"###{self.heading}")
|
|
|
|
def cookie_hash(user, password):
|
|
return hashlib.sha256(b"{user}{app.storage.user['id']}{password}").hexdigest()
|
|
|
|
def adminsettings():
|
|
# Settingsdatei einlesen
|
|
try:
|
|
with open(f"{scriptpath}/{usersettingsfilename}") as json_file:
|
|
data = json.load(json_file)
|
|
json_file.close()
|
|
return(data)
|
|
except:
|
|
return(-1)
|
|
|
|
@ui.page('/login')
|
|
def page_login():
|
|
|
|
# Settingsdatei einlesen
|
|
data = adminsettings()
|
|
|
|
def login():
|
|
nonlocal data
|
|
|
|
if username.value == data["admin_user"]:
|
|
if password.value == data["admin_password"]:
|
|
active_login = cookie_hash(data["admin_user"], data["admin_password"])
|
|
app.storage.user['secret'] = active_login
|
|
ui.navigate.to("/admin")
|
|
else:
|
|
ui.notify("Login fehlgeschlagen")
|
|
|
|
#ui.markdown(f"## {app_title} {app_version}")
|
|
#ui.markdown("Bitte einloggen")
|
|
|
|
pageheader("Bitte einloggen:")
|
|
|
|
with ui.grid(columns=2):
|
|
ui.markdown("Benutzer:")
|
|
username = ui.input('Benutzername')
|
|
ui.markdown("Passwort:")
|
|
password = ui.input('Passwort', password=True)
|
|
ui.button(text="Login", on_click=lambda: login())
|
|
|
|
@ui.page('/admin')
|
|
def page_admin():
|
|
data = adminsettings()
|
|
active_login = cookie_hash(data["admin_user"], data["admin_password"])
|
|
try:
|
|
browser_cookie = app.storage.user['secret']
|
|
except:
|
|
browser_cookie = ""
|
|
|
|
# Adminseite
|
|
if browser_cookie == active_login:
|
|
pageheader("Administration")
|
|
|
|
with ui.tabs() as tabs:
|
|
admin_user = ui.tab('Admin Benutzer')
|
|
users = ui.tab('Benutzer')
|
|
settings = ui.tab('Einstellungen')
|
|
|
|
with ui.tab_panels(tabs, value=admin_user):
|
|
with ui.tab_panel(admin_user):
|
|
with ui.grid(columns=2):
|
|
ui.label("Benutzername des Adminstrators")
|
|
admin_user = ui.input()
|
|
admin_user.value = data["admin_user"]
|
|
ui.label("Passwort des Adminsistrators")
|
|
admin_password = ui.input(password=True)
|
|
admin_password.value = data["admin_password"]
|
|
with ui.tab_panel(users):
|
|
ui.markdown("###Benutzerverwaltung")
|
|
userlist = list_users()
|
|
workhours = [ ]
|
|
with ui.row():
|
|
def user_selection_changed(value):
|
|
current_user = user(value)
|
|
username_input.value = current_user.username
|
|
fullname_input.value = current_user.fullname
|
|
password_input.value = current_user.password
|
|
usersettingscard.visible = True
|
|
|
|
workhours_select.set_options(list(current_user.workhours))
|
|
workhours_select.value = list(current_user.workhours)[0]
|
|
workinghourscard.visible = True
|
|
with ui.column():
|
|
ui.select(options=userlist, with_input=True, on_change=lambda e: user_selection_changed(e.value))
|
|
ui.button("Neu")
|
|
|
|
with ui.column():
|
|
with ui.card() as usersettingscard:
|
|
ui.markdown("**Benutzereisntellungen**")
|
|
with ui.grid(columns=2):
|
|
|
|
ui.label("Benutzername:")
|
|
username_input = ui.input()
|
|
ui.label("Voller Name:")
|
|
fullname_input = ui.input()
|
|
ui.label("Passwort")
|
|
password_input = ui.input(password=True)
|
|
with ui.row():
|
|
ui.button("Speichern")
|
|
ui.button("Löschen")
|
|
|
|
with ui.card() as workinghourscard:
|
|
workhours = [ ]
|
|
ui.markdown("**Arbeitszeiten**")
|
|
with ui.grid(columns=2):
|
|
ui.markdown("gültig ab:")
|
|
workhours_select = ui.select(options=workhours)
|
|
days = [ ]
|
|
weekdays = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
|
|
counter = 0
|
|
for day in weekdays:
|
|
ui.markdown(day)
|
|
days.append(ui.input())
|
|
counter = counter + 1
|
|
ui.separator()
|
|
with ui.grid(columns=2):
|
|
ui.markdown("Urlaubstage")
|
|
vacation_input = ui.input()
|
|
with ui.row():
|
|
ui.button("Speichern")
|
|
ui.button("Löschen")
|
|
ui.button("Neu")
|
|
|
|
|
|
# Initial das Benutzerfeld unsichtbar machen
|
|
usersettingscard.visible = False
|
|
workinghourscard.visible = False
|
|
|
|
# Alternativ zur Loginseite navigieren
|
|
else:
|
|
ui.navigate.to("/login")
|
|
|
|
@ui.page('/stamping')
|
|
def page_stamping():
|
|
ui.label('Stempelsteite')
|
|
|
|
@ui.page('/touchscreen')
|
|
def page_touchscreen():
|
|
|
|
def button_click(name):
|
|
nonlocal buttons
|
|
current_user = user(name)
|
|
current_user.timestamp()
|
|
if current_user.stamp_status() == status_in:
|
|
buttons[name].props('color=green')
|
|
ui.notify(status_in)
|
|
else:
|
|
buttons[name].props('color=red')
|
|
ui.notify(status_out)
|
|
|
|
ui.markdown(f"##{app_title} {app_version}")
|
|
|
|
userlist = list_users()
|
|
number_of_users = len(userlist)
|
|
buttons = { }
|
|
|
|
if number_of_users > 5:
|
|
number_of_columns = 5
|
|
else:
|
|
number_of_columns = number_of_users
|
|
|
|
|
|
with ui.grid(columns=number_of_columns):
|
|
for name in userlist:
|
|
current_user = user(name)
|
|
current_button = ui.button(on_click=lambda name=name: button_click(name))
|
|
with current_button:
|
|
try:
|
|
with open(current_user.photofile, 'r') as file:
|
|
pass
|
|
file.close()
|
|
ui.image(current_user.photofile)
|
|
except:
|
|
pass
|
|
ui.label(current_user.fullname)
|
|
if current_user.stamp_status() == status_in:
|
|
current_button.props('color=green')
|
|
else:
|
|
current_button.props('color=red')
|
|
buttons[name] = current_button
|
|
|
|
|
|
@ui.page('/userlist')
|
|
def page_userlist():
|
|
|
|
def click_button(button):
|
|
ui.notify(button)
|
|
|
|
ui.markdown(f"#{app_title} {app_version}")
|
|
|
|
userlist = list_users()
|
|
buttons = { }
|
|
|
|
for name in userlist:
|
|
button = ui.button(text=name, on_click=lambda name=name:click_button(name) )
|
|
buttons[name] = button
|
|
|
|
ui.run(port=8090, storage_secret="test")
|
|
|
|
|