AbeerJadoon commited on
Commit
07ab4a7
·
verified ·
1 Parent(s): 85f6e6e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +110 -0
app.py ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import datetime
4
+ from PIL import Image
5
+
6
+ # Title and Description
7
+ st.title("Smart Project Tracker")
8
+ st.markdown("""
9
+ ### Features:
10
+ - **Track construction progress** with photo/video updates.
11
+ - **Monitor milestones, budgets, and deadlines.**
12
+ - **Generate automated reports.**
13
+
14
+ Ideal for project managers and clients to stay updated on construction projects.
15
+ """)
16
+
17
+ # Sidebar for Navigation
18
+ st.sidebar.title("Navigation")
19
+ page = st.sidebar.radio("Go to", ["Track Progress", "Monitor Milestones", "Generate Reports"])
20
+
21
+ # Data Containers
22
+ if "progress_data" not in st.session_state:
23
+ st.session_state.progress_data = []
24
+ if "milestones_data" not in st.session_state:
25
+ st.session_state.milestones_data = []
26
+ if "budget_data" not in st.session_state:
27
+ st.session_state.budget_data = []
28
+
29
+ # Track Progress
30
+ if page == "Track Progress":
31
+ st.header("Track Construction Progress")
32
+
33
+ # Upload Section
34
+ uploaded_file = st.file_uploader("Upload a photo or video of the site", type=["jpg", "jpeg", "png", "mp4", "mov"])
35
+ if uploaded_file:
36
+ file_type = "Video" if uploaded_file.type.startswith("video") else "Image"
37
+ date = datetime.date.today()
38
+ st.session_state.progress_data.append({"Date": date, "Type": file_type, "File": uploaded_file})
39
+ st.success("File uploaded successfully!")
40
+
41
+ # Display Progress Updates
42
+ st.subheader("Progress Updates")
43
+ for entry in st.session_state.progress_data:
44
+ st.write(f"**Date:** {entry['Date']} | **Type:** {entry['Type']}")
45
+ if entry['Type'] == "Image":
46
+ image = Image.open(entry['File'])
47
+ st.image(image, caption="Site Progress")
48
+ else:
49
+ st.video(entry['File'])
50
+
51
+ # Monitor Milestones
52
+ elif page == "Monitor Milestones":
53
+ st.header("Monitor Milestones, Budgets, and Deadlines")
54
+
55
+ # Add Milestones
56
+ st.subheader("Add a Milestone")
57
+ milestone_name = st.text_input("Milestone Name")
58
+ milestone_date = st.date_input("Deadline")
59
+ milestone_budget = st.number_input("Budget (in USD)", min_value=0.0, step=100.0)
60
+
61
+ if st.button("Add Milestone"):
62
+ if milestone_name and milestone_date:
63
+ st.session_state.milestones_data.append({
64
+ "Name": milestone_name,
65
+ "Deadline": milestone_date,
66
+ "Budget": milestone_budget
67
+ })
68
+ st.success("Milestone added successfully!")
69
+ else:
70
+ st.error("Please provide all milestone details.")
71
+
72
+ # Display Milestones
73
+ st.subheader("Upcoming Milestones")
74
+ milestones_df = pd.DataFrame(st.session_state.milestones_data)
75
+ if not milestones_df.empty:
76
+ st.table(milestones_df)
77
+ else:
78
+ st.write("No milestones added yet.")
79
+
80
+ # Generate Reports
81
+ elif page == "Generate Reports":
82
+ st.header("Generate Automated Reports")
83
+
84
+ # Generate Summary Report
85
+ if st.button("Generate Report"):
86
+ st.subheader("Project Summary Report")
87
+
88
+ # Milestone Summary
89
+ st.markdown("### Milestones")
90
+ milestones_df = pd.DataFrame(st.session_state.milestones_data)
91
+ if not milestones_df.empty:
92
+ st.table(milestones_df)
93
+ else:
94
+ st.write("No milestones available.")
95
+
96
+ # Budget Summary
97
+ total_budget = milestones_df["Budget"].sum() if not milestones_df.empty else 0
98
+ st.markdown(f"### Total Budget: ${total_budget}")
99
+
100
+ # Progress Summary
101
+ st.markdown("### Progress Updates")
102
+ for entry in st.session_state.progress_data:
103
+ st.write(f"**Date:** {entry['Date']} | **Type:** {entry['Type']}")
104
+ if entry['Type'] == "Image":
105
+ image = Image.open(entry['File'])
106
+ st.image(image, caption="Site Progress")
107
+ else:
108
+ st.video(entry['File'])
109
+
110
+ st.sidebar.info("Developed for effective project management.")