Add consultant dashboard ajax tabs v1
This commit is contained in:
+102
-12
@@ -1330,8 +1330,79 @@ async def consultant_profile_submit(request: Request, csrf_token: str = Form(...
|
||||
db.close()
|
||||
|
||||
|
||||
|
||||
|
||||
CONSULTANT_PORTAL_TABS = {
|
||||
"overview": "modules/consultants/templates/consultants/portal_partials/overview.html",
|
||||
"assigned-work": "modules/consultants/templates/consultants/portal_partials/assigned_work.html",
|
||||
"clients": "modules/consultants/templates/consultants/portal_partials/clients.html",
|
||||
"documents": "modules/consultants/templates/consultants/portal_partials/documents.html",
|
||||
"clarifications": "modules/consultants/templates/consultants/portal_partials/clarifications.html",
|
||||
"requests": "modules/consultants/templates/consultants/portal_partials/service_requests.html",
|
||||
"reports": "modules/consultants/templates/consultants/portal_partials/reports.html",
|
||||
}
|
||||
|
||||
|
||||
def _consultant_empty_payload() -> dict:
|
||||
return {
|
||||
"links": [],
|
||||
"active_links": [],
|
||||
"comments": [],
|
||||
"recent_firm_messages": [],
|
||||
"recent_consultant_replies": [],
|
||||
"managed_clients": [],
|
||||
"workspace": None,
|
||||
"workspace_alerts": [],
|
||||
"service_requests": [],
|
||||
"open_service_requests": [],
|
||||
"pending_service_requests": [],
|
||||
"conversion_requests": [],
|
||||
"pending_conversions": [],
|
||||
"due_items": [],
|
||||
"overdue_items": [],
|
||||
"workspace_summary": {
|
||||
"workspace": None,
|
||||
"managed_clients_used": 0,
|
||||
"managed_clients_limit": None,
|
||||
"managed_clients_remaining": None,
|
||||
"usage_percent": 0,
|
||||
},
|
||||
"work_board": {"columns": {}, "column_options": [], "total_tasks": 0, "service_requests": []},
|
||||
"document_centre": {"engagement_documents": [], "permanent_documents": [], "total": 0},
|
||||
"stats": {
|
||||
"linked_clients": 0,
|
||||
"communication_enabled_clients": 0,
|
||||
"due_date_enabled_clients": 0,
|
||||
"pending_clarifications": 0,
|
||||
"consultant_replies": 0,
|
||||
"upcoming_due": 0,
|
||||
"overdue": 0,
|
||||
"open_service_requests": 0,
|
||||
"pending_service_requests": 0,
|
||||
"pending_conversions": 0,
|
||||
"converted_clients": 0,
|
||||
"managed_clients": 0,
|
||||
"prospects": 0,
|
||||
"referred_to_firm": 0,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def _build_consultant_portal_payload(db, consultant) -> dict:
|
||||
payload = consultant_dashboard_payload(db, consultant=consultant)
|
||||
try:
|
||||
payload["work_board"] = get_consultant_work_board(db, consultant=consultant)
|
||||
except Exception:
|
||||
payload["work_board"] = {"columns": {}, "column_options": [], "total_tasks": 0, "service_requests": []}
|
||||
try:
|
||||
payload["document_centre"] = get_consultant_document_centre(db, consultant=consultant)
|
||||
except Exception:
|
||||
payload["document_centre"] = {"engagement_documents": [], "permanent_documents": [], "total": 0}
|
||||
return payload
|
||||
|
||||
|
||||
@portal_router.get("/dashboard")
|
||||
def consultant_dashboard(request: Request):
|
||||
def consultant_dashboard(request: Request, tab: str = "overview"):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
user = get_current_user(request, db=db)
|
||||
@@ -1341,17 +1412,8 @@ def consultant_dashboard(request: Request):
|
||||
return _redirect_denied()
|
||||
tenant_id = int(getattr(user, "tenant_id", 0) or 0)
|
||||
consultant = get_consultant_by_user(db, tenant_id=tenant_id, user_id=user.id)
|
||||
if not consultant:
|
||||
return _render(
|
||||
request,
|
||||
"modules/consultants/templates/consultants/portal_dashboard.html",
|
||||
db,
|
||||
user,
|
||||
title="Consultant Portal",
|
||||
consultant=None,
|
||||
payload={"links": [], "active_links": [], "comments": [], "managed_clients": [], "workspace": None, "workspace_summary": {"workspace": None, "managed_clients_used": 0, "managed_clients_limit": None, "managed_clients_remaining": None, "usage_percent": 0}, "stats": {"linked_clients": 0, "managed_clients": 0, "prospects": 0, "referred_to_firm": 0, "pending_clarifications": 0, "upcoming_due": 0, "overdue": 0}},
|
||||
)
|
||||
payload = consultant_dashboard_payload(db, consultant=consultant)
|
||||
active_tab = tab if tab in CONSULTANT_PORTAL_TABS else "overview"
|
||||
payload = _build_consultant_portal_payload(db, consultant) if consultant else _consultant_empty_payload()
|
||||
return _render(
|
||||
request,
|
||||
"modules/consultants/templates/consultants/portal_dashboard.html",
|
||||
@@ -1360,6 +1422,34 @@ def consultant_dashboard(request: Request):
|
||||
title="Consultant Portal",
|
||||
consultant=consultant,
|
||||
payload=payload,
|
||||
active_tab=active_tab,
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@portal_router.get("/dashboard/tab/{tab_name}")
|
||||
def consultant_dashboard_tab(request: Request, tab_name: str):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
user = get_current_user(request, db=db)
|
||||
if not user:
|
||||
return RedirectResponse(url="/login", status_code=303)
|
||||
if not (_has_perm(db, user, "consultants.portal.view") or _is_consultant(db, user)):
|
||||
return _redirect_denied()
|
||||
tenant_id = int(getattr(user, "tenant_id", 0) or 0)
|
||||
consultant = get_consultant_by_user(db, tenant_id=tenant_id, user_id=user.id)
|
||||
active_tab = tab_name if tab_name in CONSULTANT_PORTAL_TABS else "overview"
|
||||
payload = _build_consultant_portal_payload(db, consultant) if consultant else _consultant_empty_payload()
|
||||
return _render(
|
||||
request,
|
||||
CONSULTANT_PORTAL_TABS[active_tab],
|
||||
db,
|
||||
user,
|
||||
title="Consultant Portal",
|
||||
consultant=consultant,
|
||||
payload=payload,
|
||||
active_tab=active_tab,
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
Reference in New Issue
Block a user