Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import sqlite3 | |
| # Establish database connection (create if it doesn't exist) | |
| conn = sqlite3.connect('dispatch_data.db') | |
| cursor = conn.cursor() | |
| # Create tables if they don't exist | |
| cursor.execute(''' | |
| CREATE TABLE IF NOT EXISTS drivers ( | |
| driver_id TEXT PRIMARY KEY, | |
| name TEXT, | |
| location TEXT, | |
| status TEXT | |
| ) | |
| ''') | |
| cursor.execute(''' | |
| CREATE TABLE IF NOT EXISTS orders ( | |
| order_id TEXT PRIMARY KEY, | |
| pickup_location TEXT, | |
| dropoff_location TEXT, | |
| status TEXT | |
| ) | |
| ''') | |
| cursor.execute(''' | |
| CREATE TABLE IF NOT EXISTS zone_pressure ( | |
| zone_id TEXT PRIMARY KEY, | |
| pressure_level INTEGER | |
| ) | |
| ''') | |
| cursor.execute(''' | |
| CREATE TABLE IF NOT EXISTS analytics ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| performance_indicators TEXT, | |
| driver_trips TEXT, | |
| delivery_times TEXT, | |
| delivery_delay TEXT, | |
| customer_satisfaction TEXT | |
| ) | |
| ''') | |
| # Functions to interact with the database | |
| def fetch_data(table_name): | |
| cursor.execute(f"SELECT * FROM {table_name}") | |
| data = cursor.fetchall() | |
| columns = [description[0] for description in cursor.description] | |
| return pd.DataFrame(data, columns=columns) | |
| def insert_data(table_name, data): | |
| columns = ', '.join(data.keys()) | |
| placeholders = ', '.join(['?'] * len(data)) | |
| query = f"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})" | |
| cursor.execute(query, tuple(data.values())) | |
| conn.commit() | |
| # DataFrames to store information | |
| drivers = pd.DataFrame(columns=["driver_id", "name", "location", "status"]) | |
| orders = pd.DataFrame(columns=["order_id", "order_time", "pickup_location", "dropoff_location", "status"]) | |
| zone_pressure = pd.DataFrame(columns=['zone_id', 'pressure_level']) | |
| analytics = pd.DataFrame(columns=['performance_indicators', 'driver_trips', 'delivery_times', 'delivery_delay', 'customer_satisfaction']) | |
| # Basic UI structure | |
| st.title("Dispatch Call Scheduler") | |
| # Sidebar for navigation and actions | |
| with st.sidebar: | |
| st.header("Navigation") | |
| selected_page = st.radio("Go to", ["Order Management", "Driver Management", "Zone Pressure", "Analytics"]) | |
| st.header("Actions") | |
| if st.button("Schedule Dispatch"): | |
| # Logic to schedule a dispatch based on current data | |
| st.write("Dispatch scheduled!") | |
| # Order Management page | |
| if selected_page == "Order Management": | |
| st.subheader("Order Management") | |
| # Add new order | |
| with st.form("add_order_form"): | |
| st.write("Add New Order") | |
| order_id = st.text_input("Order ID") | |
| order_time = st.text_input("Order Time") | |
| pickup_location = st.text_input("Pickup Location") | |
| dropoff_location = st.text_input("Dropoff Location") | |
| status = st.selectbox("Status", ["Pending", "In Progress", "Completed"]) | |
| submitted = st.form_submit_button("Add Order") | |
| if submitted: | |
| new_order = pd.DataFrame({ | |
| 'order_id': [order_id], | |
| 'order_time': [order_time], | |
| 'pickup_location': [pickup_location], | |
| 'dropoff_location': [dropoff_location], | |
| 'status': [status] | |
| }) | |
| orders = pd.concat([orders, new_order], ignore_index=True) | |
| # Insert into the database | |
| insert_data('orders', new_order.to_dict(orient='records')[0]) | |
| # Re-fetch data to reflect the changes | |
| orders = fetch_data('orders') | |
| # Display order list | |
| st.write(orders) | |
| # Driver Management page | |
| elif selected_page == "Driver Management": | |
| st.subheader("Driver Management") | |
| # Add new driver | |
| with st.form("add_driver_form"): | |
| st.write("Add New Driver") | |
| driver_id = st.text_input("Driver ID") | |
| name = st.text_input("Name") | |
| location = st.text_input("Location") | |
| status = st.selectbox("Status", ["Available", "Unavailable"]) | |
| submitted = st.form_submit_button("Add Driver") | |
| if submitted: | |
| new_driver = pd.DataFrame({ | |
| 'driver_id': [driver_id], | |
| 'name': [name], | |
| 'location': [location], | |
| 'status': [status] | |
| }) | |
| drivers = pd.concat([drivers, new_driver], ignore_index=True) | |
| # Insert into the database | |
| insert_data('drivers', new_driver.to_dict(orient='records')[0]) | |
| # Re-fetch data to reflect the changes | |
| drivers = fetch_data('drivers') | |
| # Display driver list | |
| st.write(drivers) | |
| # Zone Monitoring page | |
| elif selected_page == "Zone Pressure": | |
| st.subheader("Dynamic Zone Pressure Monitoring") | |
| # Add new zone pressure data | |
| with st.form("add_zone_pressure_form"): | |
| st.write("Add Zone Pressure Data") | |
| zone_id = st.text_input("Zone ID") | |
| pressure_level = st.number_input("Pressure Level", min_value=0, max_value=10, value=0) | |
| submitted = st.form_submit_button("Add Zone Data") | |
| if submitted: | |
| new_zone_data = pd.DataFrame({ | |
| 'zone_id': [zone_id], | |
| 'pressure_level': [pressure_level] | |
| }) | |
| zone_pressure = pd.concat([zone_pressure, new_zone_data], ignore_index=True) | |
| # Insert into the database | |
| insert_data('zone_pressure', new_zone_data.to_dict(orient='records')[0]) | |
| # Re-fetch data to reflect the changes | |
| zone_pressure = fetch_data('zone_pressure') | |
| # Display zone pressure data | |
| st.write(zone_pressure) | |
| # Analytics Dashboard page | |
| elif selected_page == "Analytics": | |
| st.subheader("Analytics Dashboard") | |
| # Add analytics information (consider using a more structured input method) | |
| with st.form("add_analytics_form"): | |
| st.write("Add Analytics Information") | |
| performance_indicators = st.text_input("Performance Indicators") | |
| driver_trips = st.text_input("Driver Trips") | |
| delivery_times = st.text_input("Delivery Times") | |
| delivery_delay = st.text_input("Delivery Delay") | |
| customer_satisfaction = st.text_input("Customer Satisfaction") | |
| submitted = st.form_submit_button("Add Analytics Data") | |
| if submitted: | |
| new_analytics_data = pd.DataFrame({ | |
| 'performance_indicators': [performance_indicators], | |
| 'driver_trips': [driver_trips], | |
| 'delivery_times': [delivery_times], | |
| 'delivery_delay': [delivery_delay], | |
| 'customer_satisfaction': [customer_satisfaction] | |
| }) | |
| analytics = pd.concat([analytics, new_analytics_data], ignore_index=True) | |
| # Insert into the database | |
| insert_data('analytics', new_analytics_data.to_dict(orient='records')[0]) | |
| # Re-fetch data to reflect the changes | |
| analytics = fetch_data('analytics') | |
| # Display analytics information | |
| st.write(analytics) | |
| # Fetch initial data from the database | |
| drivers = fetch_data('drivers') | |
| orders = fetch_data('orders') | |
| zone_pressure = fetch_data('zone_pressure') | |
| analytics = fetch_data('analytics') | |
| # Close the database connection when the app is done | |
| st.session_state.on_session_end = conn.close |