diff --git a/app/app_db/app.db b/app/app_db/app.db index 6f83a88..4a6825a 100644 Binary files a/app/app_db/app.db and b/app/app_db/app.db differ diff --git a/app/pages/groups.py b/app/pages/groups.py index b0ff837..5ef6ad0 100644 --- a/app/pages/groups.py +++ b/app/pages/groups.py @@ -4,7 +4,7 @@ from auth_runtime import require_login from pathlib import Path from tools.load_css import load_css from app_db.app_db import get_list, send_cmd -from tools.numgen import get_num +from tools.numgen import get_num, update_num DASH_NAME = Path(__file__).stem @@ -36,87 +36,173 @@ def sidebar(): groups() +#------------------------------------------------------------------------------------- +# Dialog Gruppe anlegen +#------------------------------------------------------------------------------------- + +@st.dialog("Gruppe anlegen") +def dialog_create_group(group_id): + txt_group_id = st.text_input("GrpId", value=group_id, disabled=True) + txt_group_text = st.text_input("Gruppenbezeichnung") + txt_description = st.text_area("Beschreibung") + txt_order_no = st.text_input("Reihenfolge") + if st.button("Save"): + if send_cmd(f"insert into groups (group_id, group_text, group_description, order_no) " \ + "values (?, ?, ?, ?)",(txt_group_id, txt_group_text, txt_description, txt_order_no)): + st.session_state.save_msg = f"✅ Gruppe '{txt_group_text}' erfolgreich gespeichert" + update_num(group_id,1,"numgen_group") + else: + st.session_state.save_msg = "❌ Fehler beim Speichern" + st.rerun() + +#------------------------------------------------------------------------------------- +# Dialog Gruppe bearbeiten +#------------------------------------------------------------------------------------- + +@st.dialog("Benutzer bearbeiten") +def dialog_edit_group(group_id): + if group_id == None: + st.write("keine Gruppe ausgewählt") + else: + sql = """ + select + group_id, + group_text, + group_description, + active, + order_no + from + groups + where + group_id = ? + order by + order_no + """ + df = get_list(sql,(group_id,)) + + + col1, col2 = st.columns([2,1],vertical_alignment="center") + with col1: + txt_group_text = st.text_input(label="Gruppenbezeichnung", value=df.iloc[0]["group_text"]) + with col2: + is_active = st.checkbox(label="Aktiv", value=df.iloc[0]["active"]) + txt_group_description = st.text_area(label="Beschreibung", value=df.iloc[0]["group_description"]) + txt_oder_no = st.text_input(label="Reihenfolge", value=df.iloc[0]["order_no"]) + + if st.button("Save"): + sql = """ + update groups set + group_text = ?, + active = ?, + group_description = ?, + order_no = ? + where group_id = ? + """ + params = (txt_group_text, is_active, txt_group_description, txt_oder_no, group_id) + + if send_cmd(sql, params): + st.session_state.save_msg = f"✅ Gruppe '{txt_group_text}' erfolgreich geändert" + else: + st.session_state.save_msg = "❌ Fehler beim Speichern" + st.rerun() + + +#------------------------------------------------------------------------------------- +# Dialog Gruppe löschen +#------------------------------------------------------------------------------------- + +@st.dialog("Gruppe löschen") +def dialog_delete_group(group_id): + if id == None: + st.write("keine Gruppe ausgewählt") + else: + df = get_list("select group_text from groups where group_id = ?",(group_id,)) + group_text = df.iloc[0]["group_text"] + st.write(f"Die Gruppe {group_text} wird gelöscht! Sind Sie sicher?") + if st.button("Löschen"): + if send_cmd("delete from groups where group_id = ?",(group_id,)): + st.session_state.delete_msg = f"✅ Gruppe '{group_text}' erfolgreich gelöscht!" + else: + st.session_state.delete_msg = f"❌ Gruppe '{group_text}' konnte nicht gelöscht werden!" + st.rerun() + + def groups(): - if "selected_user_id" not in st.session_state: - st.session_state.selected_user_id = None - if st.button(label="test"): - st.info(get_num("numgen_group", step=10)) + if "selected_group_id" not in st.session_state: + st.session_state.selected_group_id = None + + #-------------------------------------------------------------------------------------------------- # Rollenverwaltung #-------------------------------------------------------------------------------------------------- - - # df = get_list(""" - # select - # u.id, - # u.username, - # u.firstname, - # u.lastname, - # u.role_id || ' | ' || r.role_text as role, - # u.new_pwd, - # u.active - # from - # users u - # left join roles r - # on u.role_id = r.role_id - # """) + df = get_list(""" + select + group_id, + group_text, + group_description, + active, + order_no + from + groups + order by + order_no + """) - # col_find_role, col_create_role, col_modify_role, col_delete_role = st.columns([3,2,2,2], vertical_alignment="bottom") + col_find_group, col_create_group, col_edit_group, col_delete_group = st.columns([3,2,2,2], vertical_alignment="bottom") - # with col_find_role: - # txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Benutzer, Vorname, ...", icon=":material/search:") + with col_find_group: + txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Gruppe", icon=":material/search:") - # with col_create_user: - # if st.button(label="Benutzer anlegen", use_container_width=True, icon=":material/person_add:"): - # dialog_create_user() - # if "save_msg" in st.session_state: - # st.toast(st.session_state.save_msg) - # del st.session_state.save_msg + with col_create_group: + if st.button(label="Gruppe anlegen", use_container_width=True, icon=":material/add:"): + dialog_create_group(get_num("numgen_group")) + if "save_msg" in st.session_state: + st.toast(st.session_state.save_msg) + del st.session_state.save_msg - # with col_modify_user: - # if st.button(label="Benutzer bearbeiten", use_container_width=True, icon=":material/person:"): - # if not st.session_state.selected_user_id is None: - # dialog_modify_user(st.session_state.selected_user_id) - # else: - # st.toast("❌ Bitte erst eine Zeile auswählen") - # if "save_msg" in st.session_state: - # st.toast(st.session_state.save_msg) - # del st.session_state.save_msg + with col_edit_group: + if st.button(label="Gruppe bearbeiten", use_container_width=True, icon=":material/edit:"): + if not st.session_state.selected_group_id is None: + dialog_edit_group(st.session_state.selected_group_id) + else: + st.toast("❌ Bitte erst eine Zeile auswählen") + if "save_msg" in st.session_state: + st.toast(st.session_state.save_msg) + del st.session_state.save_msg - # with col_delete_user: - # if st.button(label="Benutzer löschen", use_container_width=True, icon=":material/person_remove:"): - # if not st.session_state.selected_user_id is None: - # dialog_delete_user(st.session_state.selected_user_id) - # else: - # st.toast("❌ Bitte erst eine Zeile auswählen") - # if "delete_msg" in st.session_state: - # st.toast(st.session_state.delete_msg) - # del st.session_state.delete_msg + with col_delete_group: + if st.button(label="Gruppe löschen", use_container_width=True, icon=":material/delete:"): + if not st.session_state.selected_group_id is None: + dialog_delete_group(st.session_state.selected_group_id) + else: + st.toast("❌ Bitte erst eine Zeile auswählen") + if "delete_msg" in st.session_state: + st.toast(st.session_state.delete_msg) + del st.session_state.delete_msg - # if txt_search.strip(): - # txt_search_norm = txt_search.strip().lower() - # mask = ( - # df["username"].fillna("").str.lower().str.contains(txt_search_norm) - # | df["firstname"].fillna("").str.lower().str.contains(txt_search_norm) - # | df["lastname"].fillna("").str.lower().str.contains(txt_search_norm) - # ) - # df_view = df.loc[mask].copy() - # else: - # df_view = df.copy() + if txt_search.strip(): + txt_search_norm = txt_search.strip().lower() + mask = ( + df["group_text"].fillna("").str.lower().str.contains(txt_search_norm) + ) + df_view = df.loc[mask].copy() + else: + df_view = df.copy() - # event = st.dataframe(df_view,key="data", on_select="rerun", selection_mode="single-row") - # rows = event.selection.rows - # if rows: - # row_idx = rows[0] - # st.session_state.selected_user_id = int(df_view.iloc[row_idx]["id"]) - # else: - # st.session_state.selected_user_id = None + event = st.dataframe(df_view, key="group_data", on_select="rerun", selection_mode="single-row", height="auto") + rows = event.selection.rows + if rows: + row_idx = rows[0] + st.session_state.selected_group_id = int(df_view.iloc[row_idx]["group_id"]) + else: + st.session_state.selected_group_id = None diff --git a/app/pages/user.py b/app/pages/user.py index 9d9379c..2cde1d1 100644 --- a/app/pages/user.py +++ b/app/pages/user.py @@ -84,7 +84,7 @@ def dialog_delete_user(id): @st.dialog("Benutzer bearbeiten") -def dialog_modify_user(id): +def dialog_edit_user(id): if id == None: st.write("kein Benutzer ausgewählt") else: @@ -206,7 +206,7 @@ def user(): - col_find_user, col_create_user, col_modify_user, col_delete_user = st.columns([3,2,2,2], vertical_alignment="bottom") + col_find_user, col_create_user, col_edit_user, col_delete_user = st.columns([3,2,2,2], vertical_alignment="bottom") with col_find_user: txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Benutzer, Vorname, ...", icon=":material/search:") @@ -218,10 +218,10 @@ def user(): st.toast(st.session_state.save_msg) del st.session_state.save_msg - with col_modify_user: - if st.button(label="Benutzer bearbeiten", use_container_width=True, icon=":material/person:"): + with col_edit_user: + if st.button(label="Benutzer bearbeiten", use_container_width=True, icon=":material/person_edit:"): if not st.session_state.selected_user_id is None: - dialog_modify_user(st.session_state.selected_user_id) + dialog_edit_user(st.session_state.selected_user_id) else: st.toast("❌ Bitte erst eine Zeile auswählen") if "save_msg" in st.session_state: diff --git a/app/tools/numgen.py b/app/tools/numgen.py index 2dc53de..c0d28ca 100644 --- a/app/tools/numgen.py +++ b/app/tools/numgen.py @@ -5,13 +5,14 @@ import os APP_ENV = os.environ.get("APP_ENV", "dev") logger = setup_logging(APP_ENV) -def get_num(numgen, step=10): +def get_num(numgen): num = get_value(f"select param_value from param where parameter = '{numgen}'") - print(int(num) + step) - update_num(num, 10, numgen) + #print(int(num) + step) + # update_num(num, step, numgen) return num def update_num(num, step, numgen): + print(num,step,numgen) try: send_cmd(f"update param set param_value = {int(num) + step} where parameter = '{numgen}'") return True