@@ -36,16 +36,19 @@ final class PaymentRequestService
if($entityType!==null&&$entityId!==null){
$existing=$db->selectOne(
"SELECT id FROM payment_requests WHERE member_id = ? AND payment_type = ? AND related_entity_type = ? AND related_entity_id = ? AND status IN ('pending','processing') AND is_voided = 0 LIMIT 1",
"SELECT id, status FROM payment_requests WHERE member_id = ? AND payment_type = ? AND related_entity_type = ? AND related_entity_id = ? AND is_voided = 0 AND status IN ('pending','processing','completed') ORDER BY FIELD(status,'pending','processing','completed') LIMIT 1",
@@ -246,6 +250,15 @@ class MemberController extends Controller
return$this->redirect('/members/'.$id)->withError('بيانات غير صالحة');
}
// Block if a combined membership payment is already pending
$hasCombined=$db->selectOne(
"SELECT id FROM payment_requests WHERE member_id = ? AND payment_type IN ('membership_fee','down_payment') AND status IN ('pending','processing') AND is_voided = 0 LIMIT 1",
[(int)$id]
);
if($hasCombined){
return$this->redirect('/members/'.$id)->withError('يوجد طلب دفع مجمع في الخزينة بالفعل — الرسوم مشمولة فيه');
}
$entity=$db->selectOne("SELECT * FROM {$entityType} WHERE id = ? AND member_id = ? AND is_archived = 0",[$entityId,(int)$id]);
if(!$entity)return$this->redirect('/members/'.$id)->withError('العنصر غير موجود');
...
...
@@ -260,6 +273,14 @@ class MemberController extends Controller
default=>'',
};
$breakdown=[
'👤 '.$typeLabel.': '.$nameLabel,
'📌 نوع الرسوم: رسوم إضافة تابع',
'💰 رسوم الإضافة: '.money($fee),
'═══════════════════════════',
'💵 الإجمالي: '.money($fee),
];
$result=PaymentRequestService::createRequest([
'member_id'=>(int)$id,
'amount'=>$fee,
...
...
@@ -267,6 +288,7 @@ class MemberController extends Controller
'related_entity_type'=>$entityType,
'related_entity_id'=>$entityId,
'description_ar'=>'رسوم إضافة '.$typeLabel.' — '.$nameLabel,
<h3style="color:#059669;margin:0 0 8px;">✅ تم دفع رسوم الاستمارة — الآن قم بملء البيانات</h3>
<pstyle="color:#6B7280;margin:0;font-size:14px;">استمارة رقم <strong><?=e($member->form_number)?></strong></p>
<h3style="color:#059669;margin:0 0 8px;">✅ تم دفع رسوم الاستمارة — الآن قم بملء البيانات وإضافة الأسرة</h3>
<pstyle="color:#6B7280;margin:0;font-size:14px;">استمارة رقم <strong><?=e($member->form_number)?></strong> — يمكنك إضافة أفراد الأسرة الآن بدون رسوم إضافية</p>
<divstyle="font-size:12px;color:#0D7377;font-weight:700;margin-bottom:10px;text-transform:uppercase;">👤 الأعضاء المؤقتون (<?=count($temporaries)?>)</div>