import streamlit as st import pandas as pd import os from pathlib import Path def home_page(): """ Render the combined home and about page """ st.title("Delivery Route Optimization") st.write(""" Welcome to the Delivery Route Optimization application! This tool helps logistics teams optimize delivery routes for a fleet of vehicles while considering constraints such as delivery time windows, vehicle capacity, and traffic conditions. Use the navigation sidebar to explore different features of this application. """) # Quick stats from data at the top try: # Get data paths root_dir = Path(__file__).resolve().parent.parent.parent delivery_path = os.path.join(root_dir, 'data', 'delivery-data', 'delivery_data.csv') vehicle_path = os.path.join(root_dir, 'data', 'vehicle-data', 'vehicle_data.csv') if os.path.exists(delivery_path) and os.path.exists(vehicle_path): # Load data for stats delivery_data = pd.read_csv(delivery_path) vehicle_data = pd.read_csv(vehicle_path) # Display stats st.subheader("Current Statistics") col1, col2, col3 = st.columns(3) with col1: st.metric("Total Deliveries", len(delivery_data)) with col2: st.metric("Total Vehicles", len(vehicle_data)) with col3: pending = delivery_data[delivery_data['status'] == 'Pending'] if 'status' in delivery_data.columns else [] st.metric("Pending Deliveries", len(pending)) # Add more detailed stats in an expander with st.expander("View More Statistics"): # Status breakdown if 'status' in delivery_data.columns: st.write("#### Delivery Status Breakdown") status_counts = delivery_data['status'].value_counts().reset_index() status_counts.columns = ['Status', 'Count'] status_chart = st.bar_chart(status_counts.set_index('Status')) # Priority breakdown if 'priority' in delivery_data.columns: st.write("#### Delivery Priority Breakdown") priority_counts = delivery_data['priority'].value_counts().reset_index() priority_counts.columns = ['Priority', 'Count'] priority_chart = st.bar_chart(priority_counts.set_index('Priority')) else: st.info("Please generate data first to see statistics") st.code("python src/utils/generate_all_data.py") except Exception as e: st.info("Generate data first to see statistics") st.code("python src/utils/generate_all_data.py") # Add the image img_path = Path(__file__).resolve().parent.parent.parent / "img" / "delivery-route-network.jpg" if os.path.exists(img_path): st.image(str(img_path), caption="Delivery Route Network") # Make sure the function can be executed standalone if __name__ == "__main__": st.set_page_config(page_title="Home - Delivery Route Optimization", page_icon="🚚", layout="wide") home_page()