import pandas as pd
import streamlit as st
import base64
from roadmapper.roadmap import Roadmap
from roadmapper.timelinemode import TimelineMode
import datetime
import re
from io import BytesIO
import json
def clear_rfp_data():
st.session_state.clear()
def export(data):
# data_df = pd.DataFrame(st.session_state["user_stories_json"])
data_df = pd.DataFrame(data)
csv_data = data_df.to_csv(index=False)
b64 = base64.b64encode(csv_data.encode()).decode()
href = f'Download CSV File'
st.markdown(href, unsafe_allow_html=True)
def estimate_to_value(estimate):
if estimate == "XS":
return 2
elif estimate == "S":
return 6
elif estimate == "M":
return 12
elif estimate == "L":
return 22
elif estimate == "XL":
return 37
else:
# Handle the case when the estimate is not one of the specified values
return "Invalid estimate"
def is_key_value_present(array_of_objects, key, value):
for obj in array_of_objects:
if key in obj and obj[key] == value:
return True
return False
def generate_roadmap_image():
# Calculate the project start date (15 days from today)
project_start_date = datetime.datetime.now() + datetime.timedelta(days=15)
project_start_date_str = project_start_date.strftime("%Y-%m-%d")
roadmap = Roadmap(1400, 800, colour_theme="BLUEMOUNTAIN")
roadmap.set_title("Project Roadmap")
roadmap.set_subtitle(st.session_state["project_name"])
roadmap.set_timeline(TimelineMode.MONTHLY, start=project_start_date_str, number_of_items=12)
group_index = 1
milestone_index = 1
data = st.session_state["roadmap_data_json"]
prev_phase_end_date = None
data = json.loads(st.session_state["roadmap_data_json"])
for phase in data["phases"]:
group_name = f"{phase['name']} - {group_index}"
group = roadmap.add_group(group_name)
milestone_start_date = project_start_date if prev_phase_end_date is None else prev_phase_end_date
for milestone in phase["milestones"]:
task_name = f"milestone - {milestone_index}"
total_time_range = [int(num) for num in re.findall(r'\d+', milestone["totalTime"])]
total_working_days = sum(total_time_range) / 2
average_duration = total_working_days / 5 * 7
milestone_end_date = milestone_start_date + datetime.timedelta(days=average_duration)
print(milestone_start_date,milestone_end_date)
group.add_task(task_name, milestone_start_date.strftime("%Y-%m-%d"), milestone_end_date.strftime("%Y-%m-%d"))
milestone_start_date = milestone_end_date
milestone_index += 1
prev_phase_end_date = milestone_end_date
group_index += 1
roadmap.set_footer("Generated by Roadmapper")
roadmap.draw()
project_name = get_dynamic_filename()
roadmap.save(project_name)
st.download_button(
label="Download Roadmap Image",
data=open(project_name, "rb").read(),
key="download_roadmap",
file_name=project_name,
mime="image/png",
)
def get_binary_file_downloader_html(bin_file, file_label, button_label):
with st.spinner("Processing..."):
# Provide a download link for the image
bin_str = base64.b64encode(bin_file).decode()
href = f'{button_label}'
return href
def get_dynamic_filename():
project_name = st.session_state["project_name"]
current_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
filename = f"{project_name}_roadmap_{current_time}.png"
return filename