Separate normal task review from AQMM review
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user