- 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.
110 lines
2.4 KiB
Python
110 lines
2.4 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
from fastapi.responses import HTMLResponse
|
|
from fastapi.templating import Jinja2Templates
|
|
|
|
from dependencies import require_any_role, require_roles
|
|
from models import User
|
|
|
|
router = APIRouter(tags=["UI"])
|
|
templates = Jinja2Templates(directory="templates")
|
|
|
|
READ_ROLES = ("viewer", "analyst", "project_manager", "admin")
|
|
MANAGE_ROLES = ("project_manager", "admin")
|
|
|
|
|
|
@router.get(
|
|
"/ui/simulations",
|
|
response_class=HTMLResponse,
|
|
include_in_schema=False,
|
|
name="ui.simulations",
|
|
)
|
|
def simulations_dashboard(
|
|
request: Request,
|
|
_: User = Depends(require_any_role(*READ_ROLES)),
|
|
) -> HTMLResponse:
|
|
return templates.TemplateResponse(
|
|
request,
|
|
"simulations.html",
|
|
{
|
|
"title": "Simulations",
|
|
},
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/ui/reporting",
|
|
response_class=HTMLResponse,
|
|
include_in_schema=False,
|
|
name="ui.reporting",
|
|
)
|
|
def reporting_dashboard(
|
|
request: Request,
|
|
_: User = Depends(require_any_role(*READ_ROLES)),
|
|
) -> HTMLResponse:
|
|
return templates.TemplateResponse(
|
|
request,
|
|
"reporting.html",
|
|
{
|
|
"title": "Reporting",
|
|
},
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/ui/settings",
|
|
response_class=HTMLResponse,
|
|
include_in_schema=False,
|
|
name="ui.settings",
|
|
)
|
|
def settings_page(
|
|
request: Request,
|
|
_: User = Depends(require_any_role(*READ_ROLES)),
|
|
) -> HTMLResponse:
|
|
return templates.TemplateResponse(
|
|
request,
|
|
"settings.html",
|
|
{
|
|
"title": "Settings",
|
|
},
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/theme-settings",
|
|
response_class=HTMLResponse,
|
|
include_in_schema=False,
|
|
name="ui.theme_settings",
|
|
)
|
|
def theme_settings_page(
|
|
request: Request,
|
|
_: User = Depends(require_any_role(*READ_ROLES)),
|
|
) -> HTMLResponse:
|
|
return templates.TemplateResponse(
|
|
request,
|
|
"theme_settings.html",
|
|
{
|
|
"title": "Theme Settings",
|
|
},
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/ui/currencies",
|
|
response_class=HTMLResponse,
|
|
include_in_schema=False,
|
|
name="ui.currencies",
|
|
)
|
|
def currencies_page(
|
|
request: Request,
|
|
_: User = Depends(require_roles(*MANAGE_ROLES)),
|
|
) -> HTMLResponse:
|
|
return templates.TemplateResponse(
|
|
request,
|
|
"currencies.html",
|
|
{
|
|
"title": "Currency Management",
|
|
},
|
|
)
|