Xpolymer123 commited on
Commit
bed9358
·
verified ·
1 Parent(s): a3182da

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -8
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
- project_duration = st.number_input("Total Project Duration (days):", min_value=1, value=30)
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, max_value=project_duration, key=f"duration_{i}")
25
- activities.append({"Task": activity_name, "Start": 0, "Finish": activity_duration})
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
- current_finish = 0
 
35
  for i in range(len(df)):
36
- df.loc[i, "Start"] = current_finish
37
- current_finish += df.loc[i, "Finish"]
38
- df.loc[i, "Finish"] = current_finish
39
 
40
- fig = ff.create_gantt(df, colors=[generate_random_color() for _ in range(len(df))], index_col='Task', show_colorbar=True, group_tasks=True)
 
 
 
 
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)