Spaces:
Sleeping
Sleeping
File size: 7,674 Bytes
d4a763c 8d19b68 d4a763c 8d19b68 5d428e5 8d19b68 1241160 8d19b68 1241160 8d19b68 1241160 8d19b68 1241160 8d19b68 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
import streamlit as st
import firebase_admin
from firebase_admin import credentials, firestore
# Initialize Firebase
if not firebase_admin._apps:
cred = credentials.Certificate("/app/src/firebase_key.json")
firebase_admin.initialize_app(cred)
db = firestore.client()
st.Page.title="Swiftcom DMS"
# -------------------------------
# π LOGIN SECTION
# -------------------------------
def login():
st.title("π Login")
with st.form("login_form"):
username = st.text_input("Username").strip().upper()
password = st.text_input("Password", type="password")
submitted = st.form_submit_button("Login")
if submitted:
users_ref = db.collection("users")
query = users_ref.where("name", "==", username).where("pass", "==", password).get()
if query:
user_data = query[0].to_dict()
st.session_state.logged_in = True
st.session_state.username = username
st.session_state.user_role = user_data.get("type", "Standard")
st.success(f"Welcome, {username}!")
st.rerun()
else:
st.error("Invalid credentials")
# -------------------------------
# πͺ LOGOUT FUNCTION
# -------------------------------
def logout():
for key in ["logged_in", "username", "user_role", "selected_page", "user_option", "dist_option"]:
st.session_state.pop(key, None)
st.success("Logged out successfully.")
st.rerun()
# Inject custom CSS
st.markdown("""
<style>
div.stButton > button {
width: 100%;
height: 45px;
font-size: 16px;
margin-bottom: 8px;
background-color: #31333f;
color: white;
border: none;
border-radius: 6px;
}
div.stButton > button:hover {
background-color: #505266;
}
</style>
""", unsafe_allow_html=True)
# -------------------------------
# π§ SIDEBAR NAVIGATION
# -------------------------------
def show_sidebar():
user_role = st.session_state.get("user_role")
with st.sidebar:
st.markdown(f"**π€ {st.session_state.get('username')} ({user_role})**")
st.title("π Navigation")
# All roles: Home
if st.button("π Home"):
st.session_state.selected_page = "Home"
if st.button("π Attendance"):
st.session_state.selected_page = "Attendance"
if st.button("π¦ Order"):
st.session_state.selected_page = "Order"
if st.button("π Logistics"):
st.session_state.selected_page = "Logistics"
if st.button("π οΈ Utility"):
st.session_state.selected_page = "Utility"
# Admin & Standard: Users
if user_role in ["Admin", "Back Office"]:
if st.button("π Users"):
st.session_state.selected_page = "Users"
# Admin only: Distributors
if user_role == "Admin":
if st.button("π Distributors"):
st.session_state.selected_page = "Distributors"
if st.button("βΉοΈ About"):
st.session_state.selected_page = "About"
# Logout button
if st.button("πͺ Logout"):
logout()
# -------------------------------
# π PAGE CONTENT
# -------------------------------
def home_page():
st.title("π Home Page")
st.write("Welcome to the homepage.")
# Users Management with radio options
def users_page():
user_role = st.session_state.get("user_role")
if user_role not in ["Admin", "Standard"]:
st.error("Access denied.")
return
st.title("π User Management")
# Choose form actions
options = ["View User"]
if user_role in ["Admin", "Standard"]:
options.append("Add User")
if user_role == "Admin":
options.extend(["Delete User", "Update User"])
st.divider()
user_option = st.radio("Choose action", options, horizontal=True)
st.divider()
# Add User
if user_option == "Add User":
st.subheader("Add New User")
with st.form("add_user_form"):
name = st.text_input("Name").strip().upper()
user_type = st.selectbox("Type", ["Admin", "Back Office","Standard", "Guest"])
password = st.text_input("Password", type="password")
submitted = st.form_submit_button("Submit")
if submitted:
users_ref = db.collection("users")
all_users = users_ref.stream()
max_id = 0
for doc in all_users:
data = doc.to_dict()
if isinstance(data.get("id"), int):
max_id = max(max_id, data["id"])
new_id = max_id + 1
users_ref.add({"id": new_id, "name": name, "type": user_type, "pass": password})
st.success(f"β
User '{name}' added with ID {new_id}.")
# View User
elif user_option == "View User":
st.subheader("π List of Users")
try:
docs = db.collection("users").get()
user_data = [{**doc.to_dict(), "doc_id": doc.id} for doc in docs]
if user_data:
st.dataframe(user_data)
else:
st.info("No users found.")
except Exception as e:
st.error(f"Error fetching users: {e}")
# Delete User (Admin only)
elif user_option == "Delete User":
st.subheader("ποΈ Delete User")
docs = db.collection("users").get()
usernames = [doc.to_dict().get("name") for doc in docs]
to_delete = st.selectbox("Select user to delete", usernames)
if st.button("Delete"):
# find doc
for doc in docs:
if doc.to_dict().get("name") == to_delete:
db.collection("users").document(doc.id).delete()
st.success(f"Deleted user {to_delete}.")
break
# Update User (Admin only)
elif user_option == "Update User":
st.subheader("βοΈ Update User")
docs = db.collection("users").get()
usernames = [doc.to_dict().get("name") for doc in docs]
to_update = st.selectbox("Select user to update", usernames)
new_type = st.selectbox("New Type", ["Admin", "Standard", "Guest"])
new_pass = st.text_input("New Password", type="password")
if st.button("Update"):
for doc in docs:
if doc.to_dict().get("name") == to_update:
update_data = {}
if new_type:
update_data["type"] = new_type
if new_pass:
update_data["pass"] = new_pass
db.collection("users").document(doc.id).update(update_data)
st.success(f"Updated user {to_update}.")
break
# Distributors placeholder
def distributors_page():
if st.session_state.get("user_role") != "Admin":
st.error("Access denied.")
return
st.title("π Distributor Management")
st.write("Manage distributors here.")
# -------------------------------
# π MAIN APP
# -------------------------------
def main():
if not st.session_state.get("logged_in"):
login()
return
# set default page
if "selected_page" not in st.session_state:
st.session_state.selected_page = "Home"
show_sidebar()
page = st.session_state.selected_page
if page == "Home":
home_page()
elif page == "Users":
users_page()
elif page == "Distributors":
distributors_page()
if __name__ == "__main__":
main()
|