import streamlit as st
import pandas as pd
import time
import requests
import os
# Set page configuration (must be the first Streamlit command)
st.set_page_config(page_title="Ticket System", layout="centered", initial_sidebar_state="expanded")
# Apply custom CSS for design
st.markdown(
"""
""",
unsafe_allow_html=True
)
# Sample user data for login
users = {
"manager123": {"password": "managerpass", "role": "Manager"},
"employee456": {"password": "employeepass", "role": "Employee"},
"customer789": {"password": "customerpass", "role": "Customer"},
}
def login_page():
# Add custom styling and an image at the top
customize_login_page()
st.markdown(
"""
Login Page
""",
unsafe_allow_html=True
)
username = st.text_input("Username")
password = st.text_input("Password", type="password")
# Check login state
if "login_success" not in st.session_state:
st.session_state["login_success"] = False
st.markdown(
"""
""",
unsafe_allow_html=True,
)
if st.button("Login"):
if username in users and users[username]["password"] == password:
st.session_state["user_type"] = users[username]["role"]
st.session_state["logged_in"] = True
st.session_state["login_success"] = True
st.success(f"Logged in successfully as {users[username]['role']}")
# Navigate to the appropriate page based on the user's role
if users[username]["role"] == "Customer":
st.session_state["page"] = "Submit Ticket"
elif users[username]["role"] == "Manager":
st.session_state["page"] = "Management Dashboard"
elif users[username]["role"] == "Employee":
st.session_state["page"] = "Respond to a Ticket"
else:
st.error("Invalid username or password.")
if st.button("Forget Password"):
st.session_state["page"] = "Forget Password"
def navigate_to_page(page_name):
st.session_state["current_page"] = page_name # Update the page in session state
def get_current_page():
return st.session_state.get("current_page", "Login") # Default to "Login"
def forget_password_page():
# Page title and instructions
st.markdown('Forget Password
', unsafe_allow_html=True)
st.markdown('Enter your username or email to reset your password.
', unsafe_allow_html=True)
# Input field for username or email
username_or_email = st.text_input("Username or Email")
# Custom button styling
st.markdown(
"""
""",
unsafe_allow_html=True,
)
# Reset Password button
if st.button("Reset Password"):
if username_or_email.strip():
st.success(f"Password reset link has been sent to {username_or_email}.")
else:
st.error("Please enter a valid username or email.")
# Back to Login button
if st.button("Back to Login"):
st.session_state["page"] = "Login" # Navigate back to Login
def add_return_to_login():
if "logged_in" in st.session_state and st.session_state["logged_in"]:
# Add custom styling for the Back button
st.markdown(
"""
""",
unsafe_allow_html=True,
)
# Functional and visually styled "Back" button
if st.sidebar.button("Back"):
# Reset the 'logged_in' state and force a redirect to the login page
st.session_state["logged_in"] = False; st.session_state["login_success"] = False; st.session_state["page"] = "Login"
hide_sidebar()
def hide_sidebar():
st.markdown(
"""
""",
unsafe_allow_html=True,
)
def main():
if "page" not in st.session_state:
st.session_state["page"] = "Login" # Default to the Login page
add_return_to_login()
# Show the navigation menu only if not on Login or Forget Password pages
if st.session_state["page"] not in ["Login", "Forget Password"]:
st.sidebar.title("Navigation")
user_type = st.session_state.get("user_type", "Customer")
if user_type == "Customer":
page = st.sidebar.radio("Go to", ["Submit Ticket", "Check Ticket Status", "FAQ & Info"])
elif user_type == "Manager":
page = st.sidebar.radio("Go to", ["Management Dashboard", "Ticket Dashboard", "Customer Dashboard"])
elif user_type == "Employee":
page = st.sidebar.radio("Go to", ["Respond to a Ticket", "Ticket Status"])
else:
st.sidebar.write("No pages available for this user type.")
return
st.session_state["page"] = page # Update the page state based on navigation
# Render the appropriate page
if st.session_state["page"] == "Login":
login_page()
elif st.session_state["page"] == "Forget Password":
forget_password_page()
elif st.session_state["page"] == "Submit Ticket":
submit_ticket_page()
elif st.session_state["page"] == "Check Ticket Status":
check_ticket_status_page()
elif st.session_state["page"] == "FAQ & Info":
faq_info_page()
elif st.session_state["page"] == "Management Dashboard":
management_dashboard_page()
elif st.session_state["page"] == "Ticket Dashboard":
ticket_dashboard_page()
elif st.session_state["page"] == "Customer Dashboard":
customer_dashboard_page()
elif st.session_state["page"] == "Respond to a Ticket":
respond_to_ticket_page()
elif st.session_state["page"] == "Ticket Status":
employee_ticket_status_page()
def center_logo():
# Create three columns
col1, col2, col3 = st.columns([1, 2, 1]) # Adjust column width ratios
with col1:
st.empty() # Empty content in the first column
with col2:
st.image("/Users/klnimri/Desktop/Newtest/Test/bin/logo.png", width=300, use_container_width=True)
with col3:
st.empty()
def submit_ticket_page():
center_logo()
vspace()
vspace()
vspace()
vspace()
vspace()
vspace()
st.markdown('Submit a Ticket
', unsafe_allow_html=True)
st.markdown('Please fill out the form below to submit a ticket.
', unsafe_allow_html=True)
# Form for submitting a ticket
with st.form(key="submit_ticket_form"):
customer_id = st.text_input("Customer ID")
st.text_input("First Name")
st.text_input("Last Name")
st.text_input("National ID / Residency Number")
st.text_input("Email")
st.text_input("Phone Number")
st.selectbox("Ticket Type", ["General", "Billing", "Technical"])
st.text_area("Describe your issue/request")
st.file_uploader("Upload Attachments (if any)", accept_multiple_files=True)
# Add custom styling for the Submit button
st.markdown(
"""
""",
unsafe_allow_html=True,
)
# Submit button logic
if st.form_submit_button("Submit"):
if customer_id.strip():
st.success(f"Your ticket has been submitted successfully. Customer ID: {customer_id}")
else:
st.error("Please fill out the Customer ID.")
def check_ticket_status_page():
center_logo()
vspace()
vspace()
vspace()
vspace()
vspace()
vspace()
vspace()
vspace()
st.markdown('Check Ticket Status
', unsafe_allow_html=True)
st.markdown('Enter your Customer ID to view your tickets.
', unsafe_allow_html=True)
# Input field for Customer ID
customer_id = st.text_input("Customer ID")
# Check ticket status submission state
if "customer_check_status_success" not in st.session_state:
st.session_state["customer_check_status_success"] = False
# Add custom styling for the Check Status button
st.markdown(
"""
""",
unsafe_allow_html=True,
)
# Functional and visually styled "Check Status" button
if st.button("Check Status"):
if customer_id.strip():
st.session_state["customer_check_status_success"] = True
st.success(f"Displaying tickets for Customer ID: {customer_id}")
# Example ticket data
ticket_data = {
"Ticket Number": ["141", "565", "999"],
"Date": ["2025-01-18", "2025-03-28", "2025-04-01"],
"Type": ["General", "Billing", "Technical"],
"Status": ["Resolved", "Pending", "In Progress"],
}
df = pd.DataFrame(ticket_data)
st.dataframe(df)
else:
st.error("Please enter your Customer ID.")
def faq_info_page():
center_logo()
vspace()
vspace()
vspace()
vspace()
st.markdown('FAQ & Information
', unsafe_allow_html=True)
faq_data = [
("How to open a new account?", "Visit your nearest branch with your ID or use our app for easy online account opening."),
("Branch Operating Hours", "Sunday to Thursday, 9:00 AM to 4:00 PM. Please check your nearest branch for details."),
("Update Personal Information", "You can update your information at a branch or through our app under 'Update Data'."),
("Technical Support", "Ensure your app is updated and your device is connected to the internet. If issues persist, contact our support.")
]
for question, answer in faq_data:
st.markdown(f'{question}
', unsafe_allow_html=True)
st.markdown(f'{answer}
', unsafe_allow_html=True)
def respond_to_ticket_page():
# Add logo and title
center_logo()
vspace()
vspace()
vspace()
vspace()
st.markdown('Respond to a Ticket
', unsafe_allow_html=True)
# Display ticket data
ticket_data = {
"Ticket Number": ["141", "565", "999"],
"Customer ID": ["C001", "C002", "C003"],
"Date": ["2025-01-18", "2025-03-28", "2025-04-01"],
"Type": ["General", "Billing", "Technical"],
"Status": ["Pending", "Pending", "In Progress"],
"Customer Name": ["Alice", "Bob", "Charlie"],
}
df = pd.DataFrame(ticket_data)
st.dataframe(df)
# Dropdown to select a ticket
ticket_to_respond = st.selectbox("Select a ticket to respond to:", df["Ticket Number"].tolist())
# Text area for response
response_text = st.text_area("Response:", placeholder="Write your response here...")
# Check response submission state
if "response_success" not in st.session_state:
st.session_state["response_success"] = False
# Add custom styling for the button
st.markdown(
"""
""",
unsafe_allow_html=True,
)
# Functional and visually styled "Respond to Ticket" button
if st.button("Respond to Ticket"):
if response_text.strip():
st.session_state["response_success"] = True
st.success(f"Response for Ticket {ticket_to_respond} submitted successfully!")
else:
st.error("Please write a response before submitting.")
def employee_ticket_status_page():
# Add logo and title
center_logo()
vspace()
vspace()
vspace()
vspace()
st.markdown('Ticket Status
', unsafe_allow_html=True)
# Input field for Customer ID
customer_id = st.text_input("Customer ID")
# Check ticket status submission state
if "employee_ticket_status_success" not in st.session_state:
st.session_state["employee_ticket_status_success"] = False
# Add custom styling for the "Check Ticket Status" button
st.markdown(
"""
""",
unsafe_allow_html=True,
)
# Functional and visually styled "Check Ticket Status" button
if st.button("Check Ticket Status"):
if customer_id.strip():
st.session_state["employee_ticket_status_success"] = True
st.success(f"Displaying tickets for Customer ID: {customer_id}")
# Example ticket data
ticket_data = {
"Ticket Number": ["141", "565", "999"],
"Status": ["Resolved", "Pending", "In Progress"],
}
df = pd.DataFrame(ticket_data)
st.dataframe(df)
else:
st.error("Please enter your Customer ID.")
def ticket_dashboard_page():
center_logo()
vspace()
vspace()
vspace()
vspace()
st.markdown('Ticket Dashboard
', unsafe_allow_html=True)
st.components.v1.iframe(
"https://app.powerbi.com/view?r=eyJrIjoiMDEwNzA2YjUtNGY0MC00NTFjLTg1ZTctYTZlZjQzOTUwNWUxIiwidCI6ImI0NTNkOTFiLTZhYzEtNGI2MS1iOGI4LTVlNjVlNDIyMjMzZiIsImMiOjl9",
height=700,
width=1000,
scrolling=True
)
def customer_dashboard_page():
center_logo()
vspace()
vspace()
vspace()
vspace()
st.markdown('Customer Dashboard
', unsafe_allow_html=True)
customer_data = {
"Customer ID": ["C001", "C002", "C003"],
"Tickets Submitted": [5, 3, 8],
"Resolved": [4, 2, 7],
}
df = pd.DataFrame(customer_data)
st.dataframe(df)
st.components.v1.iframe(
"https://app.powerbi.com/view?r=eyJrIjoiY2Q0ODE1NGItOThjMy00MzM4LWE2OGUtMjRkNmUzYmZlMDk3IiwidCI6ImI0NTNkOTFiLTZhYzEtNGI2MS1iOGI4LTVlNjVlNDIyMjMzZiIsImMiOjl9",
height=600,
width=800,
scrolling=True
)
def management_dashboard_page():
center_logo()
vspace()
vspace()
vspace()
vspace()
#center_logo("logo.png") # Center the logo
st.markdown('Management Dashboard
', unsafe_allow_html=True)
# Define employee data
employee_data = {
"Employee ID": ["E001", "E002", "E003"],
"Name": ["John Doe", "Jane Smith", "Ali Ahmad"],
"Performance Score": [85, 90, 88],
}
df_employee = pd.DataFrame(employee_data)
# Display the employee data table
st.dataframe(df_employee)
# Add the Power BI dashboard iframe
st.components.v1.iframe(
"https://app.powerbi.com/view?r=eyJrIjoiMzQ5N2RlMDQtY2I5ZC00NWE5LWE0ZjItMjExMzgyNmNmZWFjIiwidCI6ImI0NTNkOTFiLTZhYzEtNGI2MS1iOGI4LTVlNjVlNDIyMjMzZiIsImMiOjl9",
height=800,
width=1000,
scrolling=True
)
def customize_navigation_menu_dark_green():
st.markdown(
"""
""",
unsafe_allow_html=True
)
def customize_login_page():
# Add custom CSS for styling
st.markdown(
"""
""",
unsafe_allow_html=True,
)
# Use st.markdown to create a centered container for the image
st.markdown('', unsafe_allow_html=True)
# Display the image in the center
center_logo()
vspace()
vspace()
vspace()
vspace()
def vspace():
st.empty()
st.text("")
def customize_submit_button():
st.markdown(
"""
""",
unsafe_allow_html=True
)
if __name__ == "__main__":
customize_navigation_menu_dark_green()
main()