$pricing=$db->selectOne("SELECT price FROM pricing_configs WHERE branch_id = ? AND qualification_id = ? AND membership_type = 'working' AND is_active = 1 AND effective_from <= CURDATE() AND (effective_to IS NULL OR effective_to >= CURDATE()) ORDER BY effective_from DESC LIMIT 1",[(int)$member->branch_id,(int)$update['qualification_id']]);
...
...
@@ -474,6 +480,8 @@ class MemberController extends Controller
return$this->redirect('/members/'.$id)->withError('لا يمكن تعديل بيانات العضو بعد تفعيل العضوية — تواصل مع المشرف العام');
}
$salesReps=$db->select("SELECT id, code, name_ar FROM sales_representatives WHERE is_active = 1 ORDER BY name_ar",[]);
return$this->view('Members.Views.edit',[
'member'=>$member,
'branches'=>$db->select("SELECT id, name_ar FROM branches WHERE is_active = 1"),
...
...
@@ -482,6 +490,7 @@ class MemberController extends Controller
'countries'=>$db->select("SELECT nationality_ar FROM countries WHERE is_active = 1 ORDER BY name_ar"),
'isSuperAdmin'=>self::isSuperAdmin(),
'specialDiscounts'=>SpecialDiscount::allActive(),
'salesReps'=>$salesReps,
]);
}
...
...
@@ -500,7 +509,7 @@ class MemberController extends Controller
<ahref="/sa/locker-rentals"class="btn btn-outline"><idata-lucide="arrow-right"style="width:15px;height:15px;vertical-align:middle;margin-left:4px;"></i> العودة للقائمة</a>
<buttontype="submit"class="btn btn-primary"><idata-lucide="check"style="width:16px;height:16px;vertical-align:middle;margin-left:4px;"></i> إنشاء الإيجار</button>
<ahref="/sa/locker-rentals/<?=(int)$rental['id']?>"class="btn btn-outline"><idata-lucide="arrow-right"style="width:15px;height:15px;vertical-align:middle;margin-left:4px;"></i> العودة للتفاصيل</a>
<textareaname="eviction_reason"class="form-input"rows="6"requiredplaceholder="اكتب تفاصيل محضر الفض هنا... (يشمل سبب الإخلاء، حالة اللوكر، أي ملاحظات)"><?=e(old('eviction_reason'))?></textarea>
<smallstyle="color:#6B7280;font-size:11px;margin-top:4px;display:block;">هذا الحقل مطلوب. يرجى كتابة تفاصيل كافية لمحضر الفض.</small>
<buttontype="submit"class="btn btn-primary"style="background:#DC2626;border-color:#DC2626;"onclick="return confirm('هل أنت متأكد من إجراء محضر الفض؟ هذا الإجراء نهائي.');">
<ahref="/sa/locker-rentals/<?=(int)$rental['id']?>"class="btn btn-outline"><idata-lucide="arrow-right"style="width:15px;height:15px;vertical-align:middle;margin-left:4px;"></i> العودة للتفاصيل</a>
<ahref="/sa/lockers"class="btn btn-outline"><idata-lucide="arrow-right"style="width:15px;height:15px;vertical-align:middle;margin-left:4px;"></i> العودة للقائمة</a>
<inputtype="text"name="name_en"value="<?=e(old('name_en'))?>"class="form-input"maxlength="200"placeholder="Locker name in English"style="direction:ltr;text-align:left;">
<buttontype="submit"class="btn btn-primary"><idata-lucide="check"style="width:16px;height:16px;vertical-align:middle;margin-left:4px;"></i> حفظ اللوكر</button>
<ahref="/sa/lockers/<?=(int)$locker['id']?>"class="btn btn-outline"><idata-lucide="arrow-right"style="width:15px;height:15px;vertical-align:middle;margin-left:4px;"></i> العودة للتفاصيل</a>
<ahref="/sa/lockers/create"class="btn btn-primary"><idata-lucide="plus"style="width:16px;height:16px;vertical-align:middle;margin-left:4px;"></i> إضافة لوكر</a>
<buttontype="submit"class="btn btn-sm btn-outline"title="<?=(int)$locker['is_active']?'تعطيل':'تفعيل'?>"onclick="return confirm('<?=(int)$locker['is_active']?'هل أنت متأكد من تعطيل هذا اللوكر؟':'هل أنت متأكد من تفعيل هذا اللوكر؟'?>');">
<ahref="/sa/lockers/create"class="btn btn-primary"><idata-lucide="plus"style="width:16px;height:16px;vertical-align:middle;margin-left:4px;"></i> إضافة لوكر</a>
['title'=>'التصدير','body'=>'اضغط <span class="field">تصدير Excel</span> أو <span class="field">طباعة</span>.'],
],
'sales.referral-tracking'=>[
['title'=>'ربط العضو بموظف المبيعات','body'=>'عند ملء استمارة عضو جديد: في قسم <span class="field">كيف تعرفت على النادي</span>، اختر <span class="field">موظف المبيعات المُحيل</span> من القائمة المنسدلة.<span class="info">هذا الحقل اختياري — يُستخدم فقط إذا جاء العضو عن طريق مندوب مبيعات.</span>'],
['title'=>'تفعيل العضوية','body'=>'عند تفعيل العضوية (بعد الدفع)، النظام يحسب العمولة تلقائياً بناءً على نسبة المندوب المسجلة.<span class="success">العمولة تُسجل في جدول عمولات الإحالات بحالة «معلقة» تلقائياً.</span>'],
['title'=>'استعراض تقرير الإحالات','body'=>'من <span class="field">المبيعات</span> > <span class="field">تقرير الإحالات</span>. يعرض: المندوب، العضو، قيمة العضوية، نسبة العمولة، المبلغ المستحق، الحالة.'],
['title'=>'بيانات اللوكر','body'=>'أدخل <span class="field">الكود</span> (رقم/اسم فريد)، <span class="field">الاسم</span>، <span class="field">النوع</span> (عادي/كبير/VIP).<span class="info">يمكنك ربط اللوكر بمنشأة أو رياضة معينة اختيارياً.</span>'],
['title'=>'ملاحظة الموقع','body'=>'أضف <span class="field">ملاحظة الموقع</span> لتسهيل تحديد مكان اللوكر (مثال: الدور الثاني - يمين المدخل).'],
['title'=>'الحفظ والتفعيل','body'=>'اضغط <span class="field">حفظ</span>. اللوكر يصبح متاحاً للتأجير فوراً.<span class="success">يمكنك تعطيل اللوكر مؤقتاً من صفحة التفاصيل بدون حذفه.</span>'],
['title'=>'اختيار اللوكر واللاعب','body'=>'اختر <span class="field">اللوكر</span> (تظهر فقط اللوكرات المتاحة). ثم اختر <span class="field">اللاعب</span> من البحث.'],
['title'=>'تحديد مدة الإيجار','body'=>'اختر <span class="field">نوع الإيجار</span>: شهري (شهر واحد)، 6 شهور، أو سنوي. النظام يحسب تاريخ الانتهاء تلقائياً.<span class="info">المبلغ يُحدد يدوياً — يمكنك تطبيق تسعيرة مختلفة حسب نوع اللوكر.</span>'],
['title'=>'الحفظ','body'=>'اضغط <span class="field">حفظ</span>. يُنشئ النظام رقم إيجار فريد (LR-YYYYMM-XXXX) ويُسجل الإيجار بحالة «فعال».<span class="success">عند انتهاء الإيجار بدون تجديد، يدخل اللوكر فترة سماح 3 شهور تلقائياً.</span>'],
],
'facilities.locker-eviction'=>[
['title'=>'متى يتم الإخلاء؟','body'=>'بعد انتهاء فترة السماح (3 شهور من تاريخ انتهاء الإيجار) بدون تجديد أو دفع، يتحول الإيجار لحالة <span class="field">بانتظار الإخلاء</span> تلقائياً.'],
['title'=>'فتح صفحة الإخلاء','body'=>'من <span class="field">إيجارات اللوكرات</span> > اضغط <span class="field">محضر فض</span> بجانب الإيجار المطلوب.'],
['title'=>'كتابة محضر الفض','body'=>'أدخل <span class="field">سبب الإخلاء</span> بالتفصيل. هذا يُسجل كمحضر رسمي.<span class="warn">عملية الإخلاء نهائية ولا يمكن التراجع عنها — يتم تحرير اللوكر للتأجير مرة أخرى.</span>'],
['title'=>'تأكيد الإخلاء','body'=>'اضغط <span class="field">تأكيد الإخلاء</span>. يتحول الإيجار لحالة «تم الإخلاء» واللوكر يصبح متاحاً للتأجير.<span class="success">يتم حفظ تاريخ الإخلاء والموظف المسؤول تلقائياً.</span>'],