feat: Add NPV comparison and distribution charts to reporting
- Implemented NPV comparison chart generation using Plotly in ReportingService. - Added distribution histogram for Monte Carlo results. - Updated reporting templates to include new charts and improved layout. - Created new settings and currencies management pages. - Enhanced sidebar navigation with dynamic URL handling. - Improved CSS styles for chart containers and overall layout. - Added new simulation and theme settings pages with placeholders for future features.
This commit is contained in:
@@ -1,98 +1,67 @@
|
||||
{% set dashboard_href = request.url_for('dashboard.home') if request else '/' %}
|
||||
{% set projects_href = request.url_for('projects.project_list_page') if request else '/projects/ui' %}
|
||||
{% set project_create_href = request.url_for('projects.create_project_form') if request else '/projects/create' %}
|
||||
{% set auth_session = request.state.auth_session if request else None %}
|
||||
{% set is_authenticated = auth_session and auth_session.is_authenticated %}
|
||||
|
||||
{% if is_authenticated %}
|
||||
{% set logout_href = request.url_for('auth.logout') if request else '/logout' %}
|
||||
{% set account_links = [
|
||||
{"href": logout_href, "label": "Logout", "match_prefix": "/logout"}
|
||||
] %}
|
||||
{% else %}
|
||||
{% set login_href = request.url_for('auth.login_form') if request else '/login' %}
|
||||
{% set register_href = request.url_for('auth.register_form') if request else '/register' %}
|
||||
{% set forgot_href = request.url_for('auth.password_reset_request_form') if request else '/forgot-password' %}
|
||||
{% set account_links = [
|
||||
{"href": login_href, "label": "Login", "match_prefix": "/login"},
|
||||
{"href": register_href, "label": "Register", "match_prefix": "/register"},
|
||||
{"href": forgot_href, "label": "Forgot Password", "match_prefix": "/forgot-password"}
|
||||
] %}
|
||||
{% endif %}
|
||||
{% set nav_groups = [
|
||||
{
|
||||
"label": "Workspace",
|
||||
"links": [
|
||||
{"href": dashboard_href, "label": "Dashboard", "match_prefix": "/"},
|
||||
{"href": projects_href, "label": "Projects", "match_prefix": "/projects"},
|
||||
{"href": project_create_href, "label": "New Project", "match_prefix": "/projects/create"},
|
||||
{"href": "/imports/ui", "label": "Imports", "match_prefix": "/imports"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Insights",
|
||||
"links": [
|
||||
{"href": "/ui/simulations", "label": "Simulations"},
|
||||
{"href": "/ui/reporting", "label": "Reporting"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Configuration",
|
||||
"links": [
|
||||
{
|
||||
"href": "/ui/settings",
|
||||
"label": "Settings",
|
||||
"children": [
|
||||
{"href": "/theme-settings", "label": "Themes"},
|
||||
{"href": "/ui/currencies", "label": "Currency Management"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Account",
|
||||
"links": account_links
|
||||
}
|
||||
] %}
|
||||
{% set projects_href = request.url_for('projects.project_list_page') if request
|
||||
else '/projects/ui' %} {% set project_create_href =
|
||||
request.url_for('projects.create_project_form') if request else
|
||||
'/projects/create' %} {% set auth_session = request.state.auth_session if
|
||||
request else None %} {% set is_authenticated = auth_session and
|
||||
auth_session.is_authenticated %} {% if is_authenticated %} {% set logout_href =
|
||||
request.url_for('auth.logout') if request else '/logout' %} {% set account_links
|
||||
= [ {"href": logout_href, "label": "Logout", "match_prefix": "/logout"} ] %} {%
|
||||
else %} {% set login_href = request.url_for('auth.login_form') if request else
|
||||
'/login' %} {% set register_href = request.url_for('auth.register_form') if
|
||||
request else '/register' %} {% set forgot_href =
|
||||
request.url_for('auth.password_reset_request_form') if request else
|
||||
'/forgot-password' %} {% set account_links = [ {"href": login_href, "label":
|
||||
"Login", "match_prefix": "/login"}, {"href": register_href, "label": "Register",
|
||||
"match_prefix": "/register"}, {"href": forgot_href, "label": "Forgot Password",
|
||||
"match_prefix": "/forgot-password"} ] %} {% endif %} {% set nav_groups = [ {
|
||||
"label": "Workspace", "links": [ {"href": dashboard_href, "label": "Dashboard",
|
||||
"match_prefix": "/"}, {"href": projects_href, "label": "Projects",
|
||||
"match_prefix": "/projects"}, {"href": project_create_href, "label": "New
|
||||
Project", "match_prefix": "/projects/create"}, {"href": "/imports/ui", "label":
|
||||
"Imports", "match_prefix": "/imports"} ] }, { "label": "Insights", "links": [
|
||||
{"href": "/ui/simulations", "label": "Simulations"}, {"href": "/ui/reporting",
|
||||
"label": "Reporting"} ] }, { "label": "Configuration", "links": [ { "href":
|
||||
"/ui/settings", "label": "Settings", "children": [ {"href": "/theme-settings",
|
||||
"label": "Themes"}, {"href": "/ui/currencies", "label": "Currency Management"} ]
|
||||
} ] }, { "label": "Account", "links": account_links } ] %}
|
||||
|
||||
<nav class="sidebar-nav" aria-label="Primary navigation">
|
||||
{% set current_path = request.url.path if request else '' %}
|
||||
{% for group in nav_groups %}
|
||||
{% if group.links %}
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-label">{{ group.label }}</div>
|
||||
<div class="sidebar-section-links">
|
||||
{% for link in group.links %}
|
||||
{% set href = link.href %}
|
||||
{% set match_prefix = link.get('match_prefix', href) %}
|
||||
{% if match_prefix == '/' %}
|
||||
{% set is_active = current_path == '/' %}
|
||||
{% else %}
|
||||
{% set is_active = current_path.startswith(match_prefix) %}
|
||||
{% endif %}
|
||||
<div class="sidebar-link-block">
|
||||
<a href="{{ href }}" class="sidebar-link{% if is_active %} is-active{% endif %}">
|
||||
{{ link.label }}
|
||||
</a>
|
||||
{% if link.children %}
|
||||
<div class="sidebar-sublinks">
|
||||
{% for child in link.children %}
|
||||
{% set child_prefix = child.get('match_prefix', child.href) %}
|
||||
{% if child_prefix == '/' %}
|
||||
{% set child_active = current_path == '/' %}
|
||||
{% else %}
|
||||
{% set child_active = current_path.startswith(child_prefix) %}
|
||||
{% endif %}
|
||||
<a href="{{ child.href }}" class="sidebar-sublink{% if child_active %} is-active{% endif %}">
|
||||
{{ child.label }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% set current_path = request.url.path if request else '' %} {% for group in
|
||||
nav_groups %} {% if group.links %}
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-label">{{ group.label }}</div>
|
||||
<div class="sidebar-section-links">
|
||||
{% for link in group.links %} {% set href = link.href | string %} {% set
|
||||
match_prefix = link.get('match_prefix', href) | string %} {% if
|
||||
match_prefix == '/' %} {% set is_active = current_path == '/' %} {% else
|
||||
%} {% set is_active = current_path.startswith(match_prefix) %} {% endif %}
|
||||
<div class="sidebar-link-block">
|
||||
<a
|
||||
href="{{ href }}"
|
||||
class="sidebar-link{% if is_active %} is-active{% endif %}"
|
||||
>
|
||||
{{ link.label }}
|
||||
</a>
|
||||
{% if link.children %}
|
||||
<div class="sidebar-sublinks">
|
||||
{% for child in link.children %} {% set child_prefix =
|
||||
child.get('match_prefix', child.href) | string %} {% if child_prefix
|
||||
== '/' %} {% set child_active = current_path == '/' %} {% else %} {%
|
||||
set child_active = current_path.startswith(child_prefix) %} {% endif
|
||||
%}
|
||||
<a
|
||||
href="{{ child.href | string }}"
|
||||
class="sidebar-sublink{% if child_active %} is-active{% endif %}"
|
||||
>
|
||||
{{ child.label }}
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %} {% endfor %}
|
||||
</nav>
|
||||
|
||||
Reference in New Issue
Block a user