Ajaxify employee portal dashboard
This commit is contained in:
+73
-17
@@ -2472,8 +2472,56 @@ def employee_status_submit(
|
||||
db.close()
|
||||
|
||||
|
||||
|
||||
EMPLOYEE_PORTAL_TABS = {
|
||||
"overview": "modules/employees/templates/employees/portal_partials/overview.html",
|
||||
"work": "modules/employees/templates/employees/portal_partials/work.html",
|
||||
"attendance": "modules/employees/templates/employees/portal_partials/attendance.html",
|
||||
"profile": "modules/employees/templates/employees/portal_partials/profile.html",
|
||||
"leave": "modules/employees/templates/employees/portal_partials/leave.html",
|
||||
"documents": "modules/employees/templates/employees/portal_partials/documents.html",
|
||||
"payslips": "modules/employees/templates/employees/portal_partials/payslips.html",
|
||||
"offboarding": "modules/employees/templates/employees/portal_partials/offboarding.html",
|
||||
"alerts": "modules/employees/templates/employees/portal_partials/alerts.html",
|
||||
}
|
||||
|
||||
|
||||
def _employee_portal_context(request: Request, db, current_user, *, active_tab: str = "overview"):
|
||||
employee = get_employee_for_user(db, current_user)
|
||||
pending_request = None if employee else get_pending_registration_for_user(db, current_user)
|
||||
work_payload = None
|
||||
if employee:
|
||||
scope = build_employee_scope(
|
||||
db,
|
||||
current_user,
|
||||
tenant_id=request.session.get("active_tenant_id") or current_user.tenant_id,
|
||||
branch_id=request.session.get("active_branch_id"),
|
||||
)
|
||||
work_payload = list_employee_work_kanban(
|
||||
db,
|
||||
scope,
|
||||
q="",
|
||||
status="open",
|
||||
financial_year=_active_financial_year(request),
|
||||
)
|
||||
return {
|
||||
"title": "Employee Portal",
|
||||
"active_tab": active_tab if active_tab in EMPLOYEE_PORTAL_TABS else "overview",
|
||||
"employee": employee,
|
||||
"pending_request": pending_request,
|
||||
"today_attendance": get_today_attendance_for_user(db, current_user),
|
||||
"attendance_rows": list_own_attendance(db, current_user, limit=10),
|
||||
"leave_balances": list_own_leave_balances(db, current_user),
|
||||
"leave_requests": list_own_leave_requests(db, current_user)[:5],
|
||||
"offboarding_requests": list_own_offboarding_requests(db, current_user)[:5],
|
||||
"payslips": list_own_payslips(db, current_user)[:5],
|
||||
"own_documents": list_own_employee_documents(db, current_user)[:8],
|
||||
"work_payload": work_payload,
|
||||
}
|
||||
|
||||
|
||||
@portal_router.get("/dashboard")
|
||||
def employee_portal_dashboard(request: Request):
|
||||
def employee_portal_dashboard(request: Request, tab: str = "overview"):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
current_user = get_current_user(request, db=db)
|
||||
@@ -2483,32 +2531,40 @@ def employee_portal_dashboard(request: Request):
|
||||
require_permission(db, current_user, "employees.ess.view")
|
||||
except Exception:
|
||||
return _redirect_denied()
|
||||
employee = get_employee_for_user(db, current_user)
|
||||
pending_request = None if employee else get_pending_registration_for_user(db, current_user)
|
||||
work_payload = None
|
||||
if employee:
|
||||
scope = build_employee_scope(db, current_user, tenant_id=request.session.get("active_tenant_id") or current_user.tenant_id, branch_id=request.session.get("active_branch_id"))
|
||||
work_payload = list_employee_work_kanban(db, scope, q="", status="open", financial_year=_active_financial_year(request))
|
||||
active_tab = tab if tab in EMPLOYEE_PORTAL_TABS else "overview"
|
||||
return _render(
|
||||
request,
|
||||
"modules/employees/templates/employees/portal_dashboard.html",
|
||||
db,
|
||||
current_user,
|
||||
title="Employee Portal",
|
||||
employee=employee,
|
||||
pending_request=pending_request,
|
||||
today_attendance=get_today_attendance_for_user(db, current_user),
|
||||
attendance_rows=list_own_attendance(db, current_user)[:7],
|
||||
leave_balances=list_own_leave_balances(db, current_user),
|
||||
leave_requests=list_own_leave_requests(db, current_user)[:5],
|
||||
offboarding_requests=list_own_offboarding_requests(db, current_user)[:5],
|
||||
payslips=list_own_payslips(db, current_user)[:5],
|
||||
work_payload=work_payload,
|
||||
**_employee_portal_context(request, db, current_user, active_tab=active_tab),
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@portal_router.get("/dashboard/tab/{tab_name}")
|
||||
def employee_portal_dashboard_tab(request: Request, tab_name: str):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
current_user = get_current_user(request, db=db)
|
||||
if not current_user:
|
||||
return _redirect_login()
|
||||
try:
|
||||
require_permission(db, current_user, "employees.ess.view")
|
||||
except Exception:
|
||||
return _redirect_denied()
|
||||
active_tab = tab_name if tab_name in EMPLOYEE_PORTAL_TABS else "overview"
|
||||
return _render(
|
||||
request,
|
||||
EMPLOYEE_PORTAL_TABS[active_tab],
|
||||
db,
|
||||
current_user,
|
||||
**_employee_portal_context(request, db, current_user, active_tab=active_tab),
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@portal_router.get("/attendance")
|
||||
def employee_self_attendance(request: Request):
|
||||
db = CommonSessionLocal()
|
||||
|
||||
Reference in New Issue
Block a user