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
[(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 = [
'spouses' => $db->select("SELECT * FROM spouses WHERE member_id = ?", [(int) $id]),
'children' => $db->select("SELECT * FROM children WHERE member_id = ?", [(int) $id]),
'temporary' => $db->select("SELECT * FROM temporary_members WHERE member_id = ?", [(int) $id]),
'spouses' => !empty($related['spouses']) ? $related['spouses'] : $db->select("SELECT * FROM spouses WHERE member_id = ?", [(int) $id]),
'children' => !empty($related['children']) ? $related['children'] : $db->select("SELECT * FROM children 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 = null;
if ($member['archived_by']) {
......@@ -167,15 +198,21 @@ class MemberArchiveController extends Controller
}
return $this->view('Members.Views.archive_show', [
'member' => $member,
'snapshots' => $snapshots,
'primarySnapshot' => $primarySnapshot,
'numberChain' => $numberChain,
'linkedMember' => $linkedMember,
'auditTrail' => $auditTrail,
'dependents' => $dependents,
'operator' => $operator,
'membershipNumber' => $membershipNumber,
'member' => $member,
'snapshots' => $snapshots,
'primarySnapshot' => $primarySnapshot,
'numberChain' => $numberChain,
'linkedMember' => $linkedMember,
'auditTrail' => $auditTrail,
'dependents' => $dependents,
'payments' => $payments,
'subscriptions' => $subscriptions,
'installmentPlans' => $installmentPlans,
'installmentSchedules' => $installmentSchedules,
'fines' => $fines,
'documents' => $documents,
'operator' => $operator,
'membershipNumber' => $membershipNumber,
]);
}
......
......@@ -38,17 +38,21 @@ $related = $primarySnapshot['related_data'] ?? [];
<div style="padding:20px;">
<table style="width:100%;font-size:14px;">
<tr><td style="padding:6px 0;color:#6B7280;width:30%;">رقم العضوية</td><td style="padding:6px 0;font-weight:700;font-size:16px;"><?= e($membershipNumber ?? ($data['membership_number'] ?? '—')) ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">رقم الاستمارة</td><td style="padding:6px 0;font-weight:600;color:#D97706;"><?= e($member['form_number'] ?? $data['form_number'] ?? '—') ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">الاسم بالكامل</td><td style="padding:6px 0;font-weight:600;"><?= e($member['full_name_ar'] ?? '') ?></td></tr>
<?php if (!empty($member['full_name_en'])): ?><tr><td style="padding:6px 0;color:#6B7280;">الاسم بالإنجليزية</td><td style="padding:6px 0;"><?= e($member['full_name_en']) ?></td></tr><?php endif; ?>
<tr><td style="padding:6px 0;color:#6B7280;">الرقم القومي</td><td style="padding:6px 0;font-family:monospace;"><?= e($member['national_id'] ?? '—') ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">تاريخ الميلاد</td><td style="padding:6px 0;"><?= e($member['birth_date'] ?? '—') ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">تاريخ الميلاد</td><td style="padding:6px 0;"><?= e($member['date_of_birth'] ?? $member['birth_date'] ?? '—') ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">النوع</td><td style="padding:6px 0;"><?= ($member['gender'] ?? '') === 'male' ? 'ذكر' : (($member['gender'] ?? '') === 'female' ? 'أنثى' : '—') ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">نوع العضوية</td><td style="padding:6px 0;"><?= e($member['membership_type'] ?? '—') ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">قيمة العضوية</td><td style="padding:6px 0;font-weight:700;color:#059669;"><?= !empty($member['membership_value']) ? money($member['membership_value']) : '—' ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">الهاتف</td><td style="padding:6px 0;"><?= e($member['phone_mobile'] ?? '—') ?></td></tr>
<?php if (!empty($member['phone_home'])): ?><tr><td style="padding:6px 0;color:#6B7280;">هاتف المنزل</td><td style="padding:6px 0;"><?= e($member['phone_home']) ?></td></tr><?php endif; ?>
<?php if (!empty($member['email'])): ?><tr><td style="padding:6px 0;color:#6B7280;">البريد</td><td style="padding:6px 0;"><?= e($member['email']) ?></td></tr><?php endif; ?>
<?php if (!empty($member['address'])): ?><tr><td style="padding:6px 0;color:#6B7280;">العنوان</td><td style="padding:6px 0;"><?= e($member['address']) ?></td></tr><?php endif; ?>
<?php if (!empty($member['residence_address'])): ?><tr><td style="padding:6px 0;color:#6B7280;">العنوان</td><td style="padding:6px 0;"><?= e($member['residence_address']) ?></td></tr><?php endif; ?>
<?php if (!empty($member['occupation'])): ?><tr><td style="padding:6px 0;color:#6B7280;">الوظيفة</td><td style="padding:6px 0;"><?= e($member['occupation']) ?></td></tr><?php endif; ?>
<?php if (!empty($member['job_title'])): ?><tr><td style="padding:6px 0;color:#6B7280;">المسمى الوظيفي</td><td style="padding:6px 0;"><?= e($member['job_title']) ?></td></tr><?php endif; ?>
<?php if (!empty($member['nationality'])): ?><tr><td style="padding:6px 0;color:#6B7280;">الجنسية</td><td style="padding:6px 0;"><?= e($member['nationality']) ?></td></tr><?php endif; ?>
<tr><td style="padding:6px 0;color:#6B7280;">تاريخ الإنشاء</td><td style="padding:6px 0;"><?= e($member['created_at'] ?? '—') ?></td></tr>
<tr><td style="padding:6px 0;color:#6B7280;">آخر تعديل</td><td style="padding:6px 0;"><?= e($member['updated_at'] ?? '—') ?></td></tr>
</table>
......@@ -64,13 +68,21 @@ $related = $primarySnapshot['related_data'] ?? [];
<?php if (!empty($dependents['spouses'])): ?>
<h4 style="margin:0 0 10px;font-size:14px;color:#374151;">الزوجات (<?= count($dependents['spouses']) ?>)</h4>
<table class="data-table" style="margin-bottom:15px;font-size:13px;">
<thead><tr><th>الاسم</th><th>الرقم القومي</th><th>الحالة</th></tr></thead>
<thead><tr><th>الاسم</th><th>الرقم القومي</th><th>تاريخ الميلاد</th><th>الجنسية</th><th>الحالة</th></tr></thead>
<tbody>
<?php foreach ($dependents['spouses'] as $s): ?>
<tr>
<td><?= e($s['full_name_ar'] ?? '') ?></td>
<td style="font-family:monospace;"><?= e($s['national_id'] ?? '—') ?></td>
<td><?= ($s['is_archived'] ?? 0) ? '<span style="color:#DC2626;">مؤرشف</span>' : '<span style="color:#059669;">فعال</span>' ?></td>
<td style="font-weight:600;"><?= e($s['full_name_ar'] ?? '') ?></td>
<td style="font-family:monospace;font-size:12px;"><?= e($s['national_id'] ?? '—') ?></td>
<td><?= e($s['date_of_birth'] ?? $s['birth_date'] ?? '—') ?></td>
<td><?= e($s['nationality'] ?? '—') ?></td>
<td>
<?php $st = $s['status'] ?? ($s['is_archived'] ?? 0 ? 'archived' : 'active'); ?>
<?php if ($st === 'active'): ?><span style="color:#059669;">فعال</span>
<?php elseif ($st === 'transferred'): ?><span style="color:#0284C7;">محوّل</span>
<?php elseif ($st === 'deceased'): ?><span style="color:#6B7280;">متوفى</span>
<?php else: ?><span style="color:#DC2626;">مؤرشف</span><?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
......@@ -84,10 +96,14 @@ $related = $primarySnapshot['related_data'] ?? [];
<tbody>
<?php foreach ($dependents['children'] as $c): ?>
<tr>
<td><?= e($c['full_name_ar'] ?? '') ?></td>
<td><?= e($c['birth_date'] ?? '—') ?></td>
<td style="font-weight:600;"><?= e($c['full_name_ar'] ?? '') ?></td>
<td><?= e($c['date_of_birth'] ?? $c['birth_date'] ?? '—') ?></td>
<td><?= ($c['gender'] ?? '') === 'male' ? 'ذكر' : 'أنثى' ?></td>
<td><?= ($c['is_archived'] ?? 0) ? '<span style="color:#DC2626;">مؤرشف</span>' : '<span style="color:#059669;">فعال</span>' ?></td>
<td>
<?php $st = $c['status'] ?? ($c['is_archived'] ?? 0 ? 'archived' : 'active'); ?>
<?php if ($st === 'active'): ?><span style="color:#059669;">فعال</span>
<?php else: ?><span style="color:#DC2626;">مؤرشف</span><?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
......@@ -97,13 +113,18 @@ $related = $primarySnapshot['related_data'] ?? [];
<?php if (!empty($dependents['temporary'])): ?>
<h4 style="margin:0 0 10px;font-size:14px;color:#374151;">الأعضاء المؤقتون (<?= count($dependents['temporary']) ?>)</h4>
<table class="data-table" style="font-size:13px;">
<thead><tr><th>الاسم</th><th>الرقم القومي</th><th>الحالة</th></tr></thead>
<thead><tr><th>الاسم</th><th>الرقم القومي</th><th>تاريخ الميلاد</th><th>الحالة</th></tr></thead>
<tbody>
<?php foreach ($dependents['temporary'] as $t): ?>
<tr>
<td><?= e($t['full_name_ar'] ?? '') ?></td>
<td style="font-family:monospace;"><?= e($t['national_id'] ?? '—') ?></td>
<td><?= ($t['is_archived'] ?? 0) ? '<span style="color:#DC2626;">مؤرشف</span>' : '<span style="color:#059669;">فعال</span>' ?></td>
<td style="font-weight:600;"><?= e($t['full_name_ar'] ?? '') ?></td>
<td style="font-family:monospace;font-size:12px;"><?= e($t['national_id'] ?? '—') ?></td>
<td><?= e($t['date_of_birth'] ?? $t['birth_date'] ?? '—') ?></td>
<td>
<?php $st = $t['status'] ?? ($t['is_archived'] ?? 0 ? 'archived' : 'active'); ?>
<?php if ($st === 'active'): ?><span style="color:#059669;">فعال</span>
<?php else: ?><span style="color:#DC2626;">مؤرشف</span><?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
......@@ -116,50 +137,168 @@ $related = $primarySnapshot['related_data'] ?? [];
</div>
</div>
<!-- Financial Data from Snapshot -->
<?php if (!empty($related['subscriptions']) || !empty($related['fines']) || !empty($related['payments'])): ?>
<!-- Payments -->
<?php if (!empty($payments)): ?>
<div class="card" style="margin-bottom:20px;">
<div style="padding:15px 20px;border-bottom:1px solid #E5E7EB;">
<h3 style="margin:0;color:#D97706;">البيانات المالية (وقت الأرشفة)</h3>
<h3 style="margin:0;color:#D97706;">المدفوعات (<?= count($payments) ?>)</h3>
</div>
<div style="padding:20px;">
<?php if (!empty($related['subscriptions'])): ?>
<h4 style="margin:0 0 10px;font-size:14px;color:#374151;">الاشتراكات (<?= count($related['subscriptions']) ?>)</h4>
<table class="data-table" style="margin-bottom:15px;font-size:12px;">
<thead><tr><th>السنة</th><th>الحالة</th><th>المبلغ</th><th>المدفوع</th></tr></thead>
<table class="data-table" style="font-size:12px;width:100%;">
<thead><tr><th>التاريخ</th><th>النوع</th><th>المبلغ</th><th>طريقة الدفع</th><th>الإيصال</th></tr></thead>
<tbody>
<?php foreach (array_slice($related['subscriptions'], 0, 10) as $sub): ?>
<?php foreach ($payments as $p): ?>
<tr>
<td><?= e($sub['year'] ?? $sub['subscription_year'] ?? '—') ?></td>
<td><?= e($sub['status'] ?? '—') ?></td>
<td style="text-align:left;"><?= money($sub['total_amount'] ?? '0') ?></td>
<td style="text-align:left;"><?= money($sub['paid_amount'] ?? '0') ?></td>
<td><?= e($p['payment_date'] ?? $p['created_at'] ?? '—') ?></td>
<td><?= e($p['payment_type'] ?? '—') ?></td>
<td style="font-weight:700;color:#059669;"><?= money($p['amount'] ?? '0') ?></td>
<td><?= e($p['payment_method'] ?? '—') ?></td>
<td style="font-family:monospace;font-size:11px;"><?= e($p['receipt_number'] ?? '—') ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<?php if (!empty($related['fines'])): ?>
<h4 style="margin:0 0 10px;font-size:14px;color:#374151;">الغرامات (<?= count($related['fines']) ?>)</h4>
<table class="data-table" style="margin-bottom:15px;font-size:12px;">
<thead><tr><th>السبب</th><th>المبلغ</th><th>الحالة</th></tr></thead>
<!-- Subscriptions -->
<?php if (!empty($subscriptions)): ?>
<div class="card" style="margin-bottom:20px;">
<div style="padding:15px 20px;border-bottom:1px solid #E5E7EB;">
<h3 style="margin:0;color:#7C3AED;">الاشتراكات السنوية (<?= count($subscriptions) ?>)</h3>
</div>
<div style="padding:20px;">
<table class="data-table" style="font-size:12px;width:100%;">
<thead><tr><th>السنة المالية</th><th>النوع</th><th>الاسم</th><th>المبلغ</th><th>المدفوع</th><th>الحالة</th></tr></thead>
<tbody>
<?php foreach (array_slice($related['fines'], 0, 10) as $fine): ?>
<?php foreach ($subscriptions as $sub): ?>
<?php
$subStatus = $sub['status'] ?? '—';
$subColor = match($subStatus) {
'paid' => '#059669', 'pending' => '#F59E0B', 'overdue' => '#DC2626',
'exempted' => '#6B7280', default => '#374151',
};
?>
<tr>
<td style="font-weight:600;"><?= e($sub['financial_year'] ?? $sub['year'] ?? $sub['subscription_year'] ?? '—') ?></td>
<td><?= e($sub['person_type'] ?? '—') ?></td>
<td><?= e($sub['person_name'] ?? '—') ?></td>
<td style="font-weight:600;"><?= money($sub['total_amount'] ?? '0') ?></td>
<td><?= money($sub['paid_amount'] ?? '0') ?></td>
<td><span style="color:<?= $subColor ?>;font-weight:600;"><?= e($subStatus) ?></span></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<?php endif; ?>
<!-- Installment Plans -->
<?php if (!empty($installmentPlans)): ?>
<div class="card" style="margin-bottom:20px;">
<div style="padding:15px 20px;border-bottom:1px solid #E5E7EB;">
<h3 style="margin:0;color:#0284C7;">خطط الأقساط (<?= count($installmentPlans) ?>)</h3>
</div>
<div style="padding:20px;">
<?php foreach ($installmentPlans as $plan):
$planStatusLabel = match($plan['status'] ?? '') {
'active' => 'نشط', 'completed' => 'مكتمل', 'cancelled' => 'ملغى', default => $plan['status'] ?? '—',
};
$planStatusColor = match($plan['status'] ?? '') {
'active' => '#059669', 'completed' => '#6B7280', 'cancelled' => '#DC2626', default => '#374151',
};
?>
<div style="border:1px solid #E5E7EB;border-radius:8px;padding:15px;margin-bottom:15px;">
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;">
<span style="font-weight:700;color:#1F2937;">خطة #<?= (int) $plan['id'] ?></span>
<span style="color:<?= $planStatusColor ?>;font-weight:600;font-size:13px;"><?= $planStatusLabel ?></span>
</div>
<table style="width:100%;font-size:13px;">
<tr><td style="color:#6B7280;width:35%;">إجمالي المبلغ</td><td style="font-weight:600;"><?= money($plan['total_amount'] ?? '0') ?></td></tr>
<tr><td style="color:#6B7280;">المقدم</td><td><?= money($plan['down_payment'] ?? '0') ?></td></tr>
<tr><td style="color:#6B7280;">المتبقي</td><td style="color:#DC2626;font-weight:600;"><?= money($plan['remaining_balance'] ?? '0') ?></td></tr>
<tr><td style="color:#6B7280;">عدد الأشهر</td><td><?= (int) ($plan['number_of_months'] ?? 0) ?></td></tr>
<tr><td style="color:#6B7280;">القسط الشهري</td><td><?= money($plan['monthly_payment'] ?? '0') ?></td></tr>
<tr><td style="color:#6B7280;">تاريخ البدء</td><td><?= e($plan['start_date'] ?? '—') ?></td></tr>
</table>
<?php
$planSchedule = array_filter($installmentSchedules ?? [], fn($s) => (int) $s['installment_plan_id'] === (int) $plan['id']);
if (!empty($planSchedule)):
?>
<details style="margin-top:10px;">
<summary style="cursor:pointer;font-size:12px;color:#0284C7;font-weight:600;">عرض جدول الأقساط (<?= count($planSchedule) ?>)</summary>
<table class="data-table" style="font-size:11px;margin-top:8px;width:100%;">
<thead><tr><th>#</th><th>تاريخ الاستحقاق</th><th>المبلغ</th><th>المدفوع</th><th>الحالة</th></tr></thead>
<tbody>
<?php foreach ($planSchedule as $sched): ?>
<tr>
<td><?= (int) ($sched['installment_number'] ?? 0) ?></td>
<td><?= e($sched['due_date'] ?? '—') ?></td>
<td><?= money($sched['amount'] ?? '0') ?></td>
<td><?= money($sched['paid_amount'] ?? '0') ?></td>
<td>
<?php $schedStatus = $sched['status'] ?? 'pending'; ?>
<span style="color:<?= $schedStatus === 'paid' ? '#059669' : ($schedStatus === 'overdue' ? '#DC2626' : '#F59E0B') ?>;"><?= $schedStatus === 'paid' ? 'مدفوع' : ($schedStatus === 'overdue' ? 'متأخر' : 'معلق') ?></span>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</details>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
<!-- Fines -->
<?php if (!empty($fines)): ?>
<div class="card" style="margin-bottom:20px;">
<div style="padding:15px 20px;border-bottom:1px solid #E5E7EB;">
<h3 style="margin:0;color:#DC2626;">الغرامات (<?= count($fines) ?>)</h3>
</div>
<div style="padding:20px;">
<table class="data-table" style="font-size:12px;width:100%;">
<thead><tr><th>السبب</th><th>المبلغ</th><th>الحالة</th><th>التاريخ</th></tr></thead>
<tbody>
<?php foreach ($fines as $fine): ?>
<tr>
<td><?= e($fine['reason'] ?? '—') ?></td>
<td style="text-align:left;"><?= money($fine['amount'] ?? '0') ?></td>
<td style="font-weight:700;color:#DC2626;"><?= money($fine['amount'] ?? '0') ?></td>
<td><?= e($fine['status'] ?? '—') ?></td>
<td><?= e($fine['created_at'] ?? '—') ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<?php if (!empty($related['payments'])): ?>
<h4 style="margin:0 0 10px;font-size:14px;color:#374151;">المدفوعات (<?= count($related['payments']) ?>)</h4>
<div style="font-size:12px;color:#6B7280;">عدد المدفوعات المحفوظة: <?= count($related['payments']) ?><a href="/archive/<?= (int) ($snapshots[0]['id'] ?? 0) ?>" style="color:#0D7377;">عرض التفاصيل في اللقطة</a></div>
<?php endif; ?>
<!-- Documents -->
<?php if (!empty($documents)): ?>
<div class="card" style="margin-bottom:20px;">
<div style="padding:15px 20px;border-bottom:1px solid #E5E7EB;">
<h3 style="margin:0;color:#374151;">المستندات (<?= count($documents) ?>)</h3>
</div>
<div style="padding:20px;">
<table class="data-table" style="font-size:12px;width:100%;">
<thead><tr><th>النوع</th><th>اسم الملف</th><th>الوصف</th><th>تاريخ الرفع</th></tr></thead>
<tbody>
<?php foreach ($documents as $doc): ?>
<tr>
<td style="font-weight:600;"><?= e($doc['document_type'] ?? '—') ?></td>
<td><?= e($doc['original_filename'] ?? '—') ?></td>
<td style="font-size:11px;color:#6B7280;"><?= e($doc['description'] ?? '—') ?></td>
<td><?= e($doc['uploaded_at'] ?? $doc['created_at'] ?? '—') ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<?php endif; ?>
......@@ -168,7 +307,7 @@ $related = $primarySnapshot['related_data'] ?? [];
<?php if (!empty($auditTrail)): ?>
<div class="card" style="margin-bottom:20px;">
<div style="padding:15px 20px;border-bottom:1px solid #E5E7EB;">
<h3 style="margin:0;color:#1A1A2E;">سجل التعديلات (Audit Trail)</h3>
<h3 style="margin:0;color:#1A1A2E;">سجل التعديلات (<?= count($auditTrail) ?>)</h3>
</div>
<div style="padding:20px;max-height:400px;overflow-y:auto;">
<?php foreach ($auditTrail as $log): ?>
......@@ -178,12 +317,12 @@ $related = $primarySnapshot['related_data'] ?? [];
<span style="font-size:11px;color:#9CA3AF;"><?= e($log['created_at'] ?? '') ?></span>
</div>
<div style="color:#6B7280;font-size:12px;">
<?php if ($log['employee_name']): ?>
<?php if (!empty($log['employee_name'])): ?>
بواسطة: <?= e($log['employee_name']) ?>
<?php endif; ?>
<?php if ($log['changed_fields_json']): ?>
<?php $changes = json_decode($log['changed_fields_json'], true) ?? []; ?>
<?php if (!empty($changes)): ?>
<?php if (!empty($log['changed_fields_json'])):
$changes = json_decode($log['changed_fields_json'], true) ?? [];
if (!empty($changes)): ?>
<div style="margin-top:4px;padding:6px 10px;background:#F9FAFB;border-radius:4px;">
<?php foreach (array_slice($changes, 0, 5) as $field => $vals): ?>
<div style="margin-bottom:2px;">
......@@ -223,6 +362,29 @@ $related = $primarySnapshot['related_data'] ?? [];
</div>
</div>
<!-- Financial Summary Box -->
<div class="card" style="margin-bottom:20px;background:#F9FAFB;">
<div style="padding:15px;text-align:center;">
<div style="font-size:12px;color:#6B7280;margin-bottom:8px;">الملخص المالي</div>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:10px;">
<div style="background:#fff;border:1px solid #E5E7EB;border-radius:8px;padding:10px;">
<div style="font-size:18px;font-weight:700;color:#059669;"><?= money($member['membership_value'] ?? '0') ?></div>
<div style="font-size:11px;color:#6B7280;">قيمة العضوية</div>
</div>
<div style="background:#fff;border:1px solid #E5E7EB;border-radius:8px;padding:10px;">
<?php
$totalPaid = '0.00';
foreach ($payments as $p) {
$totalPaid = bcadd($totalPaid, (string) ($p['amount'] ?? '0'), 2);
}
?>
<div style="font-size:18px;font-weight:700;color:#0284C7;"><?= money($totalPaid) ?></div>
<div style="font-size:11px;color:#6B7280;">إجمالي المدفوع</div>
</div>
</div>
</div>
</div>
<!-- Linked Member (who received the number) -->
<?php if ($linkedMember): ?>
<div class="card" style="margin-bottom:20px;border:2px solid #059669;">
......@@ -285,6 +447,7 @@ $related = $primarySnapshot['related_data'] ?? [];
<!-- Quick Links -->
<div class="card">
<div style="padding:15px;display:flex;flex-direction:column;gap:8px;">
<a href="/members/<?= (int) $member['id'] ?>/insurance-record" class="btn btn-outline" style="text-align:center;color:#1E40AF;border-color:#1E40AF;">&#x1f4cb; السجل التأميني</a>
<?php if (!empty($snapshots[0]['id'])): ?>
<a href="/archive/<?= (int) $snapshots[0]['id'] ?>" class="btn btn-outline" style="text-align:center;">عرض اللقطة الكاملة (JSON)</a>
<?php endif; ?>
......
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