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()