75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
import streamlit as st
|
|
import time
|
|
from backend.db import DB, Session
|
|
from backend.his_io import prepare_table, read_excel
|
|
|
|
|
|
def session_ui(db: DB, session: Session | None) -> Session | None:
|
|
|
|
with st.sidebar:
|
|
st.title(":blue[Noteneingabetool]")
|
|
|
|
st.header("Session :blue[wiederherstellen]", divider='gray')
|
|
|
|
# DEBUG (select session)
|
|
selected_session = st.selectbox(":red[DEBUG] Session auswählen", db.list_tokens(), index=None, key='session_select',
|
|
format_func=lambda token: f'{token} - {db.get_session(token).table_name}' )
|
|
|
|
if selected_session:
|
|
token = selected_session
|
|
else:
|
|
token = st.text_input("Session Token", value=session.token if session else '', key='token_input')
|
|
|
|
if token:
|
|
if not session or token != session.token:
|
|
try:
|
|
session = db.get_session(token)
|
|
st.success("Session gefunden")
|
|
except ValueError:
|
|
st.error("Session nicht gefunden")
|
|
session = None
|
|
else:
|
|
session = None
|
|
|
|
|
|
st.header(":blue Session :blue[verwalten]", divider='gray')
|
|
if st.button("Neue Session"):
|
|
new_session_dialog(db)
|
|
if st.button("Lösche Session", disabled=session is None):
|
|
delete_session_dialog(db, session)
|
|
|
|
return session
|
|
|
|
|
|
@st.dialog("Neue Session anlegen")
|
|
def new_session_dialog(db: DB):
|
|
upload_file = st.file_uploader("HISinOne Excel Datei hochladen", type=['xlsx'], key='file_uploader')
|
|
|
|
if upload_file:
|
|
session = create_new_session(db, upload_file)
|
|
db.save_session(session)
|
|
st.write(":green[Session erstellt.]")
|
|
st.write('Nicht vergessen, den :blue[Token] zu notieren:')
|
|
st.code(session.token)
|
|
|
|
|
|
@st.dialog("Session löschen")
|
|
def delete_session_dialog(db: DB, session: Session):
|
|
st.warning("Sind Sie sicher, dass Sie die Session löschen möchten?")
|
|
if st.button(":exclamation: Session löschen :exclamation:"):
|
|
db.delete_session(session)
|
|
del st.session_state.session
|
|
st.success("Session gelöscht")
|
|
st.rerun()
|
|
|
|
|
|
def create_new_session(db, upload_file) -> Session:
|
|
new_session = db.create_session()
|
|
students_df, his_header = read_excel(upload_file)
|
|
points_df = prepare_table(students_df)
|
|
|
|
new_session.students_df = students_df
|
|
new_session.his_header = his_header
|
|
new_session.points_df = points_df
|
|
new_session.table_name = upload_file.name
|
|
return new_session |