Add phase 3 consultant task execution workflow

This commit is contained in:
A R R R Associates
2026-07-23 11:37:04 +05:30
parent e9db81b32f
commit 0f7d6f4396
9 changed files with 365 additions and 2 deletions
+30
View File
@@ -62,6 +62,7 @@ from app.modules.consultants.service import (
)
from app.modules.consultants.portal_service import (
get_consultant_assignment_detail,
update_consultant_assignment,
get_consultant_document_centre,
get_consultant_work_board,
)
@@ -1837,3 +1838,32 @@ def consultant_documents_page(request: Request, q: str = ""):
)
finally:
db.close()
@portal_router.post("/assignments/{task_id}/execution")
async def consultant_assignment_execution(request: Request, task_id: int, csrf_token: str = Form(...)):
validate_csrf(request, csrf_token)
form = await request.form()
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()
consultant = _get_own_consultant_or_dashboard(request, db, user)
if not consultant:
return RedirectResponse(url="/consultant/dashboard", status_code=303)
detail = get_consultant_assignment_detail(db, consultant=consultant, task_id=task_id)
if not detail:
return RedirectResponse(url="/consultant/work", status_code=303)
ok, error = update_consultant_assignment(db, consultant=consultant, task=detail["task"], action=str(form.get("action") or ""), note=str(form.get("note") or ""), user_id=user.id)
if not ok:
refreshed = get_consultant_assignment_detail(db, consultant=consultant, task_id=task_id) or detail
return _render(request, "modules/consultants/templates/consultants/assignment_detail.html", db, user, title="Consultant Work Detail", consultant=consultant, **refreshed, errors=[error or "Action could not be completed."])
db.commit()
return RedirectResponse(url=f"/consultant/assignments/{task_id}?execution=updated", status_code=303)
except Exception:
db.rollback(); raise
finally:
db.close()