import streamlit as st from auth_runtime import require_login # from ui.sidebar import build_sidebar 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, update_num DASH_NAME = Path(__file__).stem load_css() st.set_page_config(page_title="Co-App Benutzer", page_icon=":material/person:", layout="wide", initial_sidebar_state="collapsed") authenticator = require_login() st.session_state["authenticator"] = authenticator def sidebar(): fullname = st.session_state.get("fullname") role_text = st.session_state.get("role_text") with st.sidebar: st.logo("app/images/GMN_Logo_neu_rgb.png", size="small") st.markdown(f"**{fullname}** ({role_text})") col1, col2 = st.columns([2,2]) with col1: authenticator.logout("Logout") with col2: if st.button("Home", use_container_width=True, icon=":material/home:"): st.switch_page("pages/home.py") 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_group_id" not in st.session_state: st.session_state.selected_group_id = None #-------------------------------------------------------------------------------------------------- # Gruppenverwaltung #-------------------------------------------------------------------------------------------------- df = get_list(""" select group_id, group_text, group_description, active, order_no from groups order by order_no """) col_find_group, col_create_group, col_edit_group, col_delete_group = st.columns([3,2,2,2], vertical_alignment="bottom") with col_find_group: txt_search = st.text_input(label="Suche", label_visibility="hidden", placeholder="Gruppe", icon=":material/search:") 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_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_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["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="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 if __name__ == "__main__": sidebar()