Commit 5f2720c3 authored by Fares's avatar Fares

fix(members): enable payment flow for non-working membership types

Non-working types (foreign, sports, seasonal, honorary) stay in
'potential' status after form fee since they skip the acceptance process.
The payment section and pending detection now recognize this status for
those types. Also adds a type-specific CTA guiding members to their
registration form when needed (seasonal/honorary where fee=0 until filled).
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 30048dc4
......@@ -235,7 +235,7 @@ class MemberController extends Controller
foreach ($pendingRequests as $pr) {
if ($pr['status'] === 'pending' || $pr['status'] === 'processing') {
if ($pr['payment_type'] === 'form_fee') $pendingFormFee = $pr;
if (in_array($pr['payment_type'], ['membership_fee', 'down_payment'], true)) $pendingMembership = $pr;
if (in_array($pr['payment_type'], ['membership_fee', 'down_payment', 'foreign_membership_fee', 'sports_membership_fee', 'seasonal_fee'], true)) $pendingMembership = $pr;
if ($pr['payment_type'] === 'addition_fee' && $pr['related_entity_type'] && $pr['related_entity_id']) {
$pendingAdditions[$pr['related_entity_type'] . ':' . $pr['related_entity_id']] = $pr;
}
......
......@@ -286,8 +286,35 @@ $canEdit = can('member.edit') && (!$isLocked || ($isSuperAdmin ?? false));
</div>
<?php endif; ?>
<!-- Type-specific registration CTA (seasonal/foreign/sports) -->
<?php if ($member->status === 'potential' && ($member->membership_type ?? 'working') !== 'working' && $bill['form_fee_paid'] && bccomp($bill['total_pending'] ?? '0', '0.01', 2) < 0): ?>
<?php
$typeFormRoutes = [
'seasonal' => ['route' => '/members/' . (int) $member->id . '/seasonal/create', 'label' => 'تسجيل بيانات العضوية الموسمية', 'icon' => '📋', 'desc' => 'سجّل بيانات المدة والأسرة — سيتم حساب الرسوم وإرسالها للخزينة تلقائياً'],
'foreign' => ['route' => '/members/' . (int) $member->id . '/foreign/create', 'label' => 'تسجيل بيانات العضوية الأجنبية', 'icon' => '🛂', 'desc' => 'سجّل بيانات جواز السفر وسعر الصرف قبل السداد'],
'sports' => ['route' => '/members/' . (int) $member->id . '/sports/create', 'label' => 'تسجيل بيانات العضوية الرياضية', 'icon' => '🏅', 'desc' => 'سجّل بيانات الرياضة والاتحاد قبل السداد'],
'honorary' => ['route' => '/members/' . (int) $member->id . '/honorary/create', 'label' => 'تسجيل بيانات العضوية الشرفية', 'icon' => '🏆', 'desc' => 'سجّل سبب منح العضوية الشرفية — سيتم التفعيل فوراً بدون رسوم'],
];
$typeForm = $typeFormRoutes[$member->membership_type] ?? null;
?>
<?php if ($typeForm): ?>
<div style="padding:20px;background:#EFF6FF;border-top:2px solid #3B82F6;text-align:center;">
<div style="font-size:36px;"><?= $typeForm['icon'] ?></div>
<h4 style="margin:10px 0 5px;color:#1D4ED8;"><?= e($typeForm['label']) ?></h4>
<p style="color:#6B7280;margin:0 0 15px;font-size:14px;"><?= e($typeForm['desc']) ?></p>
<a href="<?= $typeForm['route'] ?>" class="btn btn-primary" style="padding:12px 30px;font-size:16px;"><?= $typeForm['icon'] ?> <?= e($typeForm['label']) ?></a>
</div>
<?php endif; ?>
<?php endif; ?>
<!-- Payment Section -->
<?php if (bccomp($bill['total_pending'], '0', 2) > 0 && in_array($member->status, ['accepted', 'payment_pending'])): ?>
<?php
$canShowPayment = in_array($member->status, ['accepted', 'payment_pending']);
if (!$canShowPayment && $member->status === 'potential' && ($member->membership_type ?? 'working') !== 'working' && $bill['form_fee_paid']) {
$canShowPayment = true;
}
?>
<?php if (bccomp($bill['total_pending'], '0', 2) > 0 && $canShowPayment): ?>
<?php if (!empty($pendingMembership)): ?>
<div style="padding:20px;background:#FFF7ED;border-top:2px solid #F59E0B;text-align:center;">
<div style="font-size:36px;">&#x23F3;</div>
......@@ -605,7 +632,7 @@ if (($member->membership_type ?? 'working') === 'honorary') {
} elseif ($formFilled && !$bill['membership_paid'] && !in_array($member->status, ['active'], true)) {
if (!empty($bill['membership_pending']) || !empty($pendingMembership)) {
$missingSteps[] = ['icon' => '&#x1f4b3;', 'text' => $membershipFeeLabel . ' في انتظار الخزينة', 'color' => '#D97706', 'done' => false];
} elseif (in_array($member->status, ['accepted', 'payment_pending'], true)) {
} elseif (in_array($member->status, ['accepted', 'payment_pending'], true) || ($member->status === 'potential' && ($member->membership_type ?? 'working') !== 'working' && $bill['form_fee_paid'])) {
$missingSteps[] = ['icon' => '&#x23f3;', 'text' => 'لم يتم سداد ' . $membershipFeeLabel, 'color' => '#DC2626', 'done' => false];
} elseif (in_array($member->status, ['under_review', 'interview_scheduled'], true)) {
$missingSteps[] = ['icon' => '&#x1f4cb;', 'text' => 'في انتظار قرار مجلس الأمناء', 'color' => '#3B82F6', 'done' => false];
......
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