Spaces:
Sleeping
Sleeping
File size: 3,408 Bytes
d94942e b6fe01d d94942e b6fe01d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
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'<a href="data:file/csv;base64,{b64}" download="data.csv">Download CSV File</a>'
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()
roadmap.save("project_roadmap.png")
image_buffer = BytesIO()
image_data = image_buffer.getvalue()
return image_data
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'<a href="data:application/octet-stream;base64,{bin_str}" download="{file_label}">{button_label}</a>'
return href |