File size: 3,798 Bytes
d94942e
 
 
b6fe01d
 
 
 
 
 
d94942e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b6fe01d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40ddd7f
 
 
 
 
 
 
 
 
 
b6fe01d
 
 
 
 
 
 
 
40ddd7f
 
 
 
 
 
 
3fab904
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
100
101
102
103
104
105
106
107
108
109
110
111
112
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()
    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'<a href="data:application/octet-stream;base64,{bin_str}" download="{file_label}">{button_label}</a>'
        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