Naruto9's picture
Update app.py
44836ef verified
raw
history blame
7.21 kB
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