Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,6 +2,7 @@ import streamlit as st
|
|
| 2 |
import pandas as pd
|
| 3 |
import plotly.figure_factory as ff
|
| 4 |
import random
|
|
|
|
| 5 |
|
| 6 |
def generate_random_color():
|
| 7 |
r = random.randint(0, 255)
|
|
@@ -12,7 +13,7 @@ def generate_random_color():
|
|
| 12 |
st.title("Project Schedule/Gantt Chart Generator")
|
| 13 |
|
| 14 |
project_name = st.text_input("Project Name:")
|
| 15 |
-
|
| 16 |
num_activities = st.number_input("Number of Activities (5-20):", min_value=5, max_value=20, value=5)
|
| 17 |
|
| 18 |
activities = []
|
|
@@ -21,8 +22,8 @@ for i in range(num_activities):
|
|
| 21 |
with col1:
|
| 22 |
activity_name = st.text_input(f"Activity {i+1} Name:", key=f"name_{i}")
|
| 23 |
with col2:
|
| 24 |
-
activity_duration = st.number_input(f"Activity {i+1} Duration (days):", min_value=1,
|
| 25 |
-
activities.append({"Task": activity_name, "
|
| 26 |
|
| 27 |
if st.button("Create Gantt Chart"):
|
| 28 |
if not project_name:
|
|
@@ -31,12 +32,19 @@ if st.button("Create Gantt Chart"):
|
|
| 31 |
st.error("Please enter names for all activities.")
|
| 32 |
else:
|
| 33 |
df = pd.DataFrame(activities)
|
| 34 |
-
|
|
|
|
| 35 |
for i in range(len(df)):
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
df.loc[i,
|
| 39 |
|
| 40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
fig.update_layout(title_text=f"Gantt Chart for: {project_name}", title_x=0.5)
|
|
|
|
|
|
|
| 42 |
st.plotly_chart(fig, use_container_width=True)
|
|
|
|
| 2 |
import pandas as pd
|
| 3 |
import plotly.figure_factory as ff
|
| 4 |
import random
|
| 5 |
+
from datetime import datetime, timedelta
|
| 6 |
|
| 7 |
def generate_random_color():
|
| 8 |
r = random.randint(0, 255)
|
|
|
|
| 13 |
st.title("Project Schedule/Gantt Chart Generator")
|
| 14 |
|
| 15 |
project_name = st.text_input("Project Name:")
|
| 16 |
+
start_date = st.date_input("Project Start Date:", value=datetime.today())
|
| 17 |
num_activities = st.number_input("Number of Activities (5-20):", min_value=5, max_value=20, value=5)
|
| 18 |
|
| 19 |
activities = []
|
|
|
|
| 22 |
with col1:
|
| 23 |
activity_name = st.text_input(f"Activity {i+1} Name:", key=f"name_{i}")
|
| 24 |
with col2:
|
| 25 |
+
activity_duration = st.number_input(f"Activity {i+1} Duration (days):", min_value=1, key=f"duration_{i}")
|
| 26 |
+
activities.append({"Task": activity_name, "Duration": activity_duration})
|
| 27 |
|
| 28 |
if st.button("Create Gantt Chart"):
|
| 29 |
if not project_name:
|
|
|
|
| 32 |
st.error("Please enter names for all activities.")
|
| 33 |
else:
|
| 34 |
df = pd.DataFrame(activities)
|
| 35 |
+
df['Start'] = pd.to_datetime(start_date)
|
| 36 |
+
df['Finish'] = df['Start']
|
| 37 |
for i in range(len(df)):
|
| 38 |
+
if i > 0:
|
| 39 |
+
df.loc[i, 'Start'] = df.loc[i-1, 'Finish']
|
| 40 |
+
df.loc[i, 'Finish'] = df.loc[i, 'Start'] + pd.to_timedelta(df.loc[i, 'Duration'], unit='D')
|
| 41 |
|
| 42 |
+
df['Start'] = df['Start'].dt.strftime('%Y-%m-%d')
|
| 43 |
+
df['Finish'] = df['Finish'].dt.strftime('%Y-%m-%d')
|
| 44 |
+
|
| 45 |
+
fig = ff.create_gantt(df, colors=[generate_random_color() for _ in range(len(df))],
|
| 46 |
+
index_col='Task', show_colorbar=False, group_tasks=True, bar_width=0.4, showgrid_x=True, showgrid_y=True)
|
| 47 |
fig.update_layout(title_text=f"Gantt Chart for: {project_name}", title_x=0.5)
|
| 48 |
+
|
| 49 |
+
fig.update_yaxes(autorange="reversed") # To put activities inside graph
|
| 50 |
st.plotly_chart(fig, use_container_width=True)
|