Support manager or partner normal review for existing tasks
This commit is contained in:
@@ -167,6 +167,7 @@ def manager_review_task_submit(
|
||||
decision=decision,
|
||||
note=review_note,
|
||||
user_id=current_user.id,
|
||||
reviewer_kind="manager",
|
||||
)
|
||||
else:
|
||||
apply_task_review(
|
||||
|
||||
@@ -156,6 +156,7 @@ def partner_review_task_submit(
|
||||
decision=decision,
|
||||
note=review_note,
|
||||
user_id=current_user.id,
|
||||
reviewer_kind="partner",
|
||||
)
|
||||
else:
|
||||
apply_task_review(
|
||||
|
||||
@@ -378,6 +378,28 @@ def generate_tasks_for_subscription_if_ready(
|
||||
)
|
||||
|
||||
|
||||
def _sync_normal_review_snapshot_preserving_history(
|
||||
task: ClientServiceTaskInstance,
|
||||
*,
|
||||
template: FirmServiceTaskTemplate,
|
||||
) -> None:
|
||||
"""Sync only normal-review configuration without rewriting execution/review history."""
|
||||
task.normal_review_required = bool(getattr(template, "requires_review", False))
|
||||
task.normal_review_role = normal_review_role_for_template(template)
|
||||
current_status = (getattr(task, "normal_review_status", None) or "not_required").strip().lower()
|
||||
if not task.normal_review_required:
|
||||
task.normal_review_status = "not_required"
|
||||
return
|
||||
if current_status in {"reviewed", "rework_required"}:
|
||||
return
|
||||
if getattr(task, "rework_status", "none") == "open":
|
||||
task.normal_review_status = "rework_required"
|
||||
elif getattr(task, "submitted_for_review_at_utc", None) is not None or (getattr(task, "status", "pending") or "pending").strip().lower() == "completed":
|
||||
task.normal_review_status = "pending"
|
||||
else:
|
||||
task.normal_review_status = "not_ready"
|
||||
|
||||
|
||||
def _copy_template_snapshot_to_task(
|
||||
task: ClientServiceTaskInstance,
|
||||
*,
|
||||
@@ -398,12 +420,7 @@ def _copy_template_snapshot_to_task(
|
||||
task.response_type = (getattr(template, "response_type", "NONE") or "NONE").upper()
|
||||
task.evidence_required = getattr(template, "evidence_required", False)
|
||||
task.remarks_required_if_no = getattr(template, "remarks_required_if_no", False)
|
||||
task.normal_review_required = bool(getattr(template, "requires_review", False))
|
||||
task.normal_review_role = normal_review_role_for_template(template)
|
||||
if not task.normal_review_required:
|
||||
task.normal_review_status = "not_required"
|
||||
elif (getattr(task, "normal_review_status", None) or "not_required") == "not_required":
|
||||
task.normal_review_status = "not_ready"
|
||||
_sync_normal_review_snapshot_preserving_history(task, template=template)
|
||||
task.is_aqmm_task = getattr(template, "is_aqmm_task", False)
|
||||
task.aqmm_mandatory = getattr(template, "aqmm_mandatory", False)
|
||||
task.aqmm_evidence_required = getattr(template, "aqmm_evidence_required", False)
|
||||
@@ -547,9 +564,14 @@ def sync_open_engagement_tasks_for_service(
|
||||
template.default_role_name,
|
||||
)
|
||||
task.assigned_to_user_id = _default_assignee_for_template(subscription, template)
|
||||
_sync_normal_review_snapshot_preserving_history(task, template=template)
|
||||
task.updated_by_user_id = user_id
|
||||
result["updated_started"] += 1
|
||||
else:
|
||||
# Preserve task execution/history, but allow an explicit template sync to
|
||||
# update only the separated normal-review configuration for existing tasks.
|
||||
_sync_normal_review_snapshot_preserving_history(task, template=template)
|
||||
task.updated_by_user_id = user_id
|
||||
result["preserved_history"] += 1
|
||||
|
||||
return result
|
||||
@@ -1387,6 +1409,7 @@ def apply_normal_task_review(
|
||||
decision: str,
|
||||
note: str,
|
||||
user_id: int,
|
||||
reviewer_kind: str | None = None,
|
||||
) -> None:
|
||||
if getattr(task, "is_locked", False) or getattr(getattr(task, "subscription", None), "is_locked", False):
|
||||
return
|
||||
@@ -1415,7 +1438,13 @@ def apply_normal_task_review(
|
||||
if getattr(task, "rework_status", "none") == "open":
|
||||
task.rework_status = "resolved"
|
||||
task.rework_resolved_at_utc = now
|
||||
comment_type = "manager_review_note" if (getattr(task, "normal_review_role", "") or "").startswith("manager") else "partner_review_note"
|
||||
reviewer = (reviewer_kind or "").strip().lower()
|
||||
if reviewer == "partner":
|
||||
comment_type = "partner_review_note"
|
||||
elif reviewer == "manager":
|
||||
comment_type = "manager_review_note"
|
||||
else:
|
||||
comment_type = "manager_review_note" if (getattr(task, "normal_review_role", "") or "").startswith("manager") else "partner_review_note"
|
||||
task.updated_by_user_id = user_id
|
||||
_append_system_task_comment(
|
||||
db,
|
||||
|
||||
Reference in New Issue
Block a user