Files
arrr-erp/app/modules/firm_admin_dashboard/ui.py
T
2026-07-04 17:01:16 +05:30

76 lines
3.4 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Request
from app.core.db.common import CommonSessionLocal
from app.core.http_responses import ui_access_denied
from app.core.security.csrf import get_or_create_csrf_token
from app.core.security.session_auth import get_current_user
from app.core.templating import templates
from app.modules.core.rbac.deps import get_user_permissions, get_user_roles
from app.modules.firm_admin_dashboard.service import build_dashboard_payload, can_access_firm_admin_dashboard
router = APIRouter(prefix="/firm-admin", tags=["firm-admin-dashboard-ui"])
VALID_TABS = {
"overview": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/overview.html",
"branches": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/branches.html",
"users": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/users.html",
"firm-settings": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/firm_settings.html",
"services": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/services.html",
"financial-years": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/financial_years.html",
"reports": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/reports.html",
"wizards": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/wizards.html",
"audit-logs": "modules/firm_admin_dashboard/templates/firm_admin_dashboard/partials/audit_logs.html",
}
def _ctx(request: Request, db, current_user, *, active_tab: str = "overview"):
payload = build_dashboard_payload(db, request, current_user)
return {
"request": request,
"current_user": current_user,
"current_user_roles": get_user_roles(db, current_user.id),
"current_user_permissions": get_user_permissions(db, current_user.id),
"csrf_token": get_or_create_csrf_token(request),
"title": "Firm Administration",
"active_tab": active_tab,
**payload,
}
@router.get("/dashboard")
def dashboard(request: Request, tab: str = "overview"):
db = CommonSessionLocal()
try:
current_user = get_current_user(request, db=db)
if not current_user:
from fastapi.responses import RedirectResponse
return RedirectResponse(url="/login", status_code=303)
if not can_access_firm_admin_dashboard(db, current_user):
return ui_access_denied()
active_tab = tab if tab in VALID_TABS else "overview"
return templates.TemplateResponse(
"modules/firm_admin_dashboard/templates/firm_admin_dashboard/dashboard.html",
_ctx(request, db, current_user, active_tab=active_tab),
)
finally:
db.close()
@router.get("/dashboard/tab/{tab_name}")
def dashboard_tab(request: Request, tab_name: str):
db = CommonSessionLocal()
try:
current_user = get_current_user(request, db=db)
if not current_user:
from fastapi.responses import RedirectResponse
return RedirectResponse(url="/login", status_code=303)
if not can_access_firm_admin_dashboard(db, current_user):
return ui_access_denied()
active_tab = tab_name if tab_name in VALID_TABS else "overview"
return templates.TemplateResponse(VALID_TABS[active_tab], _ctx(request, db, current_user, active_tab=active_tab))
finally:
db.close()