Separate normal task review from AQMM review

This commit is contained in:
A R R R Associates
2026-08-11 09:05:09 +05:30
parent 20fd30ff3d
commit c3684b7afa
17 changed files with 435 additions and 98 deletions
+36 -28
View File
@@ -3489,34 +3489,34 @@ def _employee_task_category(task: ClientServiceTaskInstance) -> str:
def _i1_required_review_levels(task: ClientServiceTaskInstance) -> list[str]:
"""Return configured review levels for I1 using existing task-template controls."""
"""Return normal and AQMM review gates without mixing their state."""
levels: list[str] = []
if getattr(task, "aqmm_manager_review_required", False):
levels.append("manager")
if getattr(task, "aqmm_partner_review_required", False):
levels.append("partner")
if getattr(task, "aqmm_review_partner_required", False):
levels.append("review_partner")
normal_role = (getattr(task, "normal_review_role", None) or "").strip().lower()
if getattr(task, "normal_review_required", False):
if normal_role == "manager":
levels.append("normal_manager")
elif normal_role == "partner":
levels.append("normal_partner")
elif normal_role == "manager_or_partner":
levels.append("normal_manager_or_partner")
# Preserve the pre-existing generic requires_review flag. Where no explicit
# reviewer flag was configured, route to Manager when available, otherwise
# Engagement Partner. No new review table/state is introduced.
template = getattr(task, "template", None)
if not levels and getattr(template, "requires_review", False):
subscription = getattr(task, "subscription", None)
if getattr(subscription, "assigned_manager_user_id", None):
levels.append("manager")
elif getattr(subscription, "assigned_partner_user_id", None):
levels.append("partner")
if getattr(task, "aqmm_manager_review_required", False):
levels.append("aqmm_manager")
if getattr(task, "aqmm_partner_review_required", False):
levels.append("aqmm_partner")
if getattr(task, "aqmm_review_partner_required", False):
levels.append("aqmm_review_partner")
return levels
def _i1_review_level_pending(task: ClientServiceTaskInstance, level: str) -> bool:
if level == "manager":
if level.startswith("normal_"):
return (getattr(task, "normal_review_status", None) or "not_required") != "reviewed"
if level == "aqmm_manager":
return (getattr(task, "manager_review_status", None) or "not_required") != "reviewed"
if level == "partner":
if level == "aqmm_partner":
return (getattr(task, "partner_review_status", None) or "not_required") != "reviewed"
if level == "review_partner":
if level == "aqmm_review_partner":
return (getattr(task, "review_partner_review_status", None) or "not_required") != "reviewed"
return False
@@ -3531,9 +3531,12 @@ def _i1_review_label(task: ClientServiceTaskInstance) -> str | None:
if not pending:
return "Approved"
labels = {
"manager": "Manager",
"partner": "Partner",
"review_partner": "Review Partner",
"normal_manager": "Manager",
"normal_partner": "Partner",
"normal_manager_or_partner": "Manager / Partner",
"aqmm_manager": "AQMM Manager",
"aqmm_partner": "AQMM Partner",
"aqmm_review_partner": "AQMM Review Partner",
}
return "Awaiting " + " + ".join(labels[level] for level in pending) + " approval"
@@ -3554,9 +3557,12 @@ def _i1_approval_blocker(
if not pending:
continue
labels = {
"manager": "Manager",
"partner": "Partner",
"review_partner": "Review Partner",
"normal_manager": "Manager",
"normal_partner": "Partner",
"normal_manager_or_partner": "Manager / Partner",
"aqmm_manager": "AQMM Manager",
"aqmm_partner": "AQMM Partner",
"aqmm_review_partner": "AQMM Review Partner",
}
return {
"task_id": int(row.id),
@@ -3620,6 +3626,8 @@ def _workflow_task_weight(task: ClientServiceTaskInstance) -> int:
weight += 2
if bool(getattr(task, "aqmm_blocks_final_release", False)):
weight += 2
if bool(getattr(task, "normal_review_required", False)):
weight += 1
if any(bool(getattr(task, name, False)) for name in (
"aqmm_manager_review_required",
"aqmm_partner_review_required",
@@ -3971,7 +3979,7 @@ def save_employee_workflow_task(
engagement_tasks_for_gate = db.execute(
_employee_work_task_query(
db, scope, assigned_only=True, financial_year=financial_year
db, scope, assigned_only=False, financial_year=financial_year
)
.where(ClientServiceTaskInstance.subscription_id == task.subscription_id)
.order_by(ClientServiceTaskInstance.sequence_no.asc(), ClientServiceTaskInstance.id.asc())
@@ -4025,7 +4033,7 @@ def save_employee_workflow_task(
engagement_tasks = db.execute(
_employee_work_task_query(
db, scope, assigned_only=True, financial_year=financial_year
db, scope, assigned_only=False, financial_year=financial_year
)
.where(ClientServiceTaskInstance.subscription_id == task.subscription_id)
.order_by(ClientServiceTaskInstance.sequence_no.asc(), ClientServiceTaskInstance.id.asc())