AbeerJadoon's picture
Update app.py
567844e verified
Raw
History Blame Contribute Delete
5.04 kB
import streamlit as st
import pandas as pd
import datetime
from PIL import Image
# Title and Description
st.markdown("""
<div style="text-align: center; font-family: Arial; padding: 10px; background-color: #4CAF50; color: white;">
<h1>Smart Project Tracker</h1>
<p>Keep your construction projects on track with real-time updates and insights.</p>
</div>
""", unsafe_allow_html=True)
# Sidebar for Navigation
st.sidebar.markdown("""
<div style="font-family: Arial; font-size: 16px;">
<h2>Navigation</h2>
</div>
""", unsafe_allow_html=True)
page = st.sidebar.radio("Go to", ["Track Progress", "Monitor Milestones", "Generate Reports"])
# Data Containers
if "progress_data" not in st.session_state:
st.session_state.progress_data = []
if "milestones_data" not in st.session_state:
st.session_state.milestones_data = []
if "budget_data" not in st.session_state:
st.session_state.budget_data = []
# Track Progress
if page == "Track Progress":
st.markdown("""
<div style="background-color: #f0f0f0; padding: 15px; border-radius: 5px;">
<h2>Track Construction Progress</h2>
</div>
""", unsafe_allow_html=True)
# Upload Section
uploaded_file = st.file_uploader("Upload a photo or video of the site", type=["jpg", "jpeg", "png", "mp4", "mov"])
if uploaded_file:
file_type = "Video" if uploaded_file.type.startswith("video") else "Image"
date = datetime.date.today()
st.session_state.progress_data.append({"Date": date, "Type": file_type, "File": uploaded_file})
st.success("File uploaded successfully!")
# Display Progress Updates
st.markdown("""
<div style="background-color: #e8f5e9; padding: 10px; border-radius: 5px;">
<h3>Progress Updates</h3>
</div>
""", unsafe_allow_html=True)
for entry in st.session_state.progress_data:
st.write(f"**Date:** {entry['Date']} | **Type:** {entry['Type']}")
if entry['Type'] == "Image":
image = Image.open(entry['File'])
st.image(image, caption="Site Progress")
else:
st.video(entry['File'])
# Monitor Milestones
elif page == "Monitor Milestones":
st.markdown("""
<div style="background-color: #f0f0f0; padding: 15px; border-radius: 5px;">
<h2>Monitor Milestones, Budgets, and Deadlines</h2>
</div>
""", unsafe_allow_html=True)
# Add Milestones
st.markdown("""
<div style="background-color: #e3f2fd; padding: 10px; border-radius: 5px;">
<h3>Add a Milestone</h3>
</div>
""", unsafe_allow_html=True)
milestone_name = st.text_input("Milestone Name")
milestone_date = st.date_input("Deadline")
milestone_budget = st.number_input("Budget (in PKR)", min_value=0.0, step=100.0)
if st.button("Add Milestone"):
if milestone_name and milestone_date:
st.session_state.milestones_data.append({
"Name": milestone_name,
"Deadline": milestone_date,
"Budget": milestone_budget
})
st.success("Milestone added successfully!")
else:
st.error("Please provide all milestone details.")
# Display Milestones
st.markdown("""
<div style="background-color: #fffde7; padding: 10px; border-radius: 5px;">
<h3>Upcoming Milestones</h3>
</div>
""", unsafe_allow_html=True)
milestones_df = pd.DataFrame(st.session_state.milestones_data)
if not milestones_df.empty:
st.table(milestones_df)
else:
st.write("No milestones added yet.")
# Generate Reports
elif page == "Generate Reports":
st.markdown("""
<div style="background-color: #f0f0f0; padding: 15px; border-radius: 5px;">
<h2>Generate Automated Reports</h2>
</div>
""", unsafe_allow_html=True)
# Generate Summary Report
if st.button("Generate Report"):
st.markdown("""
<div style="background-color: #e8f5e9; padding: 10px; border-radius: 5px;">
<h3>Project Summary Report</h3>
</div>
""", unsafe_allow_html=True)
# Milestone Summary
st.markdown("### Milestones")
milestones_df = pd.DataFrame(st.session_state.milestones_data)
if not milestones_df.empty:
st.table(milestones_df)
else:
st.write("No milestones available.")
# Budget Summary
total_budget = milestones_df["Budget"].sum() if not milestones_df.empty else 0
st.markdown(f"### Total Budget: PKR {total_budget}")
# Progress Summary
st.markdown("### Progress Updates")
for entry in st.session_state.progress_data:
st.write(f"**Date:** {entry['Date']} | **Type:** {entry['Type']}")
if entry['Type'] == "Image":
image = Image.open(entry['File'])
st.image(image, caption="Site Progress")
else:
st.video(entry['File'])
st.sidebar.info("Developed for effective project management.")