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