Add grouped employee engagement workflow workspace phase 2

This commit is contained in:
A R R R Associates
2026-07-19 23:49:31 +05:30
parent f25f67389e
commit dfdc74b534
3 changed files with 417 additions and 100 deletions
+72 -2
View File
@@ -48,6 +48,7 @@ from app.modules.employees.service import (
list_employee_work_kanban,
get_employee_engagement_work_board,
start_employee_engagement_workflow,
save_employee_workflow_task,
list_employee_work_assignable_users,
list_visible_work_assignment_dashboard,
list_engagement_progress_dashboard,
@@ -2091,7 +2092,7 @@ def employee_my_work_engagement_start(
@portal_router.get("/work/engagements/{engagement_id}")
def employee_my_work_engagement_board(request: Request, engagement_id: int):
def employee_my_work_engagement_board(request: Request, engagement_id: int, task_id: int | None = None):
db = CommonSessionLocal()
try:
current_user = get_current_user(request, db=db)
@@ -2106,7 +2107,13 @@ def employee_my_work_engagement_board(request: Request, engagement_id: int):
scope = build_employee_scope(db, current_user, tenant_id=tenant_id, branch_id=branch_id)
employee = get_employee_for_user(db, current_user)
financial_year = _active_financial_year(request)
board = get_employee_engagement_work_board(db, scope, engagement_id, financial_year=financial_year)
board = get_employee_engagement_work_board(
db,
scope,
engagement_id,
financial_year=financial_year,
active_task_id=task_id,
)
return _render(
request,
"modules/employees/templates/employees/work_engagement_board.html",
@@ -2122,6 +2129,69 @@ def employee_my_work_engagement_board(request: Request, engagement_id: int):
db.close()
@portal_router.post("/work/engagements/{engagement_id}/tasks/{task_id}/save")
def employee_workflow_task_save(
request: Request,
engagement_id: int,
task_id: int,
status: str = Form("pending"),
remarks: str = Form(""),
checklist_response: str = Form(""),
checklist_text_response: str = Form(""),
checklist_number_response: str = Form(""),
checklist_date_response: str = Form(""),
checklist_remarks: str = Form(""),
workflow_action: str = Form("save"),
csrf_token: str = Form(...),
):
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.work.view_self")
except Exception:
return _redirect_denied()
try:
validate_csrf(request, csrf_token)
except PermissionError:
return _csrf_rejected(request)
tenant_id = request.session.get("active_tenant_id") or current_user.tenant_id
branch_id = request.session.get("active_branch_id")
scope = build_employee_scope(db, current_user, tenant_id=tenant_id, branch_id=branch_id)
try:
saved_task, next_task = save_employee_workflow_task(
db,
scope,
task_id,
status=status,
remarks=remarks,
checklist_response=checklist_response,
checklist_text_response=checklist_text_response,
checklist_number_response=checklist_number_response,
checklist_date_response=checklist_date_response,
checklist_remarks=checklist_remarks,
actor_user_id=current_user.id,
financial_year=_active_financial_year(request),
)
except ValueError:
db.rollback()
return RedirectResponse(
url=f"/employee/work/engagements/{engagement_id}?task_id={task_id}&workflow_error=1",
status_code=303,
)
target_task = next_task if workflow_action == "save_next" and next_task else saved_task
return RedirectResponse(
url=f"/employee/work/engagements/{engagement_id}?task_id={target_task.id}&saved=1",
status_code=303,
)
finally:
db.close()
@router.get("/work/tasks/{task_id}/communication")
def employee_work_task_communication(
request: Request,