76 lines
3.2 KiB
Python
76 lines
3.2 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Request
|
|
from fastapi.responses import RedirectResponse
|
|
|
|
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.staff_dashboard.service import build_staff_dashboard_payload, can_access_staff_dashboard
|
|
|
|
router = APIRouter(prefix="/staff", tags=["staff-dashboard-v1-ui"])
|
|
|
|
VALID_TABS = {
|
|
"my-tasks": "modules/staff_dashboard/templates/staff_dashboard/partials/my_tasks.html",
|
|
"due-today": "modules/staff_dashboard/templates/staff_dashboard/partials/due_today.html",
|
|
"overdue": "modules/staff_dashboard/templates/staff_dashboard/partials/overdue.html",
|
|
"client-pending": "modules/staff_dashboard/templates/staff_dashboard/partials/client_pending.html",
|
|
"documents": "modules/staff_dashboard/templates/staff_dashboard/partials/documents.html",
|
|
"returned-work": "modules/staff_dashboard/templates/staff_dashboard/partials/returned_work.html",
|
|
"reports": "modules/staff_dashboard/templates/staff_dashboard/partials/reports.html",
|
|
"wizards": "modules/staff_dashboard/templates/staff_dashboard/partials/wizards.html",
|
|
}
|
|
|
|
|
|
def _ctx(request: Request, db, current_user, *, active_tab: str = "my-tasks"):
|
|
payload = build_staff_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": "Staff Dashboard",
|
|
"active_tab": active_tab,
|
|
**payload,
|
|
}
|
|
|
|
|
|
@router.get("/dashboard")
|
|
def dashboard(request: Request, tab: str = "my-tasks"):
|
|
db = CommonSessionLocal()
|
|
try:
|
|
current_user = get_current_user(request, db=db)
|
|
if not current_user:
|
|
return RedirectResponse(url="/login", status_code=303)
|
|
if not can_access_staff_dashboard(db, current_user):
|
|
return ui_access_denied()
|
|
active_tab = tab if tab in VALID_TABS else "my-tasks"
|
|
return templates.TemplateResponse(
|
|
"modules/staff_dashboard/templates/staff_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:
|
|
return RedirectResponse(url="/login", status_code=303)
|
|
if not can_access_staff_dashboard(db, current_user):
|
|
return ui_access_denied()
|
|
active_tab = tab_name if tab_name in VALID_TABS else "my-tasks"
|
|
return templates.TemplateResponse(
|
|
VALID_TABS[active_tab],
|
|
_ctx(request, db, current_user, active_tab=active_tab),
|
|
)
|
|
finally:
|
|
db.close()
|