Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
Clubphp
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Clubphp
Commits
a2cdc876
Commit
a2cdc876
authored
Apr 07, 2026
by
Administrator
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update 3 files via Son of Anton
parent
35e407e0
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
237 additions
and
73 deletions
+237
-73
MemberController.php
app/Modules/Members/Controllers/MemberController.php
+150
-24
Routes.php
app/Modules/Members/Routes.php
+16
-13
show.php
app/Modules/Members/Views/show.php
+71
-36
No files found.
app/Modules/Members/Controllers/MemberController.php
View file @
a2cdc876
This diff is collapsed.
Click to expand it.
app/Modules/Members/Routes.php
View file @
a2cdc876
...
@@ -3,20 +3,23 @@ declare(strict_types=1);
...
@@ -3,20 +3,23 @@ declare(strict_types=1);
return
[
return
[
// Member CRUD
// Member CRUD
[
'GET'
,
'/members'
,
'Members\Controllers\MemberController@index'
,
[
'auth'
],
'member.view'
],
[
'GET'
,
'/members'
,
'Members\Controllers\MemberController@index'
,
[
'auth'
],
'member.view'
],
[
'GET'
,
'/members/create'
,
'Members\Controllers\MemberController@create'
,
[
'auth'
],
'member.create'
],
[
'GET'
,
'/members/create'
,
'Members\Controllers\MemberController@create'
,
[
'auth'
],
'member.create'
],
[
'POST'
,
'/members'
,
'Members\Controllers\MemberController@store'
,
[
'auth'
],
'member.create'
],
[
'POST'
,
'/members'
,
'Members\Controllers\MemberController@store'
,
[
'auth'
],
'member.create'
],
[
'GET'
,
'/members/search'
,
'Members\Controllers\MemberController@search'
,
[
'auth'
],
'member.view'
],
[
'GET'
,
'/members/search'
,
'Members\Controllers\MemberController@search'
,
[
'auth'
],
'member.view'
],
[
'GET'
,
'/members/{id}'
,
'Members\Controllers\MemberController@show'
,
[
'auth'
],
'member.view'
],
[
'GET'
,
'/members/{id}'
,
'Members\Controllers\MemberController@show'
,
[
'auth'
],
'member.view'
],
[
'GET'
,
'/members/{id}/edit'
,
'Members\Controllers\MemberController@edit'
,
[
'auth'
],
'member.edit'
],
[
'GET'
,
'/members/{id}/edit'
,
'Members\Controllers\MemberController@edit'
,
[
'auth'
],
'member.edit'
],
[
'POST'
,
'/members/{id}'
,
'Members\Controllers\MemberController@update'
,
[
'auth'
],
'member.edit'
],
[
'POST'
,
'/members/{id}'
,
'Members\Controllers\MemberController@update'
,
[
'auth'
],
'member.edit'
],
[
'POST'
,
'/members/{id}/status'
,
'Members\Controllers\MemberController@changeStatus'
,[
'auth'
],
'member.change_status'
],
[
'POST'
,
'/members/{id}/status'
,
'Members\Controllers\MemberController@changeStatus'
,
[
'auth'
],
'member.change_status'
],
// Fill Form (استمارة)
// Form fee payment
[
'GET'
,
'/members/{id}/fill-form'
,
'Members\Controllers\MemberController@fillForm'
,
[
'auth'
],
'member.edit'
],
[
'POST'
,
'/members/{id}/pay-form-fee'
,
'Members\Controllers\MemberController@payFormFee'
,
[
'auth'
],
'member.edit'
],
[
'POST'
,
'/members/{id}/fill-form'
,
'Members\Controllers\MemberController@saveFillForm'
,[
'auth'
],
'member.edit'
],
// Fill Form (استمارة) — blocked until form fee paid
[
'GET'
,
'/members/{id}/fill-form'
,
'Members\Controllers\MemberController@fillForm'
,
[
'auth'
],
'member.edit'
],
[
'POST'
,
'/members/{id}/fill-form'
,
'Members\Controllers\MemberController@saveFillForm'
,
[
'auth'
],
'member.edit'
],
// API endpoints
// API endpoints
[
'POST'
,
'/api/members/parse-nid'
,
'Members\Controllers\MemberApiController@parseNid'
,
[
'auth'
],
'member.create'
],
[
'POST'
,
'/api/members/parse-nid'
,
'Members\Controllers\MemberApiController@parseNid'
,
[
'auth'
],
'member.create'
],
[
'POST'
,
'/api/members/search'
,
'Members\Controllers\MemberApiController@search'
,
[
'auth'
],
'member.view'
],
[
'POST'
,
'/api/members/search'
,
'Members\Controllers\MemberApiController@search'
,
[
'auth'
],
'member.view'
],
];
];
\ No newline at end of file
app/Modules/Members/Views/show.php
View file @
a2cdc876
...
@@ -13,27 +13,73 @@ $statusLabel = $member->getStatusLabel();
...
@@ -13,27 +13,73 @@ $statusLabel = $member->getStatusLabel();
$statusColor
=
$member
->
getStatusColor
();
$statusColor
=
$member
->
getStatusColor
();
?>
?>
<!-- Form Not Filled Banner -->
<!-- ══════════════════════════════════════════════════════ -->
<?php
if
(
!
$formFilled
&&
in_array
(
$member
->
status
,
[
'potential'
]))
:
?>
<!-- STEP 1: Form Fee Not Paid — BIG RED BLOCKER -->
<div
class=
"card"
style=
"margin-bottom:20px;padding:25px;background:linear-gradient(135deg, #FFF7ED, #FEF3C7);border:2px solid #F59E0B;"
>
<!-- ══════════════════════════════════════════════════════ -->
<?php
if
(
!
$formFeePaid
&&
$member
->
status
===
'potential'
)
:
?>
<div
class=
"card"
style=
"margin-bottom:20px;padding:30px;background:linear-gradient(135deg, #FEF2F2, #FEE2E2);border:2px solid #DC2626;"
>
<div
style=
"text-align:center;margin-bottom:20px;"
>
<div
style=
"font-size:48px;"
>
🔒
</div>
<h2
style=
"color:#DC2626;margin:10px 0 5px;"
>
يجب دفع رسوم الاستمارة أولاً
</h2>
<p
style=
"color:#6B7280;font-size:14px;margin:0;"
>
لا يمكن ملء بيانات الاستمارة قبل دفع الرسوم
</p>
</div>
<div
style=
"max-width:500px;margin:0 auto;background:#fff;border-radius:12px;padding:25px;box-shadow:0 4px 12px rgba(0,0,0,0.1);"
>
<table
style=
"width:100%;font-size:15px;margin-bottom:20px;"
>
<tr>
<td
style=
"padding:8px 0;color:#6B7280;"
>
رقم الاستمارة
</td>
<td
style=
"padding:8px 0;text-align:left;font-weight:700;font-size:20px;color:#0D7377;"
>
<?=
e
(
$member
->
form_number
??
'—'
)
?>
</td>
</tr>
<tr>
<td
style=
"padding:8px 0;color:#6B7280;"
>
اسم العضو
</td>
<td
style=
"padding:8px 0;text-align:left;font-weight:600;"
>
<?=
e
(
$member
->
full_name_ar
)
?>
</td>
</tr>
<tr>
<td
style=
"padding:8px 0;color:#6B7280;"
>
رسوم الاستمارة
</td>
<td
style=
"padding:8px 0;text-align:left;font-weight:700;font-size:24px;color:#DC2626;"
>
<?=
money
(
$formFee
)
?>
</td>
</tr>
</table>
<form
method=
"POST"
action=
"/members/
<?=
(
int
)
$member
->
id
?>
/pay-form-fee"
>
<?=
csrf_field
()
?>
<div
class=
"form-group"
style=
"margin-bottom:15px;"
>
<label
class=
"form-label"
>
طريقة الدفع
</label>
<select
name=
"payment_method"
class=
"form-select"
style=
"font-size:16px;"
>
<option
value=
"cash"
>
نقدي 💵
</option>
<option
value=
"visa"
>
فيزا / بطاقة 💳
</option>
<option
value=
"bank_transfer"
>
تحويل بنكي 🏦
</option>
</select>
</div>
<button
type=
"submit"
class=
"btn btn-primary"
style=
"width:100%;padding:15px;font-size:18px;background:#059669;border-color:#059669;"
onclick=
"return confirm('تأكيد دفع رسوم الاستمارة
<?=
e
(
money
(
$formFee
))
?>
؟')"
>
💰 تسجيل دفع رسوم الاستمارة
</button>
</form>
</div>
</div>
<!-- ══════════════════════════════════════════════════════ -->
<!-- STEP 2: Fee Paid but Form Not Filled -->
<!-- ══════════════════════════════════════════════════════ -->
<?php
elseif
(
$formFeePaid
&&
!
$formFilled
&&
in_array
(
$member
->
status
,
[
'potential'
,
'under_review'
]))
:
?>
<div
class=
"card"
style=
"margin-bottom:20px;padding:25px;background:linear-gradient(135deg, #F0FDF4, #DCFCE7);border:2px solid #059669;"
>
<div
style=
"display:flex;justify-content:space-between;align-items:center;"
>
<div
style=
"display:flex;justify-content:space-between;align-items:center;"
>
<div>
<div>
<h3
style=
"color:#D97706;margin:0 0 8px;"
>
📋 الاستمارة لم تُملأ بعد
</h3>
<h3
style=
"color:#059669;margin:0 0 8px;"
>
✅ تم دفع رسوم الاستمارة — جاهز لملء البيانات
</h3>
<p
style=
"color:#92400E;margin:0;font-size:14px;"
>
<p
style=
"color:#6B7280;margin:0;font-size:14px;"
>
استمارة رقم
<strong
style=
"font-size:18px;"
>
<?=
e
(
$member
->
form_number
)
?>
</strong>
استمارة رقم
<strong
style=
"font-size:18px;color:#0D7377;"
>
<?=
e
(
$member
->
form_number
)
?>
</strong>
— رسوم الاستمارة:
<strong>
<?=
money
(
$formFee
)
?>
</strong>
— إيصال:
<strong>
<?=
e
(
$formFeePayment
[
'receipt_number'
]
??
'—'
)
?>
</strong>
— المبلغ:
<strong>
<?=
money
(
$formFee
)
?>
</strong>
</p>
</p>
<p
style=
"color:#6B7280;margin:8px 0 0;font-size:13px;"
>
يجب دفع رسوم الاستمارة ثم ملء باقي البيانات
</p>
</div>
</div>
<a
href=
"/members/
<?=
(
int
)
$member
->
id
?>
/fill-form"
class=
"btn btn-primary"
style=
"padding:15px 30px;font-size:1
6px;background:#D97706;border-color:#D97706
;"
>
<a
href=
"/members/
<?=
(
int
)
$member
->
id
?>
/fill-form"
class=
"btn btn-primary"
style=
"padding:15px 30px;font-size:1
8px
;"
>
📝 ملء الاستمارة
📝 ملء الاستمارة
الآن
</a>
</a>
</div>
</div>
</div>
</div>
<?php
endif
;
?>
<?php
endif
;
?>
<!-- Member Header Card -->
<!-- Member Header Card -->
<div
class=
"card"
style=
"margin-bottom:20px;
overflow:visible;
"
>
<div
class=
"card"
style=
"margin-bottom:20px;"
>
<div
style=
"padding:25px;"
>
<div
style=
"padding:25px;"
>
<div
style=
"display:flex;justify-content:space-between;align-items:start;"
>
<div
style=
"display:flex;justify-content:space-between;align-items:start;"
>
<div>
<div>
...
@@ -51,6 +97,11 @@ $statusColor = $member->getStatusColor();
...
@@ -51,6 +97,11 @@ $statusColor = $member->getStatusColor();
<?php
if
(
$member
->
age_years
)
:
?>
<?php
if
(
$member
->
age_years
)
:
?>
<span>
🎂
<?=
(
int
)
$member
->
age_years
?>
سنة
</span>
<span>
🎂
<?=
(
int
)
$member
->
age_years
?>
سنة
</span>
<?php
endif
;
?>
<?php
endif
;
?>
<?php
if
(
$formFeePaid
)
:
?>
<span
style=
"color:#059669;"
>
✅ الرسوم مدفوعة
</span>
<?php
else
:
?>
<span
style=
"color:#DC2626;"
>
❌ الرسوم غير مدفوعة
</span>
<?php
endif
;
?>
</div>
</div>
</div>
</div>
<div
style=
"text-align:left;"
>
<div
style=
"text-align:left;"
>
...
@@ -105,23 +156,24 @@ $statusColor = $member->getStatusColor();
...
@@ -105,23 +156,24 @@ $statusColor = $member->getStatusColor();
<div
style=
"color:#6B7280;font-size:12px;"
>
إجمالي المدفوع
</div>
<div
style=
"color:#6B7280;font-size:12px;"
>
إجمالي المدفوع
</div>
</div>
</div>
</div>
</div>
<a
href=
"/payments/member/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
style=
"width:100%;text-align:center;"
>
عرض كل المدفوعات
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Quick Actions -->
<!-- Quick Actions -->
<div
class=
"card"
style=
"margin-bottom:20px;padding:15px;"
>
<div
class=
"card"
style=
"margin-bottom:20px;padding:15px;"
>
<h4
style=
"margin:0 0 10px;color:#6B7280;font-size:13px;"
>
إجراءات سريعة
</h4>
<div
style=
"display:flex;gap:10px;flex-wrap:wrap;"
>
<div
style=
"display:flex;gap:10px;flex-wrap:wrap;"
>
<?php
if
(
!
$formFilled
&&
$member
->
status
===
'potential'
)
:
?>
<?php
if
(
$formFeePaid
&&
!
$formFilled
)
:
?>
<a
href=
"/members/
<?=
(
int
)
$member
->
id
?>
/fill-form"
class=
"btn btn-primary"
>
📝 ملء الاستمارة
</a>
<a
href=
"/members/
<?=
(
int
)
$member
->
id
?>
/fill-form"
class=
"btn btn-primary"
>
📝 ملء الاستمارة
</a>
<?php
endif
;
?>
<?php
endif
;
?>
<a
href=
"/members/
<?=
(
int
)
$member
->
id
?>
/spouses/create"
class=
"btn btn-outline"
>
💍 إضافة زوج/ة
</a>
<?php
if
(
$formFilled
)
:
?>
<a
href=
"/members/
<?=
(
int
)
$member
->
id
?>
/children/create"
class=
"btn btn-outline"
>
👶 إضافة ابن/ة
</a>
<a
href=
"/members/
<?=
(
int
)
$member
->
id
?>
/spouses/create"
class=
"btn btn-outline"
>
💍 إضافة زوج/ة
</a>
<a
href=
"/payments/process/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
💰 تسجيل دفعة
</a>
<a
href=
"/members/
<?=
(
int
)
$member
->
id
?>
/children/create"
class=
"btn btn-outline"
>
👶 إضافة ابن/ة
</a>
<a
href=
"/documents/upload/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
📁 رفع مستندات
</a>
<a
href=
"/documents/upload/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
📁 رفع مستندات
</a>
<a
href=
"/interviews/schedule/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
🗓️ تحديد مقابلة
</a>
<a
href=
"/interviews/schedule/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
🗓️ تحديد مقابلة
</a>
<a
href=
"/installments/create/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
📅 خطة تقسيط
</a>
<a
href=
"/installments/create/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
📅 خطة تقسيط
</a>
<?php
endif
;
?>
<?php
if
(
$member
->
status
===
'active'
)
:
?>
<?php
if
(
$member
->
status
===
'active'
)
:
?>
<a
href=
"/carnets/issue/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
🪪 إصدار كارنيه
</a>
<a
href=
"/carnets/issue/
<?=
(
int
)
$member
->
id
?>
"
class=
"btn btn-outline"
>
🪪 إصدار كارنيه
</a>
<?php
endif
;
?>
<?php
endif
;
?>
...
@@ -226,21 +278,4 @@ $statusColor = $member->getStatusColor();
...
@@ -226,21 +278,4 @@ $statusColor = $member->getStatusColor();
</div>
</div>
</div>
</div>
<!-- Notes -->
<?php
if
(
!
empty
(
$notes
))
:
?>
<div
class=
"card"
>
<div
style=
"padding:15px 20px;border-bottom:1px solid #E5E7EB;"
>
<h3
style=
"margin:0;color:#0D7377;font-size:15px;"
>
📝 الملاحظات
</h3>
</div>
<div
style=
"padding:15px 20px;"
>
<?php
foreach
(
$notes
as
$note
)
:
?>
<div
style=
"padding:10px 0;border-bottom:1px solid #F3F4F6;"
>
<div
style=
"font-size:13px;"
>
<?=
nl2br
(
e
(
$note
[
'note_text'
]))
?>
</div>
<div
style=
"font-size:11px;color:#9CA3AF;margin-top:5px;"
>
<?=
e
(
$note
[
'employee_name'
]
??
'النظام'
)
?>
—
<?=
e
(
$note
[
'created_at'
])
?>
</div>
</div>
<?php
endforeach
;
?>
</div>
</div>
<?php
endif
;
?>
<?php
$__template
->
endSection
();
?>
<?php
$__template
->
endSection
();
?>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment