Commit 6f55a167 authored by Fares's avatar Fares

fix(archive): show complete member data on archived membership page

The archive show page now displays ALL original data:
- Dependents from snapshot (not live DB where they may have been moved)
- Full payments history with amounts and receipt numbers
- All annual subscriptions with status and amounts
- Installment plans with expandable payment schedules
- Fines with amounts and reasons
- Documents with file details
- Financial summary box (membership value + total paid)
- Insurance record link for death case audit trail

Previously, dependents showed empty because children/temps are moved
during death transfer. Now uses snapshot related_data as source of truth.
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 21595929
...@@ -153,13 +153,44 @@ class MemberArchiveController extends Controller ...@@ -153,13 +153,44 @@ class MemberArchiveController extends Controller
[(int) $id] [(int) $id]
); );
// Dependents from snapshot related_data or live data // Dependents: prefer snapshot data (live data may have been moved during transfer)
$related = $primarySnapshot['related_data'] ?? [];
$dependents = [ $dependents = [
'spouses' => $db->select("SELECT * FROM spouses WHERE member_id = ?", [(int) $id]), 'spouses' => !empty($related['spouses']) ? $related['spouses'] : $db->select("SELECT * FROM spouses WHERE member_id = ?", [(int) $id]),
'children' => $db->select("SELECT * FROM children WHERE member_id = ?", [(int) $id]), 'children' => !empty($related['children']) ? $related['children'] : $db->select("SELECT * FROM children WHERE member_id = ?", [(int) $id]),
'temporary' => $db->select("SELECT * FROM temporary_members WHERE member_id = ?", [(int) $id]), 'temporary' => !empty($related['temporary_members']) ? $related['temporary_members'] : $db->select("SELECT * FROM temporary_members WHERE member_id = ?", [(int) $id]),
]; ];
// Financial data: use snapshot data (complete at time of archive) + live DB for anything still linked
$payments = !empty($related['payments']) ? $related['payments'] : $db->select(
"SELECT * FROM payments WHERE member_id = ? AND is_voided = 0 ORDER BY payment_date DESC", [(int) $id]
);
$subscriptions = !empty($related['subscriptions']) ? $related['subscriptions'] : $db->select(
"SELECT * FROM subscriptions WHERE member_id = ? ORDER BY financial_year DESC", [(int) $id]
);
$installmentPlans = !empty($related['installment_plans']) ? $related['installment_plans'] : $db->select(
"SELECT * FROM installment_plans WHERE member_id = ? ORDER BY created_at DESC", [(int) $id]
);
$fines = !empty($related['fines']) ? $related['fines'] : $db->select(
"SELECT * FROM fines WHERE member_id = ? ORDER BY created_at DESC", [(int) $id]
);
$documents = !empty($related['documents']) ? $related['documents'] : $db->select(
"SELECT * FROM documents WHERE member_id = ? AND is_archived = 0 ORDER BY created_at DESC", [(int) $id]
);
// For installment plans from live DB, also get their schedules
$installmentSchedules = [];
if (!empty($installmentPlans)) {
$planIds = array_column($installmentPlans, 'id');
if (!empty($planIds)) {
$placeholders = implode(',', array_fill(0, count($planIds), '?'));
$installmentSchedules = $db->select(
"SELECT * FROM installment_schedule WHERE installment_plan_id IN ({$placeholders}) ORDER BY due_date ASC",
$planIds
);
}
}
// Operator info // Operator info
$operator = null; $operator = null;
if ($member['archived_by']) { if ($member['archived_by']) {
...@@ -174,6 +205,12 @@ class MemberArchiveController extends Controller ...@@ -174,6 +205,12 @@ class MemberArchiveController extends Controller
'linkedMember' => $linkedMember, 'linkedMember' => $linkedMember,
'auditTrail' => $auditTrail, 'auditTrail' => $auditTrail,
'dependents' => $dependents, 'dependents' => $dependents,
'payments' => $payments,
'subscriptions' => $subscriptions,
'installmentPlans' => $installmentPlans,
'installmentSchedules' => $installmentSchedules,
'fines' => $fines,
'documents' => $documents,
'operator' => $operator, 'operator' => $operator,
'membershipNumber' => $membershipNumber, 'membershipNumber' => $membershipNumber,
]); ]);
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment