diff --git a/db.sqlite3 b/db.sqlite3 index b3c2c85..a9d6a51 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/invoices/views.py b/invoices/views.py index 7e01a51..455f9ea 100644 --- a/invoices/views.py +++ b/invoices/views.py @@ -897,10 +897,18 @@ def final_settlement_step(request, instance_id, step_id): # Ensure step instance exists step_instance, _ = StepInstance.objects.get_or_create(process_instance=instance, step=step, defaults={'status': 'in_progress'}) - # Build approver statuses for template + # Build approver statuses for template (include reason to display in UI) reqs = list(step.approver_requirements.select_related('role').all()) - approvals_map = {a.role_id: a.decision for a in step_instance.approvals.select_related('role').all()} - approver_statuses = [{'role': r.role, 'status': approvals_map.get(r.role_id)} for r in reqs] + approvals = list(step_instance.approvals.select_related('role').all()) + approvals_by_role = {a.role_id: a for a in approvals} + approver_statuses = [ + { + 'role': r.role, + 'status': (approvals_by_role.get(r.role_id).decision if approvals_by_role.get(r.role_id) else None), + 'reason': (approvals_by_role.get(r.role_id).reason if approvals_by_role.get(r.role_id) else ''), + } + for r in reqs + ] # dynamic permission to control approve/reject UI try: user_roles_qs = getattr(getattr(request.user, 'profile', None), 'roles', Role.objects.none())