Commit 7c9f8efb authored by Mahmoud Aglan's avatar Mahmoud Aglan

Tutorials Upgrade

parent 641e4fa2
...@@ -280,7 +280,242 @@ final class TutorialRegistry ...@@ -280,7 +280,242 @@ final class TutorialRegistry
{ {
$allSteps = self::getAllSteps(); $allSteps = self::getAllSteps();
$key = $section . '.' . $slug; $key = $section . '.' . $slug;
return $allSteps[$key] ?? self::generateDefaultSteps($section, $slug); $steps = $allSteps[$key] ?? self::generateDefaultSteps($section, $slug);
if (!empty($steps) && empty($steps[0]['screenshot'])) {
$screenshot = self::getStepScreenshot($section, $slug);
if ($screenshot) {
$steps[0]['screenshot'] = $screenshot;
}
}
return $steps;
}
private static function getStepScreenshot(string $section, string $slug): ?string
{
$map = [
'accounting.setup-chart-of-accounts' => 'accounting-coa.png',
'accounting.create-journal-entry' => 'accounting-journal.png',
'accounting.bank-reconciliation' => 'accounting-bank.png',
'accounting.trial-balance-report' => 'accounting-trial-balance.png',
'accounting.budget-management' => 'accounting-dashboard.png',
'accounting.fiscal-year-setup' => 'accounting-fiscal.png',
'accounting.cost-centers' => 'accounting-cost-centers.png',
'accounting.opening-entries' => 'accounting-journal.png',
'accounting.period-closing' => 'accounting-fiscal.png',
'accounting.financial-instruments' => 'accounting-settlements.png',
'hr.add-employee' => 'hr-employees.png',
'hr.attendance-management' => 'hr-attendance.png',
'hr.leave-request' => 'hr-leaves.png',
'hr.run-payroll' => 'hr-payroll.png',
'hr.end-of-service' => 'hr-employees.png',
'hr.create-contract' => 'hr-contracts.png',
'hr.insurance-management' => 'hr-employees.png',
'hr.disciplinary-action' => 'hr-employees.png',
'hr.employee-loan' => 'hr-loans.png',
'hr.overtime-management' => 'hr-overtime.png',
'procurement.create-purchase-requisition' => 'procurement-pr.png',
'procurement.receive-goods' => 'procurement-grn.png',
'procurement.vendor-invoice' => 'procurement-invoices.png',
'procurement.vendor-payment' => 'procurement-dashboard.png',
'procurement.return-to-vendor' => 'procurement-grn.png',
'procurement.request-for-quotation' => 'procurement-quotes.png',
'inventory.setup-warehouse' => 'inventory-warehouses.png',
'inventory.add-item' => 'inventory-items.png',
'inventory.stock-movement' => 'inventory-movements.png',
'inventory.stock-audit' => 'inventory-items.png',
'inventory.opening-balance' => 'inventory-opening.png',
'inventory.stock-transfer' => 'inventory-movements.png',
'inventory.purchase-order' => 'inventory-po.png',
'inventory.manage-suppliers' => 'inventory-suppliers.png',
'inventory.asset-management' => 'inventory-assets.png',
'cashier.process-payment-queue' => 'cashier-queue.png',
'cashier.void-payment' => 'cashier-queue.png',
'cashier.check-management' => 'cashier-deposits.png',
'cashier.daily-report' => 'cashier-queue.png',
'cashier.session-open' => 'cashier-queue.png',
'cashier.session-close' => 'cashier-queue.png',
'cashier.settlement-flow' => 'cashier-settlements.png',
'cashier.custody-tracking' => 'treasury-dashboard.png',
'sales.pos-transaction' => 'sales-pos.png',
'sales.create-package' => 'sales-packages.png',
'sales.sales-commission' => 'sales-list.png',
'sales.daily-sales-report' => 'sales-list.png',
'sales.referral-tracking' => 'sales-list.png',
'payments.payment-types-overview' => 'payments-list.png',
'payments.issue-receipt' => 'receipts-list.png',
'payments.void-workflow' => 'payments-list.png',
'coaches.register-coach' => 'sa-coaches.png',
'coaches.assign-discipline' => 'sa-coaches.png',
'coaches.coach-schedule' => 'sa-coaches.png',
'coaches.coach-performance' => 'sa-coaches.png',
'coaches.coach-type-academy' => 'sa-coaches.png',
'coaches.guarantee-report' => 'sa-coaches.png',
'carnets.carnet-issuance-conditions' => 'carnets-list.png',
'carnets.print-carnet' => 'carnets-list.png',
'carnets.deactivate-carnet' => 'carnets-list.png',
'carnets.dependent-carnet-issuance' => 'carnets-list.png',
'carnets.guest-entry' => 'guest-entries.png',
'facilities.create-facility' => 'sa-facilities.png',
'facilities.manage-units' => 'sa-facilities.png',
'facilities.maintenance-schedule' => 'sa-facilities.png',
'facilities.booking-rules' => 'sa-facilities.png',
'facilities.locker-setup' => 'sa-lockers.png',
'facilities.locker-rental' => 'sa-lockers.png',
'facilities.locker-eviction' => 'sa-lockers.png',
'facilities.locker-payment' => 'sa-lockers.png',
'facilities.locker-renewal' => 'sa-lockers.png',
'tournaments.create-tournament' => 'tournaments-list.png',
'tournaments.tournament-registration' => 'tournaments-list.png',
'tournaments.generate-bracket' => 'tournaments-list.png',
'tournaments.record-match-result' => 'tournaments-list.png',
'rentals.setup-rental-entity' => 'sa-lockers.png',
'rentals.create-rental-contract' => 'sa-lockers.png',
'rentals.rental-deposit' => 'sa-lockers.png',
'rentals.rental-invoicing' => 'sa-lockers.png',
'support.create-ticket' => 'support-tickets.png',
'support.assign-ticket' => 'support-tickets.png',
'support.resolve-ticket' => 'support-tickets.png',
'support.sla-monitoring' => 'support-tickets.png',
'settings.system-configuration' => 'settings-main.png',
'settings.branding-setup' => 'settings-main.png',
'settings.receipt-design' => 'settings-main.png',
'settings.appearance' => 'settings-main.png',
'fines.impose-fine' => 'violations-list.png',
'fines.fine-types-setup' => 'violations-list.png',
'fines.fine-escalation' => 'violations-list.png',
'fines.fine-payment' => 'violations-list.png',
'roles.create-role' => 'roles-list.png',
'roles.assign-permissions' => 'roles-list.png',
'roles.assign-role-to-user' => 'users-list.png',
'roles.custom-permissions' => 'roles-list.png',
'roles.cashier-roles' => 'roles-list.png',
'roles.sports-roles' => 'roles-list.png',
'interviews.schedule-interview' => 'interviews-list.png',
'interviews.conduct-interview' => 'interviews-list.png',
'interviews.interview-results' => 'interviews-list.png',
'installments.create-installment-plan' => 'installments-list.png',
'installments.payment-schedule' => 'installments-list.png',
'installments.collect-installment' => 'installments-list.png',
'installments.overdue-monitoring' => 'installments-list.png',
'installments.cheque-submission' => 'installments-list.png',
'reports.report-types' => 'reports-main.png',
'reports.apply-filters' => 'reports-main.png',
'reports.export-report' => 'reports-main.png',
'reports.schedule-report' => 'reports-main.png',
'seasonal.setup-season' => 'seasonal-list.png',
'seasonal.seasonal-pricing' => 'seasonal-list.png',
'seasonal.seasonal-registration' => 'seasonal-list.png',
'seasonal.seasonal-report' => 'seasonal-list.png',
'documents.upload-document' => 'documents-list.png',
'documents.categorize-document' => 'documents-list.png',
'documents.verify-document' => 'documents-list.png',
'branches.create-branch' => 'branches-list.png',
'branches.branch-configuration' => 'branches-list.png',
'branches.branch-transfer' => 'branches-list.png',
'news.create-article' => 'dashboard.png',
'news.publish-article' => 'dashboard.png',
'news.manage-categories' => 'dashboard.png',
'workflow.create-workflow-rule' => 'workflows-overview.png',
'workflow.approval-chain' => 'workflows-overview.png',
'workflow.process-approval' => 'workflows-overview.png',
'workflow.workflow-monitoring' => 'workflows-overview.png',
'subscriptions.generate-annual' => 'subscriptions-list.png',
'subscriptions.collect-subscription' => 'subscriptions-list.png',
'subscriptions.subscription-tracking' => 'subscriptions-list.png',
'subscriptions.subscription-exemption' => 'subscriptions-list.png',
'reservations.create-booking' => 'reservations-list.png',
'reservations.calendar-view' => 'reservations-calendar.png',
'reservations.cancel-booking' => 'reservations-list.png',
'reservations.recurring-booking' => 'reservations-list.png',
'match-center.create-live-match' => 'sa-mirror.png',
'match-center.track-events' => 'sa-mirror.png',
'match-center.match-scoring' => 'sa-mirror.png',
'pool-management.setup-pool' => 'sa-pool-grid.png',
'pool-management.manage-lanes' => 'sa-pool-grid.png',
'pool-management.pool-scheduling' => 'sa-pool-grid.png',
'pool-management.pool-maintenance' => 'sa-pool-grid.png',
'users.create-user' => 'users-list.png',
'users.edit-user' => 'users-list.png',
'users.manage-user-permissions' => 'roles-list.png',
'users.user-activity-log' => 'audit-log.png',
'notifications.create-template' => 'notifications-templates.png',
'notifications.setup-trigger' => 'notifications-templates.png',
'notifications.send-manual' => 'notifications-log.png',
'notifications.notification-log' => 'notifications-log.png',
'player-affairs.register-player' => 'sa-players.png',
'player-affairs.player-evaluation' => 'sa-players.png',
'player-affairs.record-injury' => 'sa-players.png',
'player-affairs.fitness-test' => 'sa-players.png',
'player-affairs.medical-approval' => 'sa-players.png',
'forms.build-form' => 'forms-list.png',
'forms.fill-form' => 'forms-list.png',
'forms.review-submissions' => 'forms-list.png',
'forms.print-form' => 'forms-list.png',
'pricing-management.setup-pricing-rules' => 'pricing-management.png',
'pricing-management.special-discounts' => 'pricing-management.png',
'pricing-management.edit-pricing' => 'pricing-management.png',
'audit.view-audit-log' => 'audit-log.png',
'audit.entity-history' => 'audit-log.png',
'audit.filter-audit' => 'audit-log.png',
'playgrounds.create-playground' => 'sa-mirror.png',
'playgrounds.playground-schedule' => 'sa-mirror.png',
'playgrounds.playground-mirror' => 'sa-mirror.png',
'playgrounds.playground-attendance' => 'sa-attendance.png',
'sa-registration.registration-wizard' => 'sa-registration.png',
'sa-registration.card-management' => 'sa-cards.png',
'sa-registration.gate-scanning' => 'sa-gate.png',
'sa-registration.registration-reports' => 'sa-registration.png',
'sa-registration.temp-card-workflow' => 'sa-cards.png',
'sa-registration.booking-wizard' => 'sa-booking-wizard.png',
'sa-registration.academy-pricing' => 'sa-pricing.png',
];
return $map[$section . '.' . $slug] ?? self::getScreenshot($section);
}
public static function getScreenshot(string $section): ?string
{
$map = [
'accounting' => 'accounting-dashboard.png',
'hr' => 'hr-employees.png',
'procurement' => 'procurement-dashboard.png',
'inventory' => 'inventory-items.png',
'cashier' => 'cashier-queue.png',
'sales' => 'sales-pos.png',
'payments' => 'payments-list.png',
'coaches' => 'sa-coaches.png',
'carnets' => 'carnets-list.png',
'facilities' => 'sa-facilities.png',
'tournaments' => 'tournaments-list.png',
'rentals' => 'sa-lockers.png',
'support' => 'support-tickets.png',
'settings' => 'settings-main.png',
'fines' => 'violations-list.png',
'roles' => 'roles-list.png',
'interviews' => 'interviews-list.png',
'installments' => 'installments-list.png',
'reports' => 'reports-main.png',
'seasonal' => 'seasonal-list.png',
'documents' => 'documents-list.png',
'branches' => 'branches-list.png',
'workflow' => 'workflows-overview.png',
'subscriptions' => 'subscriptions-list.png',
'reservations' => 'reservations-list.png',
'match-center' => 'sa-mirror.png',
'pool-management' => 'sa-pool-grid.png',
'users' => 'users-list.png',
'notifications' => 'notifications-log.png',
'player-affairs' => 'sa-players.png',
'forms' => 'forms-list.png',
'pricing-management' => 'pricing-management.png',
'audit' => 'audit-log.png',
'playgrounds' => 'sa-mirror.png',
'sa-registration' => 'sa-registration.png',
'news' => 'dashboard.png',
];
return $map[$section] ?? null;
} }
private static function generateDefaultSteps(string $section, string $slug): array private static function generateDefaultSteps(string $section, string $slug): array
...@@ -293,9 +528,10 @@ final class TutorialRegistry ...@@ -293,9 +528,10 @@ final class TutorialRegistry
$sections = self::getSections(); $sections = self::getSections();
$sectionTitle = $sections[$section]['title'] ?? $section; $sectionTitle = $sections[$section]['title'] ?? $section;
$screenshotFile = self::getScreenshot($section);
return [ return [
['title' => 'فتح الصفحة', 'body' => 'من القائمة الجانبية: <span class="field">' . $sectionTitle . '</span> > <span class="field">' . $tutorial['title'] . '</span>.'], ['title' => 'فتح الصفحة', 'body' => 'من القائمة الجانبية: <span class="field">' . $sectionTitle . '</span> > <span class="field">' . $tutorial['title'] . '</span>.', 'screenshot' => $screenshotFile],
['title' => 'ملء البيانات المطلوبة', 'body' => 'أكمل جميع الحقول المطلوبة (المحددة بعلامة <span style="color:#DC2626;">*</span>).<span class="info">تأكد من صحة البيانات قبل الحفظ — بعض الحقول لا يمكن تعديلها لاحقاً.</span>'], ['title' => 'ملء البيانات المطلوبة', 'body' => 'أكمل جميع الحقول المطلوبة (المحددة بعلامة <span style="color:#DC2626;">*</span>).<span class="info">تأكد من صحة البيانات قبل الحفظ — بعض الحقول لا يمكن تعديلها لاحقاً.</span>'],
['title' => 'المراجعة والحفظ', 'body' => 'راجع البيانات ثم اضغط <span class="field">حفظ</span>.<span class="success">عند النجاح ستظهر رسالة تأكيد ويتم تحويلك للصفحة التالية تلقائياً.</span>'], ['title' => 'المراجعة والحفظ', 'body' => 'راجع البيانات ثم اضغط <span class="field">حفظ</span>.<span class="success">عند النجاح ستظهر رسالة تأكيد ويتم تحويلك للصفحة التالية تلقائياً.</span>'],
]; ];
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إضافة أبناء</h1><p>إضافة أبناء مع التصنيف التلقائي</p></div> <div><h1>إضافة أبناء</h1><p>إضافة أبناء مع التصنيف التلقائي</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">تصنيف الأبناء بالعمر</h3><div class="tut-step-body"><div class="tut-diagram">الفئة العمرية │ الرسوم │ الحالة <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">تصنيف الأبناء بالعمر</h3><div class="tut-step-body"><div class="tut-diagram">الفئة العمرية │ الرسوم │ الحالة
──────────────────┼─────────────────────┼────────────── ──────────────────┼─────────────────────┼──────────────
أقل من 5 سنوات │ مجاناً │ طفل (لا كارنيه) أقل من 5 سنوات │ مجاناً │ طفل (لا كارنيه)
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إضافة زوج/زوجة</h1><p>إضافة زوجة للعضوية مع حساب الرسوم</p></div> <div><h1>إضافة زوج/زوجة</h1><p>إضافة زوجة للعضوية مع حساب الرسوم</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">قواعد إضافة الزوج/الزوجة</h3><div class="tut-step-body"><div class="tut-diagram">رسوم إضافة الزوج/الزوجة: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">قواعد إضافة الزوج/الزوجة</h3><div class="tut-step-body"><div class="tut-diagram">رسوم إضافة الزوج/الزوجة:
───────────────────────────────────────── ─────────────────────────────────────────
الزوجة الأولى: مجاناً (0%) الزوجة الأولى: مجاناً (0%)
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إضافة عضو مؤقت</h1><p>والدين أو أشقاء أو مربية</p></div> <div><h1>إضافة عضو مؤقت</h1><p>والدين أو أشقاء أو مربية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/temporary-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">أنواع الأعضاء المؤقتين</h3><div class="tut-step-body"><div class="tut-diagram">النوع │ الرسوم الشهرية │ ملاحظات <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">أنواع الأعضاء المؤقتين</h3><div class="tut-step-body"><div class="tut-diagram">النوع │ الرسوم الشهرية │ ملاحظات
───────────────┼─────────────────┼──────────────────────── ───────────────┼─────────────────┼────────────────────────
والد/والدة │ 500 ج.م/شهر │ يحتاج إثبات قرابة والد/والدة │ 500 ج.م/شهر │ يحتاج إثبات قرابة
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>الاشتراك السنوي</h1><p>توليد وتحصيل الاشتراكات السنوية</p></div> <div><h1>الاشتراك السنوي</h1><p>توليد وتحصيل الاشتراكات السنوية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/subscriptions-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الاشتراك السنوي</h3><div class="tut-step-body">كل عضو فعال يُطالب باشتراك سنوي لتجديد العضوية: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الاشتراك السنوي</h3><div class="tut-step-body">كل عضو فعال يُطالب باشتراك سنوي لتجديد العضوية:
<ul> <ul>
<li>يُستحق في بداية كل سنة ميلادية</li> <li>يُستحق في بداية كل سنة ميلادية</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تحويل لاعب لعضو</h1><p>تحويل عضوية رياضية لعاملة</p></div> <div><h1>تحويل لاعب لعضو</h1><p>تحويل عضوية رياضية لعاملة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هو التحويل الرياضي؟</h3><div class="tut-step-body">اللاعب الرياضي (عضوية رياضية) يمكنه التحويل لعضوية عاملة كاملة: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هو التحويل الرياضي؟</h3><div class="tut-step-body">اللاعب الرياضي (عضوية رياضية) يمكنه التحويل لعضوية عاملة كاملة:
<ul> <ul>
<li>يدفع <strong>50% فقط</strong> من قيمة العضوية العاملة</li> <li>يدفع <strong>50% فقط</strong> من قيمة العضوية العاملة</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إصدار الكارنيه</h1><p>شروط وإجراءات طباعة الكارنيه</p></div> <div><h1>إصدار الكارنيه</h1><p>شروط وإجراءات طباعة الكارنيه</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/carnets-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">شروط الإصدار</h3><div class="tut-step-body">لا يُصدر الكارنيه إلا إذا: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">شروط الإصدار</h3><div class="tut-step-body">لا يُصدر الكارنيه إلا إذا:
<ul> <ul>
<li>✅ العضوية <span class="field">فعالة (active)</span></li> <li>✅ العضوية <span class="field">فعالة (active)</span></li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تغيير حالة العضوية</h1><p>دورة الحالات من محتمل حتى فعال</p></div> <div><h1>تغيير حالة العضوية</h1><p>دورة الحالات من محتمل حتى فعال</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">خريطة الحالات</h3><div class="tut-step-body"><div class="tut-diagram">potential (محتمل) <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">خريطة الحالات</h3><div class="tut-step-body"><div class="tut-diagram">potential (محتمل)
├─→ under_review (تحت المراجعة) ← بعد دفع الاستمارة ├─→ under_review (تحت المراجعة) ← بعد دفع الاستمارة
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تقادم أعمار الأبناء</h1><p>التجميد التلقائي والفصل عند بلوغ 25</p></div> <div><h1>تقادم أعمار الأبناء</h1><p>التجميد التلقائي والفصل عند بلوغ 25</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">المتابعة التلقائية</h3><div class="tut-step-body">النظام يراقب أعمار الأبناء تلقائياً ويقوم بـ: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">المتابعة التلقائية</h3><div class="tut-step-body">النظام يراقب أعمار الأبناء تلقائياً ويقوم بـ:
<ul> <ul>
<li><strong>تحديث الفئة</strong> — عند الانتقال بين الفئات العمرية (ناشئ → شاب → بالغ)</li> <li><strong>تحديث الفئة</strong> — عند الانتقال بين الفئات العمرية (ناشئ → شاب → بالغ)</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>الفاتورة المجمعة وتفعيل التابعين</h1><p>دفع العضوية يفعّل العضو وجميع تابعيه دفعة واحدة</p></div> <div><h1>الفاتورة المجمعة وتفعيل التابعين</h1><p>دفع العضوية يفعّل العضو وجميع تابعيه دفعة واحدة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/cashier-queue.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هي الفاتورة المجمعة؟</h3><div class="tut-step-body"> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هي الفاتورة المجمعة؟</h3><div class="tut-step-body">
الفاتورة المجمعة تظهر في ملف العضو بعد ملء الاستمارة وإضافة أفراد الأسرة. تشمل: الفاتورة المجمعة تظهر في ملف العضو بعد ملء الاستمارة وإضافة أفراد الأسرة. تشمل:
<ul> <ul>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تحويل عند الوفاة</h1><p>نقل العضوية للزوج/الزوجة</p></div> <div><h1>تحويل عند الوفاة</h1><p>نقل العضوية للزوج/الزوجة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/transfers-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">القواعد</h3><div class="tut-step-body">عند وفاة العضو: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">القواعد</h3><div class="tut-step-body">عند وفاة العضو:
<ul> <ul>
<li>العضوية تُنقل <strong>تلقائياً</strong> للزوج/الزوجة</li> <li>العضوية تُنقل <strong>تلقائياً</strong> للزوج/الزوجة</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تحويل عند الطلاق</h1><p>نقل العضوية بعد الطلاق</p></div> <div><h1>تحويل عند الطلاق</h1><p>نقل العضوية بعد الطلاق</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/transfers-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">القواعد</h3><div class="tut-step-body">عند الطلاق: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">القواعد</h3><div class="tut-step-body">عند الطلاق:
<ul> <ul>
<li>العضوية تبقى باسم <strong>صاحب العضوية الأصلي</strong></li> <li>العضوية تبقى باسم <strong>صاحب العضوية الأصلي</strong></li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>ملء استمارة العضوية</h1><p>إكمال البيانات الشخصية والمهنية</p></div> <div><h1>ملء استمارة العضوية</h1><p>إكمال البيانات الشخصية والمهنية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-create.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح ملء الاستمارة</h3><div class="tut-step-body">من ملف العضو اضغط <span class="field">ملء الاستمارة</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح ملء الاستمارة</h3><div class="tut-step-body">من ملف العضو اضغط <span class="field">ملء الاستمارة</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">البيانات الشخصية</h3><div class="tut-step-body"><ul> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">البيانات الشخصية</h3><div class="tut-step-body"><ul>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>المخالفات والغرامات</h1><p>فرض غرامة وتصعيد العقوبات</p></div> <div><h1>المخالفات والغرامات</h1><p>فرض غرامة وتصعيد العقوبات</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/violations-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">أنواع المخالفات</h3><div class="tut-step-body"><div class="tut-diagram">المخالفة │ الغرامة │ التصعيد <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">أنواع المخالفات</h3><div class="tut-step-body"><div class="tut-diagram">المخالفة │ الغرامة │ التصعيد
────────────────────┼────────────────┼───────────────────── ────────────────────┼────────────────┼─────────────────────
سلوك غير لائق │ 500 ج.م │ مرة 2: تحذير رسمي سلوك غير لائق │ 500 ج.م │ مرة 2: تحذير رسمي
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>العضوية الأجنبية</h1><p>عضوية لغير المصريين بـ 10,000$</p></div> <div><h1>العضوية الأجنبية</h1><p>عضوية لغير المصريين بـ 10,000$</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الشروط</h3><div class="tut-step-body"><ul> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الشروط</h3><div class="tut-step-body"><ul>
<li>المتقدم <strong>غير مصري الجنسية</strong></li> <li>المتقدم <strong>غير مصري الجنسية</strong></li>
<li>إقامة سارية في مصر</li> <li>إقامة سارية في مصر</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>سيناريو كامل: عضو جديد</h1><p>من التسجيل حتى استلام الكارنيه</p></div> <div><h1>سيناريو كامل: عضو جديد</h1><p>من التسجيل حتى استلام الكارنيه</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-create.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الخطوة 1: التسجيل</h3><div class="tut-step-body">عضو جديد يأتي للنادي: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الخطوة 1: التسجيل</h3><div class="tut-step-body">عضو جديد يأتي للنادي:
<ul> <ul>
<li>موظف شئون العضوية يُنشئ سجل عضو جديد</li> <li>موظف شئون العضوية يُنشئ سجل عضو جديد</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>العضوية الشرفية</h1><p>عضوية بدون رسوم بقرار مجلس</p></div> <div><h1>العضوية الشرفية</h1><p>عضوية بدون رسوم بقرار مجلس</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هي العضوية الشرفية؟</h3><div class="tut-step-body"><ul> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هي العضوية الشرفية؟</h3><div class="tut-step-body"><ul>
<li>عضوية مجانية بالكامل (بدون رسوم عضوية أو اشتراك سنوي)</li> <li>عضوية مجانية بالكامل (بدون رسوم عضوية أو اشتراك سنوي)</li>
<li>تُمنح بقرار مجلس الإدارة فقط</li> <li>تُمنح بقرار مجلس الإدارة فقط</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>المقابلات</h1><p>جدولة وإجراء مقابلة العضوية</p></div> <div><h1>المقابلات</h1><p>جدولة وإجراء مقابلة العضوية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/interviews-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">متى تُجدول المقابلة</h3><div class="tut-step-body">بعد: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">متى تُجدول المقابلة</h3><div class="tut-step-body">بعد:
<ul> <ul>
<li>دفع رسوم الاستمارة ✓</li> <li>دفع رسوم الاستمارة ✓</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>التجميد والإسقاط</h1><p>تجميد العضوية أو إسقاطها</p></div> <div><h1>التجميد والإسقاط</h1><p>تجميد العضوية أو إسقاطها</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">التجميد (Freeze)</h3><div class="tut-step-body">تعليق مؤقت للعضوية: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">التجميد (Freeze)</h3><div class="tut-step-body">تعليق مؤقت للعضوية:
<ul> <ul>
<li><strong>تجميد إداري</strong> — بقرار الإدارة (مخالفة / عدم سداد)</li> <li><strong>تجميد إداري</strong> — بقرار الإدارة (مخالفة / عدم سداد)</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تسعير العضوية</h1><p>حساب قيمة العضوية حسب المؤهل</p></div> <div><h1>تسعير العضوية</h1><p>حساب قيمة العضوية حسب المؤهل</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/pricing-management.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">آلية التسعير</h3><div class="tut-step-body">النظام يحدد قيمة العضوية تلقائياً بناءً على مؤهل العضو: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">آلية التسعير</h3><div class="tut-step-body">النظام يحدد قيمة العضوية تلقائياً بناءً على مؤهل العضو:
<div class="tut-diagram">المؤهل │ قيمة العضوية <div class="tut-diagram">المؤهل │ قيمة العضوية
──────────────────┼───────────── ──────────────────┼─────────────
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تسجيل عضو جديد</h1><p>إنشاء استمارة عضوية من الصفر</p></div> <div><h1>تسجيل عضو جديد</h1><p>إنشاء استمارة عضوية من الصفر</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/members-create.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة الأعضاء</h3><div class="tut-step-body">من القائمة الجانبية: <span class="field">شئون العضوية</span> > <span class="field">الأعضاء</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة الأعضاء</h3><div class="tut-step-body">من القائمة الجانبية: <span class="field">شئون العضوية</span> > <span class="field">الأعضاء</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إنشاء عضو جديد</h3><div class="tut-step-body">اضغط زر <span class="field">إضافة عضو جديد</span> في أعلى الصفحة.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إنشاء عضو جديد</h3><div class="tut-step-body">اضغط زر <span class="field">إضافة عضو جديد</span> في أعلى الصفحة.</div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>دفع رسوم الاستمارة</h1><p>إرسال طلب دفع 505 ج.م للخزينة</p></div> <div><h1>دفع رسوم الاستمارة</h1><p>إرسال طلب دفع 505 ج.م للخزينة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/cashier-queue.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح ملف العضو</h3><div class="tut-step-body">من قائمة الأعضاء اضغط على اسم العضو لفتح ملفه.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح ملف العضو</h3><div class="tut-step-body">من قائمة الأعضاء اضغط على اسم العضو لفتح ملفه.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">طلب دفع الاستمارة</h3><div class="tut-step-body">اضغط زر <span class="field">دفع رسوم الاستمارة</span>.<br>النظام يُنشئ طلب دفع بقيمة <strong>505 ج.م</strong> (500 رسوم + 5 دمغة). <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">طلب دفع الاستمارة</h3><div class="tut-step-body">اضغط زر <span class="field">دفع رسوم الاستمارة</span>.<br>النظام يُنشئ طلب دفع بقيمة <strong>505 ج.م</strong> (500 رسوم + 5 دمغة).
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>دفع العضوية كاش</h1><p>سداد قيمة العضوية دفعة واحدة</p></div> <div><h1>دفع العضوية كاش</h1><p>سداد قيمة العضوية دفعة واحدة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/cashier-queue.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح شاشة الدفع</h3><div class="tut-step-body">من ملف العضو (بعد القبول) اضغط <span class="field">دفع قيمة العضوية</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح شاشة الدفع</h3><div class="tut-step-body">من ملف العضو (بعد القبول) اضغط <span class="field">دفع قيمة العضوية</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">مراجعة الفاتورة</h3><div class="tut-step-body">النظام يعرض: <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">مراجعة الفاتورة</h3><div class="tut-step-body">النظام يعرض:
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>دفع العضوية بالتقسيط</h1><p>مقدم 25% وتقسيط حتى 30 شهر</p></div> <div><h1>دفع العضوية بالتقسيط</h1><p>مقدم 25% وتقسيط حتى 30 شهر</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/installments-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">شروط التقسيط</h3><div class="tut-step-body"><div class="tut-diagram">نظام التقسيط: <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">شروط التقسيط</h3><div class="tut-step-body"><div class="tut-diagram">نظام التقسيط:
───────────────────────────────────────── ─────────────────────────────────────────
المقدم: 25% من إجمالي المبلغ المقدم: 25% من إجمالي المبلغ
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إدارة طابور الدفع</h1><p>إلغاء طلبات الدفع وإعادتها للطابور</p></div> <div><h1>إدارة طابور الدفع</h1><p>إلغاء طلبات الدفع وإعادتها للطابور</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/cashier-queue.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">كيف يعمل طابور الدفع</h3><div class="tut-step-body"> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">كيف يعمل طابور الدفع</h3><div class="tut-step-body">
عند طلب أي دفعة (استمارة، عضوية، إضافة تابع) يتم إنشاء <strong>طلب دفع</strong> يظهر في شاشة الخزينة. عند طلب أي دفعة (استمارة، عضوية، إضافة تابع) يتم إنشاء <strong>طلب دفع</strong> يظهر في شاشة الخزينة.
<div class="tut-diagram"> <div class="tut-diagram">
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>الخصومات الخاصة</h1><p>تطبيق خصم خاص أو عرض مجلس الإدارة</p></div> <div><h1>الخصومات الخاصة</h1><p>تطبيق خصم خاص أو عرض مجلس الإدارة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/pricing-management.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">أنواع الخصومات</h3><div class="tut-step-body"><ul> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">أنواع الخصومات</h3><div class="tut-step-body"><ul>
<li><strong>خصم مجلس الإدارة</strong> — نسبة أو مبلغ ثابت بقرار</li> <li><strong>خصم مجلس الإدارة</strong> — نسبة أو مبلغ ثابت بقرار</li>
<li><strong>عرض موسمي</strong> — خصم لفترة محددة</li> <li><strong>عرض موسمي</strong> — خصم لفترة محددة</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>فصل الأبناء</h1><p>فصل ابن/ابنة لعضوية مستقلة</p></div> <div><h1>فصل الأبناء</h1><p>فصل ابن/ابنة لعضوية مستقلة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/transfers-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">حالات الفصل</h3><div class="tut-step-body"><ul> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">حالات الفصل</h3><div class="tut-step-body"><ul>
<li><strong>فصل تلقائي</strong> — عند بلوغ 25 سنة</li> <li><strong>فصل تلقائي</strong> — عند بلوغ 25 سنة</li>
<li><strong>فصل اختياري</strong> — بطلب من العضو أو الابن</li> <li><strong>فصل اختياري</strong> — بطلب من العضو أو الابن</li>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>التنازل عن العضوية</h1><p>تنازل لشخص آخر مع رسوم 30%</p></div> <div><h1>التنازل عن العضوية</h1><p>تنازل لشخص آخر مع رسوم 30%</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/transfers-list.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هو التنازل؟</h3><div class="tut-step-body">التنازل هو نقل العضوية طوعياً لشخص آخر (ليس قريباً بالضرورة): <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هو التنازل؟</h3><div class="tut-step-body">التنازل هو نقل العضوية طوعياً لشخص آخر (ليس قريباً بالضرورة):
<ul> <ul>
<li>رسوم التنازل: <strong>30% من القيمة السوقية الحالية للعضوية</strong></li> <li>رسوم التنازل: <strong>30% من القيمة السوقية الحالية للعضوية</strong></li>
......
...@@ -24,6 +24,11 @@ ...@@ -24,6 +24,11 @@
<div class="tut-step-num"><?= $num ?></div> <div class="tut-step-num"><?= $num ?></div>
<h3 class="tut-step-title"><?= e($step['title']) ?></h3> <h3 class="tut-step-title"><?= e($step['title']) ?></h3>
<div class="tut-step-body"><?= $step['body'] ?></div> <div class="tut-step-body"><?= $step['body'] ?></div>
<?php if (!empty($step['screenshot'])): ?>
<div style="margin-top:12px;border:1px solid #E5E7EB;border-radius:10px;overflow:hidden;">
<img src="/assets/tutorials/screenshots/<?= e($step['screenshot']) ?>" alt="<?= e($step['title']) ?>" style="width:100%;display:block;" loading="lazy">
</div>
<?php endif; ?>
</div> </div>
<?php $num++; endforeach; ?> <?php $num++; endforeach; ?>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>حجب مواعيد (صيانة)</h1><p>إغلاق مرفق لفترة صيانة أو إجازة</p></div> <div><h1>حجب مواعيد (صيانة)</h1><p>إغلاق مرفق لفترة صيانة أو إجازة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-facilities.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح حجب المواعيد</h3><div class="tut-step-body">من صفحة المرفق > <span class="field">حجب مواعيد</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح حجب المواعيد</h3><div class="tut-step-body">من صفحة المرفق > <span class="field">حجب مواعيد</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">نوع الحجب</h3><div class="tut-step-body"><ul><li><strong>كامل المرفق:</strong> facility_unit_id = NULL (كل الوحدات)</li><li><strong>وحدة محددة:</strong> حارة معينة أو ملعب واحد</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">نوع الحجب</h3><div class="tut-step-body"><ul><li><strong>كامل المرفق:</strong> facility_unit_id = NULL (كل الوحدات)</li><li><strong>وحدة محددة:</strong> حارة معينة أو ملعب واحد</li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">التاريخ والوقت</h3><div class="tut-step-body"><ul><li><span class="field">blackout_date</span> — التاريخ</li><li><span class="field">start_time / end_time</span> — حجب جزئي (ساعات محددة)</li><li>NULL = حجب يوم كامل</li></ul><span class="field">reason</span> — السبب (مثل: صيانة دورية / إجازة عيد)</div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">التاريخ والوقت</h3><div class="tut-step-body"><ul><li><span class="field">blackout_date</span> — التاريخ</li><li><span class="field">start_time / end_time</span> — حجب جزئي (ساعات محددة)</li><li>NULL = حجب يوم كامل</li></ul><span class="field">reason</span> — السبب (مثل: صيانة دورية / إجازة عيد)</div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>حجز حارة سباحة (مشترك)</h1><p>حجز أماكن في حارة مع آخرين</p></div> <div><h1>حجز حارة سباحة (مشترك)</h1><p>حجز أماكن في حارة مع آخرين</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-pool-grid.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الفرق عن الحجز العادي</h3><div class="tut-step-body">حارات السباحة بنظام <span class="field">shared</span> — أكثر من حجز ممكن في نفس الوقت طالما في أماكن متاحة.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الفرق عن الحجز العادي</h3><div class="tut-step-body">حارات السباحة بنظام <span class="field">shared</span> — أكثر من حجز ممكن في نفس الوقت طالما في أماكن متاحة.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">عرض الحالة الحالية</h3><div class="tut-step-body">عند اختيار الحارة والوقت، النظام يعرض: كم مكان متاح (<span class="field">max_capacity - occupied</span>).</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">عرض الحالة الحالية</h3><div class="tut-step-body">عند اختيار الحارة والوقت، النظام يعرض: كم مكان متاح (<span class="field">max_capacity - occupied</span>).</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">تحديد الأماكن</h3><div class="tut-step-body">حدد <span class="field">spots_reserved</span> (عدد الأماكن المطلوبة). الفحص: هل المتبقي يكفي؟<div class="tut-diagram">حارة 3 — السعة القصوى: 8 أشخاص (16:00-17:00) <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">تحديد الأماكن</h3><div class="tut-step-body">حدد <span class="field">spots_reserved</span> (عدد الأماكن المطلوبة). الفحص: هل المتبقي يكفي؟<div class="tut-diagram">حارة 3 — السعة القصوى: 8 أشخاص (16:00-17:00)
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تحصيل اشتراك</h1><p>تسجيل دفع اشتراك لاعب</p></div> <div><h1>تحصيل اشتراك</h1><p>تسجيل دفع اشتراك لاعب</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-subscriptions.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">عرض المتأخرين</h3><div class="tut-step-body">من <span class="field">الاشتراكات</span> > فلتر حسب الحالة (<span class="field">unpaid</span> أو <span class="field">overdue</span>).</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">عرض المتأخرين</h3><div class="tut-step-body">من <span class="field">الاشتراكات</span> > فلتر حسب الحالة (<span class="field">unpaid</span> أو <span class="field">overdue</span>).</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">تحصيل الاشتراك</h3><div class="tut-step-body">اختر الاشتراك > <span class="field">تحصيل</span> > أدخل المبلغ المدفوع.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">تحصيل الاشتراك</h3><div class="tut-step-body">اختر الاشتراك > <span class="field">تحصيل</span> > أدخل المبلغ المدفوع.</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">حالات الدفع</h3><div class="tut-step-body"><div class="tut-diagram">unpaid ──→ تحصيل كامل ──→ paid ✅ <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">حالات الدفع</h3><div class="tut-step-body"><div class="tut-diagram">unpaid ──→ تحصيل كامل ──→ paid ✅
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>كشف التعارضات</h1><p>كيف يمنع النظام الحجوزات المتعارضة</p></div> <div><h1>كشف التعارضات</h1><p>كيف يمنع النظام الحجوزات المتعارضة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-bookings.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">متى يتم الفحص</h3><div class="tut-step-body">عند: إنشاء حجز / توليد حجوزات تمارين / تعديل جدول مجموعة.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">متى يتم الفحص</h3><div class="tut-step-body">عند: إنشاء حجز / توليد حجوزات تمارين / تعديل جدول مجموعة.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">أبعاد الفحص</h3><div class="tut-step-body"><ul><li><strong>تعارض الوحدة:</strong> هل الوحدة مشغولة؟</li><li><strong>تعارض المدرب:</strong> هل المدرب عنده حصة أخرى؟</li><li><strong>تعارض اللاعب:</strong> هل اللاعب في مجموعتين بنفس الوقت؟</li><li><strong>أيام الحجب:</strong> هل التاريخ محجوب؟</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">أبعاد الفحص</h3><div class="tut-step-body"><ul><li><strong>تعارض الوحدة:</strong> هل الوحدة مشغولة؟</li><li><strong>تعارض المدرب:</strong> هل المدرب عنده حصة أخرى؟</li><li><strong>تعارض اللاعب:</strong> هل اللاعب في مجموعتين بنفس الوقت؟</li><li><strong>أيام الحجب:</strong> هل التاريخ محجوب؟</li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">منطق فحص الوقت</h3><div class="tut-step-body"><div class="tut-diagram">Time overlap: start_time < :end AND end_time > :start <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">منطق فحص الوقت</h3><div class="tut-step-body"><div class="tut-diagram">Time overlap: start_time < :end AND end_time > :start
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إنشاء مجموعة تدريبية</h1><p>مجموعة مع مدرب وجدول أسبوعي</p></div> <div><h1>إنشاء مجموعة تدريبية</h1><p>مجموعة مع مدرب وجدول أسبوعي</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-groups.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إضافة مجموعة</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">المجموعات</span> > إضافة مجموعة.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إضافة مجموعة</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">المجموعات</span> > إضافة مجموعة.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">البيانات والربط</h3><div class="tut-step-body"><ul><li><span class="field">code / name_ar</span></li><li><span class="field">program_id</span> — البرنامج (يحدد اللعبة والمستوى تلقائياً)</li><li><span class="field">coach_id</span> — المدرب (يظهر فقط المتخصصين في نفس اللعبة)</li><li><span class="field">min_capacity / max_capacity</span> — الحد الأدنى والأقصى</li><li><span class="field">monthly_fee_member / monthly_fee_nonmember</span> — الرسوم الشهرية</li><li><span class="field">season_start / season_end</span> — مدة الموسم</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">البيانات والربط</h3><div class="tut-step-body"><ul><li><span class="field">code / name_ar</span></li><li><span class="field">program_id</span> — البرنامج (يحدد اللعبة والمستوى تلقائياً)</li><li><span class="field">coach_id</span> — المدرب (يظهر فقط المتخصصين في نفس اللعبة)</li><li><span class="field">min_capacity / max_capacity</span> — الحد الأدنى والأقصى</li><li><span class="field">monthly_fee_member / monthly_fee_nonmember</span> — الرسوم الشهرية</li><li><span class="field">season_start / season_end</span> — مدة الموسم</li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">إعداد الجدول الأسبوعي</h3><div class="tut-step-body">من صفحة المجموعة > الجدول > إضافة حصة:<ul><li><span class="field">day_of_week</span> — اليوم</li><li><span class="field">facility_unit_id</span> — الوحدة/الحارة/الملعب</li><li><span class="field">start_time / end_time</span> — الوقت</li></ul>مثال: أحد + ثلاثاء + خميس — حارة 3 — من 16:00 إلى 17:00<span class="warn">الجدول الأسبوعي يتحقق من التعارض — لو الوحدة محجوزة في نفس الوقت، النظام يرفض ويوضح التعارض.</span><span class="success">بعد إنشاء الجدول، يمكنك استخدام "توليد الحجوزات" لإنشاء حجوزات تلقائية لكل حصة.</span></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">إعداد الجدول الأسبوعي</h3><div class="tut-step-body">من صفحة المجموعة > الجدول > إضافة حصة:<ul><li><span class="field">day_of_week</span> — اليوم</li><li><span class="field">facility_unit_id</span> — الوحدة/الحارة/الملعب</li><li><span class="field">start_time / end_time</span> — الوقت</li></ul>مثال: أحد + ثلاثاء + خميس — حارة 3 — من 16:00 إلى 17:00<span class="warn">الجدول الأسبوعي يتحقق من التعارض — لو الوحدة محجوزة في نفس الوقت، النظام يرفض ويوضح التعارض.</span><span class="success">بعد إنشاء الجدول، يمكنك استخدام "توليد الحجوزات" لإنشاء حجوزات تلقائية لكل حصة.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>حجز ساعة ملعب</h1><p>حجز وحدة لوقت محدد (حجز بالساعة)</p></div> <div><h1>حجز ساعة ملعب</h1><p>حجز وحدة لوقت محدد (حجز بالساعة)</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-booking-wizard.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إنشاء حجز جديد</h3><div class="tut-step-body">من القائمة: <span class="field">الحجوزات</span> > <span class="field">حجز جديد</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إنشاء حجز جديد</h3><div class="tut-step-body">من القائمة: <span class="field">الحجوزات</span> > <span class="field">حجز جديد</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار الوحدة والوقت</h3><div class="tut-step-body"><ul><li><span class="field">facility_unit_id</span> — الوحدة (ملعب تنس، كورت...)</li><li><span class="field">booking_date</span> — التاريخ</li><li><span class="field">start_time / end_time</span> — الوقت</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار الوحدة والوقت</h3><div class="tut-step-body"><ul><li><span class="field">facility_unit_id</span> — الوحدة (ملعب تنس، كورت...)</li><li><span class="field">booking_date</span> — التاريخ</li><li><span class="field">start_time / end_time</span> — الوقت</li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">الفحص التلقائي</h3><div class="tut-step-body">النظام يتحقق: هل الوحدة فاضية؟ هل في blackout؟ هل الوقت ضمن ساعات التشغيل؟<span class="warn">للوحدات exclusive: حجز واحد فقط يأخذ الوحدة بالكامل. لو في تمرين مجدول — الحجز مرفوض.</span></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">الفحص التلقائي</h3><div class="tut-step-body">النظام يتحقق: هل الوحدة فاضية؟ هل في blackout؟ هل الوقت ضمن ساعات التشغيل؟<span class="warn">للوحدات exclusive: حجز واحد فقط يأخذ الوحدة بالكامل. لو في تمرين مجدول — الحجز مرفوض.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إنشاء برنامج تدريبي</h1><p>تعريف برنامج بمواصفات العمر والمستوى</p></div> <div><h1>إنشاء برنامج تدريبي</h1><p>تعريف برنامج بمواصفات العمر والمستوى</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-programs.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إضافة برنامج</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">البرامج</span> > إضافة برنامج.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إضافة برنامج</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">البرامج</span> > إضافة برنامج.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">البيانات الأساسية</h3><div class="tut-step-body"><ul><li><span class="field">code / name_ar</span> — الكود والاسم</li><li><span class="field">discipline_id</span> — اللعبة</li><li><span class="field">academy_id</span> — الأكاديمية (NULL = يديره النادي مباشرة)</li><li><span class="field">program_type</span> — training / recreational / competitive / rehabilitation</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">البيانات الأساسية</h3><div class="tut-step-body"><ul><li><span class="field">code / name_ar</span> — الكود والاسم</li><li><span class="field">discipline_id</span> — اللعبة</li><li><span class="field">academy_id</span> — الأكاديمية (NULL = يديره النادي مباشرة)</li><li><span class="field">program_type</span> — training / recreational / competitive / rehabilitation</li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">الفئة المستهدفة</h3><div class="tut-step-body"><ul><li><span class="field">age_from / age_to</span> — الفئة العمرية (مثلاً 6-10)</li><li><span class="field">gender_restriction</span> — male / female / NULL (مختلط)</li><li><span class="field">skill_level</span> — beginner / intermediate / advanced / elite</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">الفئة المستهدفة</h3><div class="tut-step-body"><ul><li><span class="field">age_from / age_to</span> — الفئة العمرية (مثلاً 6-10)</li><li><span class="field">gender_restriction</span> — male / female / NULL (مختلط)</li><li><span class="field">skill_level</span> — beginner / intermediate / advanced / elite</li></ul></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تسجيل لاعب في مجموعة</h1><p>التحاق لاعب بمجموعة تدريبية</p></div> <div><h1>تسجيل لاعب في مجموعة</h1><p>التحاق لاعب بمجموعة تدريبية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-players.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح تسجيل اللاعبين</h3><div class="tut-step-body">من صفحة المجموعة > <span class="field">تسجيل لاعب</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح تسجيل اللاعبين</h3><div class="tut-step-body">من صفحة المجموعة > <span class="field">تسجيل لاعب</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">البحث عن اللاعب</h3><div class="tut-step-body">ابحث بالاسم أو الرقم التسلسلي أو الرقم القومي.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">البحث عن اللاعب</h3><div class="tut-step-body">ابحث بالاسم أو الرقم التسلسلي أو الرقم القومي.</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">التحقق التلقائي</h3><div class="tut-step-body">النظام يتحقق من:<ul><li>الحالة الطبية: لازم تكون <span class="field">fit</span> أو <span class="field">conditional</span></li><li>السعة: المجموعة لسه فيها مكان</li><li>العمر: ضمن الفئة العمرية للبرنامج</li><li>عدم التكرار: مش مسجل بالفعل</li></ul><span class="warn">إذا اللاعب حالته الطبية "pending" أو "unfit" أو "expired"، التسجيل مرفوض تلقائياً.</span></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">التحقق التلقائي</h3><div class="tut-step-body">النظام يتحقق من:<ul><li>الحالة الطبية: لازم تكون <span class="field">fit</span> أو <span class="field">conditional</span></li><li>السعة: المجموعة لسه فيها مكان</li><li>العمر: ضمن الفئة العمرية للبرنامج</li><li>عدم التكرار: مش مسجل بالفعل</li></ul><span class="warn">إذا اللاعب حالته الطبية "pending" أو "unfit" أو "expired"، التسجيل مرفوض تلقائياً.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>الدفع الإجباري عند التسجيل</h1><p>لا يتم تفعيل التسجيل بدون دفع أول اشتراك من خزنة الأنشطة</p></div> <div><h1>الدفع الإجباري عند التسجيل</h1><p>لا يتم تفعيل التسجيل بدون دفع أول اشتراك من خزنة الأنشطة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-subscriptions.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">كيف يعمل النظام؟</h3><div class="tut-step-body">عند تسجيل لاعب في مجموعة، لا يُفعّل التسجيل مباشرة. بدلاً من ذلك:<ul><li>يُسجل اللاعب بحالة <span class="field">pending_payment</span> (في انتظار الدفع)</li><li>يُنشئ النظام <strong>طلب دفع</strong> تلقائياً في طابور خزنة الأنشطة</li><li>المبلغ = رسم الاشتراك الشهري للمجموعة (حسب نوع اللاعب: عضو أو غير عضو)</li></ul><span class="info">هذا يضمن عدم تفعيل أي تسجيل بدون سداد — لا استثناءات إلا عبر الإعفاء الرسمي.</span></div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">كيف يعمل النظام؟</h3><div class="tut-step-body">عند تسجيل لاعب في مجموعة، لا يُفعّل التسجيل مباشرة. بدلاً من ذلك:<ul><li>يُسجل اللاعب بحالة <span class="field">pending_payment</span> (في انتظار الدفع)</li><li>يُنشئ النظام <strong>طلب دفع</strong> تلقائياً في طابور خزنة الأنشطة</li><li>المبلغ = رسم الاشتراك الشهري للمجموعة (حسب نوع اللاعب: عضو أو غير عضو)</li></ul><span class="info">هذا يضمن عدم تفعيل أي تسجيل بدون سداد — لا استثناءات إلا عبر الإعفاء الرسمي.</span></div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">حالة اللاعب بعد التسجيل</h3><div class="tut-step-body">في صفحة المجموعة، اللاعب يظهر بخلفية صفراء وبادج <span class="field">في انتظار الدفع</span>.<ul><li>لا يُحسب ضمن العدد الفعلي للمجموعة (السعة)</li><li>لا يظهر في كشوف الحضور</li><li>لا يُولد له اشتراك شهري</li></ul><span class="warn">إذا أُلغي طلب الدفع بدون تحصيل — التسجيل يبقى معلقاً ولا يُحذف تلقائياً.</span></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">حالة اللاعب بعد التسجيل</h3><div class="tut-step-body">في صفحة المجموعة، اللاعب يظهر بخلفية صفراء وبادج <span class="field">في انتظار الدفع</span>.<ul><li>لا يُحسب ضمن العدد الفعلي للمجموعة (السعة)</li><li>لا يظهر في كشوف الحضور</li><li>لا يُولد له اشتراك شهري</li></ul><span class="warn">إذا أُلغي طلب الدفع بدون تحصيل — التسجيل يبقى معلقاً ولا يُحذف تلقائياً.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إعفاء من اشتراك</h1><p>إعفاء لاعب من رسوم شهرية</p></div> <div><h1>إعفاء من اشتراك</h1><p>إعفاء لاعب من رسوم شهرية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-subscriptions.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">اختيار الاشتراك</h3><div class="tut-step-body">من <span class="field">الاشتراكات</span> > ابحث عن اشتراك اللاعب.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">اختيار الاشتراك</h3><div class="tut-step-body">من <span class="field">الاشتراكات</span> > ابحث عن اشتراك اللاعب.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إعفاء</h3><div class="tut-step-body">اضغط <span class="field">إعفاء</span> > أدخل السبب (مثل: "إعفاء بقرار إداري" أو "منحة رياضية").</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إعفاء</h3><div class="tut-step-body">اضغط <span class="field">إعفاء</span> > أدخل السبب (مثل: "إعفاء بقرار إداري" أو "منحة رياضية").</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">النتيجة</h3><div class="tut-step-body"><div class="tut-diagram">unpaid ──→ إعفاء ──→ exempt (لا يُطالَب بالدفع) <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">النتيجة</h3><div class="tut-step-body"><div class="tut-diagram">unpaid ──→ إعفاء ──→ exempt (لا يُطالَب بالدفع)
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>سيناريو كامل: كرة قدم</h1><p>أكاديمية كرة قدم من الصفر للتشغيل</p></div> <div><h1>سيناريو كامل: كرة قدم</h1><p>أكاديمية كرة قدم من الصفر للتشغيل</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-mirror.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إنشاء اللعبة والمرفق</h3><div class="tut-step-body"><ul><li>لعبة: <span class="field">FOOTBALL</span>, category = <span class="field">team</span></li><li>مرفق: <span class="field">ملاعب كرة القدم</span>, type = <span class="field">pitch</span></li><li>وحدات: ملعب 1 (كبير)، ملعب 2 (صغير) — كلها <span class="field">exclusive</span></li></ul></div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إنشاء اللعبة والمرفق</h3><div class="tut-step-body"><ul><li>لعبة: <span class="field">FOOTBALL</span>, category = <span class="field">team</span></li><li>مرفق: <span class="field">ملاعب كرة القدم</span>, type = <span class="field">pitch</span></li><li>وحدات: ملعب 1 (كبير)، ملعب 2 (صغير) — كلها <span class="field">exclusive</span></li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إعداد التسعير</h3><div class="tut-step-body">شرائح + تسعير. مثال: ملعب كبير ذروة = 800 ج/ساعة (مقسومة على عدد اللاعبين).</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إعداد التسعير</h3><div class="tut-step-body">شرائح + تسعير. مثال: ملعب كبير ذروة = 800 ج/ساعة (مقسومة على عدد اللاعبين).</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">إنشاء الأكاديمية</h3><div class="tut-step-body">أكاديمية خارجية: "أكاديمية الأهلي الناشئين" + عقد revenue_share (70/30) + PDF.<span class="warn">العقد إجباري! بدون PDF لا يمكن تفعيل الأكاديمية.</span></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">إنشاء الأكاديمية</h3><div class="tut-step-body">أكاديمية خارجية: "أكاديمية الأهلي الناشئين" + عقد revenue_share (70/30) + PDF.<span class="warn">العقد إجباري! بدون PDF لا يمكن تفعيل الأكاديمية.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>سيناريو كامل: حمام سباحة</h1><p>من الإعداد حتى التشغيل اليومي</p></div> <div><h1>سيناريو كامل: حمام سباحة</h1><p>من الإعداد حتى التشغيل اليومي</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-pool-grid.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إنشاء اللعبة</h3><div class="tut-step-body">أنشئ لعبة: <span class="field">code = SWIMMING</span>, category = <span class="field">aquatic</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إنشاء اللعبة</h3><div class="tut-step-body">أنشئ لعبة: <span class="field">code = SWIMMING</span>, category = <span class="field">aquatic</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إنشاء المرفق</h3><div class="tut-step-body">أنشئ مرفق: <span class="field">حمام السباحة الرئيسي</span>, facility_type = <span class="field">pool</span>, ساعات 06:00-22:00, فترة 60 دقيقة.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إنشاء المرفق</h3><div class="tut-step-body">أنشئ مرفق: <span class="field">حمام السباحة الرئيسي</span>, facility_type = <span class="field">pool</span>, ساعات 06:00-22:00, فترة 60 دقيقة.</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">إضافة الحارات</h3><div class="tut-step-body">أضف 6 حارات:<ul><li>كل حارة: booking_mode = <span class="field">shared</span></li><li>max_capacity = <span class="field">8</span> (أشخاص لكل حارة لكل ساعة)</li></ul><span class="info">السباحة حالة خاصة — الحارات shared تسمح لعدة حجوزات بنفس الوقت.</span></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">إضافة الحارات</h3><div class="tut-step-body">أضف 6 حارات:<ul><li>كل حارة: booking_mode = <span class="field">shared</span></li><li>max_capacity = <span class="field">8</span> (أشخاص لكل حارة لكل ساعة)</li></ul><span class="info">السباحة حالة خاصة — الحارات shared تسمح لعدة حجوزات بنفس الوقت.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>سيناريو كامل: تنس</h1><p>ملاعب تنس بحجز بالساعة وتمارين</p></div> <div><h1>سيناريو كامل: تنس</h1><p>ملاعب تنس بحجز بالساعة وتمارين</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-mirror.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إنشاء اللعبة والمرفق</h3><div class="tut-step-body"><ul><li>لعبة: <span class="field">TENNIS</span>, category = <span class="field">racket</span></li><li>مرفق: <span class="field">ملاعب التنس</span>, type = <span class="field">court</span></li><li>4 كورتات — كلها <span class="field">exclusive</span>, max_capacity = 4</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إنشاء اللعبة والمرفق</h3><div class="tut-step-body"><ul><li>لعبة: <span class="field">TENNIS</span>, category = <span class="field">racket</span></li><li>مرفق: <span class="field">ملاعب التنس</span>, type = <span class="field">court</span></li><li>4 كورتات — كلها <span class="field">exclusive</span>, max_capacity = 4</li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">تسعير مرن</h3><div class="tut-step-body"><div class="tut-diagram">Court × Peak × 1-2 players = 200 ج/فرد <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">تسعير مرن</h3><div class="tut-step-body"><div class="tut-diagram">Court × Peak × 1-2 players = 200 ج/فرد
Court × Peak × 3-4 players = 150 ج/فرد Court × Peak × 3-4 players = 150 ج/فرد
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>توليد الاشتراكات الشهرية</h1><p>إنشاء فواتير شهرية للاعبين المسجلين</p></div> <div><h1>توليد الاشتراكات الشهرية</h1><p>إنشاء فواتير شهرية للاعبين المسجلين</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-subscriptions.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح التوليد</h3><div class="tut-step-body">من القائمة: <span class="field">الاشتراكات</span> > <span class="field">توليد اشتراكات شهرية</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح التوليد</h3><div class="tut-step-body">من القائمة: <span class="field">الاشتراكات</span> > <span class="field">توليد اشتراكات شهرية</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار الشهر</h3><div class="tut-step-body">اختر الشهر والسنة (مثلاً: يونيو 2026).</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار الشهر</h3><div class="tut-step-body">اختر الشهر والسنة (مثلاً: يونيو 2026).</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">المعالجة</h3><div class="tut-step-body">لكل لاعب active في كل مجموعة نشطة:<ul><li>يتحقق: هل سبق توليد اشتراك لنفس الفترة؟</li><li>يحدد المبلغ حسب <span class="field">player_type</span></li><li>ينشئ سجل بحالة <span class="field">unpaid</span></li></ul><div class="tut-diagram">المجموعة "سباحة صباحي": <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">المعالجة</h3><div class="tut-step-body">لكل لاعب active في كل مجموعة نشطة:<ul><li>يتحقق: هل سبق توليد اشتراك لنفس الفترة؟</li><li>يحدد المبلغ حسب <span class="field">player_type</span></li><li>ينشئ سجل بحالة <span class="field">unpaid</span></li></ul><div class="tut-diagram">المجموعة "سباحة صباحي":
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>توليد حجوزات التمارين</h1><p>إنشاء حجوزات تلقائية من جدول المجموعة</p></div> <div><h1>توليد حجوزات التمارين</h1><p>إنشاء حجوزات تلقائية من جدول المجموعة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-bookings.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح التوليد</h3><div class="tut-step-body">من صفحة المجموعة > الجدول > <span class="field">توليد حجوزات</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح التوليد</h3><div class="tut-step-body">من صفحة المجموعة > الجدول > <span class="field">توليد حجوزات</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار الفترة</h3><div class="tut-step-body">حدد <span class="field">from_date</span> إلى <span class="field">to_date</span> (مثلاً شهر كامل).</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار الفترة</h3><div class="tut-step-body">حدد <span class="field">from_date</span> إلى <span class="field">to_date</span> (مثلاً شهر كامل).</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">المعالجة</h3><div class="tut-step-body">النظام يقرأ الجدول الأسبوعي ولكل حصة مجدولة ينشئ حجز في <span class="field">sa_bookings</span> بنوع <span class="field">training</span>.<div class="tut-diagram">جدول المجموعة: الحجوزات المولدة: <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">المعالجة</h3><div class="tut-step-body">النظام يقرأ الجدول الأسبوعي ولكل حصة مجدولة ينشئ حجز في <span class="field">sa_bookings</span> بنوع <span class="field">training</span>.<div class="tut-diagram">جدول المجموعة: الحجوزات المولدة:
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>دورة الموافقة الطبية</h1><p>من الرفع حتى الاعتماد من اللجنة الطبية</p></div> <div><h1>دورة الموافقة الطبية</h1><p>من الرفع حتى الاعتماد من اللجنة الطبية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-players.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">رفع شهادة طبية</h3><div class="tut-step-body">من صفحة اللاعب > المستندات > <span class="field">رفع شهادة طبية</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">رفع شهادة طبية</h3><div class="tut-step-body">من صفحة اللاعب > المستندات > <span class="field">رفع شهادة طبية</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">بيانات الشهادة</h3><div class="tut-step-body"><ul><li>نوع المستند: <span class="field">medical_cert</span></li><li>الملف (PDF أو صورة)</li><li>تاريخ الفحص وتاريخ الانتهاء</li><li>اسم الطبيب واسم العيادة/المستشفى</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">بيانات الشهادة</h3><div class="tut-step-body"><ul><li>نوع المستند: <span class="field">medical_cert</span></li><li>الملف (PDF أو صورة)</li><li>تاريخ الفحص وتاريخ الانتهاء</li><li>اسم الطبيب واسم العيادة/المستشفى</li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">انتظار اللجنة الطبية</h3><div class="tut-step-body">الشهادة تذهب للحالة <span class="field">pending</span> — بانتظار اللجنة الطبية.</div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">انتظار اللجنة الطبية</h3><div class="tut-step-body">الشهادة تذهب للحالة <span class="field">pending</span> — بانتظار اللجنة الطبية.</div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>شاشة المراية (المرافق)</h1><p>عرض حالة المرافق والحجوزات لحظياً</p></div> <div><h1>شاشة المراية (المرافق)</h1><p>عرض حالة المرافق والحجوزات لحظياً</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-mirror.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح المراية</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">المراية</span> > اختر المرفق.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح المراية</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">المراية</span> > اختر المرفق.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">العرض الشبكي</h3><div class="tut-step-body">شبكة = الوحدات (أعمدة) × الفترات الزمنية (صفوف):<div class="tut-diagram">المراية — حمام السباحة — 2026-05-18 <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">العرض الشبكي</h3><div class="tut-step-body">شبكة = الوحدات (أعمدة) × الفترات الزمنية (صفوف):<div class="tut-diagram">المراية — حمام السباحة — 2026-05-18
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تسجيل الحضور</h1><p>تسجيل حضور لاعبين في تمرين</p></div> <div><h1>تسجيل الحضور</h1><p>تسجيل حضور لاعبين في تمرين</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-attendance.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح الحضور</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">الحضور</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح الحضور</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">الحضور</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار التمرين</h3><div class="tut-step-body">اختر التاريخ والمجموعة. النظام يعرض كل اللاعبين المسجلين.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار التمرين</h3><div class="tut-step-body">اختر التاريخ والمجموعة. النظام يعرض كل اللاعبين المسجلين.</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">تسجيل الحالة</h3><div class="tut-step-body">لكل لاعب:<ul><li><span class="field">present</span> — حاضر (مع check_in_time)</li><li><span class="field">absent</span> — غائب</li><li><span class="field">late</span> — متأخر (مع الوقت الفعلي)</li><li><span class="field">excused</span> — معتذر</li></ul><span class="info">الحضور يرتبط بحجز التمرين — لازم يكون في حجز training لهذا اليوم والمجموعة.</span></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">تسجيل الحالة</h3><div class="tut-step-body">لكل لاعب:<ul><li><span class="field">present</span> — حاضر (مع check_in_time)</li><li><span class="field">absent</span> — غائب</li><li><span class="field">late</span> — متأخر (مع الوقت الفعلي)</li><li><span class="field">excused</span> — معتذر</li></ul><span class="info">الحضور يرتبط بحجز التمرين — لازم يكون في حجز training لهذا اليوم والمجموعة.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تسجيل مدرب جديد</h1><p>إضافة مدرب مع تخصصاته ونظام الدفع</p></div> <div><h1>تسجيل مدرب جديد</h1><p>إضافة مدرب مع تخصصاته ونظام الدفع</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-coaches.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة المدربين</h3><div class="tut-step-body">من القائمة الجانبية: <span class="field">الأنشطة الرياضية</span> > <span class="field">المدربين</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة المدربين</h3><div class="tut-step-body">من القائمة الجانبية: <span class="field">الأنشطة الرياضية</span> > <span class="field">المدربين</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة مدرب جديد</h3><div class="tut-step-body">اضغط <span class="field">إضافة مدرب جديد</span>.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة مدرب جديد</h3><div class="tut-step-body">اضغط <span class="field">إضافة مدرب جديد</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">البيانات الأساسية</h3><div class="tut-step-body"><ul><li><span class="field">code</span> — كود فريد</li><li><span class="field">full_name_ar</span> — الاسم بالعربي</li><li><span class="field">national_id</span> — الرقم القومي</li><li><span class="field">phone</span> — الهاتف</li><li><span class="field">date_of_birth</span> — تاريخ الميلاد</li><li><span class="field">gender</span> — النوع</li><li><span class="field">photo_path</span> — صورة شخصية</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">البيانات الأساسية</h3><div class="tut-step-body"><ul><li><span class="field">code</span> — كود فريد</li><li><span class="field">full_name_ar</span> — الاسم بالعربي</li><li><span class="field">national_id</span> — الرقم القومي</li><li><span class="field">phone</span> — الهاتف</li><li><span class="field">date_of_birth</span> — تاريخ الميلاد</li><li><span class="field">gender</span> — النوع</li><li><span class="field">photo_path</span> — صورة شخصية</li></ul></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تسجيل لاعب جديد</h1><p>تسجيل لاعب ورفع الشهادة الطبية</p></div> <div><h1>تسجيل لاعب جديد</h1><p>تسجيل لاعب ورفع الشهادة الطبية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-players.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة اللاعبين</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">اللاعبين</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة اللاعبين</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">اللاعبين</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">تسجيل لاعب جديد</h3><div class="tut-step-body">اضغط <span class="field">تسجيل لاعب جديد</span>.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">تسجيل لاعب جديد</h3><div class="tut-step-body">اضغط <span class="field">تسجيل لاعب جديد</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">نوع اللاعب</h3><div class="tut-step-body"><span class="field">player_type</span>: عضو (member) — يتم ربطه بعضوية موجودة، أو غير عضو (non_member).<span class="info">لو اللاعب عضو، بيتم سحب بياناته الأساسية من سجل العضوية تلقائياً.</span></div></div> <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">نوع اللاعب</h3><div class="tut-step-body"><span class="field">player_type</span>: عضو (member) — يتم ربطه بعضوية موجودة، أو غير عضو (non_member).<span class="info">لو اللاعب عضو، بيتم سحب بياناته الأساسية من سجل العضوية تلقائياً.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إنشاء أكاديمية وعقدها</h1><p>تسجيل أكاديمية خارجية مع عقد PDF</p></div> <div><h1>إنشاء أكاديمية وعقدها</h1><p>تسجيل أكاديمية خارجية مع عقد PDF</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-academies.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إضافة أكاديمية</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">الأكاديميات</span> > إضافة أكاديمية.<ul><li><span class="field">code</span> — كود فريد</li><li><span class="field">name_ar</span> — الاسم</li><li><span class="field">discipline_id</span> — ربط بلعبة</li><li><span class="field">academy_type</span> — internal (داخلي) / external (خارجي)</li><li>بيانات الاتصال والوصف</li></ul><span class="info">الأكاديميات الداخلية (internal) هي برامج يديرها النادي بنفسه. الخارجية (external) هي أكاديميات مستقلة تستأجر مرافق النادي.</span></div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">إضافة أكاديمية</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">الأكاديميات</span> > إضافة أكاديمية.<ul><li><span class="field">code</span> — كود فريد</li><li><span class="field">name_ar</span> — الاسم</li><li><span class="field">discipline_id</span> — ربط بلعبة</li><li><span class="field">academy_type</span> — internal (داخلي) / external (خارجي)</li><li>بيانات الاتصال والوصف</li></ul><span class="info">الأكاديميات الداخلية (internal) هي برامج يديرها النادي بنفسه. الخارجية (external) هي أكاديميات مستقلة تستأجر مرافق النادي.</span></div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إنشاء عقد</h3><div class="tut-step-body">من صفحة الأكاديمية > العقود > إضافة عقد:<ul><li><span class="field">contract_number</span> — رقم العقد</li><li><span class="field">contract_type</span> — revenue_share / fixed_rent / hybrid</li><li><span class="field">start_date / end_date</span> — مدة العقد</li></ul></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إنشاء عقد</h3><div class="tut-step-body">من صفحة الأكاديمية > العقود > إضافة عقد:<ul><li><span class="field">contract_number</span> — رقم العقد</li><li><span class="field">contract_type</span> — revenue_share / fixed_rent / hybrid</li><li><span class="field">start_date / end_date</span> — مدة العقد</li></ul></div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">الشروط المالية</h3><div class="tut-step-body"><div class="tut-diagram">revenue_share: النادي 30% ── الأكاديمية 70% <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">الشروط المالية</h3><div class="tut-step-body"><div class="tut-diagram">revenue_share: النادي 30% ── الأكاديمية 70%
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إنشاء لعبة رياضية جديدة</h1><p>تعريف نشاط رياضي في النظام</p></div> <div><h1>إنشاء لعبة رياضية جديدة</h1><p>تعريف نشاط رياضي في النظام</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-disciplines.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة الألعاب الرياضية</h3><div class="tut-step-body">من القائمة الجانبية افتح <span class="field">الأنشطة الرياضية</span> ثم اضغط <span class="field">الألعاب</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة الألعاب الرياضية</h3><div class="tut-step-body">من القائمة الجانبية افتح <span class="field">الأنشطة الرياضية</span> ثم اضغط <span class="field">الألعاب</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة لعبة جديدة</h3><div class="tut-step-body">اضغط زر <span class="field">إضافة لعبة جديدة</span> في أعلى الصفحة.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة لعبة جديدة</h3><div class="tut-step-body">اضغط زر <span class="field">إضافة لعبة جديدة</span> في أعلى الصفحة.</div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إنشاء مرفق ووحداته</h1><p>تعريف ملعب أو حمام سباحة مع الوحدات</p></div> <div><h1>إنشاء مرفق ووحداته</h1><p>تعريف ملعب أو حمام سباحة مع الوحدات</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-facilities.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة المرافق</h3><div class="tut-step-body">من القائمة الجانبية: <span class="field">الأنشطة الرياضية</span> > <span class="field">المرافق</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح صفحة المرافق</h3><div class="tut-step-body">من القائمة الجانبية: <span class="field">الأنشطة الرياضية</span> > <span class="field">المرافق</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة مرفق جديد</h3><div class="tut-step-body">اضغط <span class="field">إضافة مرفق جديد</span>.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة مرفق جديد</h3><div class="tut-step-body">اضغط <span class="field">إضافة مرفق جديد</span>.</div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إعداد قواعد التسعير</h1><p>ربط المرفق × الشريحة × عدد الأفراد بالسعر</p></div> <div><h1>إعداد قواعد التسعير</h1><p>ربط المرفق × الشريحة × عدد الأفراد بالسعر</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-pricing.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح التسعير</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">التسعير</span>.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح التسعير</h3><div class="tut-step-body">من القائمة: <span class="field">الأنشطة الرياضية</span> > <span class="field">التسعير</span>.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة قاعدة تسعير</h3><div class="tut-step-body"> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة قاعدة تسعير</h3><div class="tut-step-body">
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إعداد شرائح الوقت</h1><p>تعريف أوقات الذروة والعادية</p></div> <div><h1>إعداد شرائح الوقت</h1><p>تعريف أوقات الذروة والعادية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-schedule.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح شرائح الوقت</h3><div class="tut-step-body">من صفحة المرفق اضغط <span class="field">شرائح الوقت</span> أو افتح <span class="field">المرافق</span> > اختر المرفق > تبويب الشرائح.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح شرائح الوقت</h3><div class="tut-step-body">من صفحة المرفق اضغط <span class="field">شرائح الوقت</span> أو افتح <span class="field">المرافق</span> > اختر المرفق > تبويب الشرائح.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة شريحة</h3><div class="tut-step-body">اضغط <span class="field">إضافة شريحة</span> واملأ: <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إضافة شريحة</h3><div class="tut-step-body">اضغط <span class="field">إضافة شريحة</span> واملأ:
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>طابور دفع الأنشطة الرياضية</h1><p>عرض ومعالجة طلبات الدفع في خزنة الأنشطة الفرعية</p></div> <div><h1>طابور دفع الأنشطة الرياضية</h1><p>عرض ومعالجة طلبات الدفع في خزنة الأنشطة الفرعية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-subscriptions.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح الطابور</h3><div class="tut-step-body">من القائمة الجانبية: <span class="field">خزنة الأنشطة</span> > <span class="field">طابور الدفع</span>. يظهر جميع طلبات الدفع المعلقة والجارية المرتبطة بالأنشطة الرياضية.<span class="info">الطابور يتحدث تلقائياً كل 30 ثانية. أنواع الطلبات: تسجيل رياضي، اشتراك نشاط، حجز ساعة، إيجار لوكر.</span></div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح الطابور</h3><div class="tut-step-body">من القائمة الجانبية: <span class="field">خزنة الأنشطة</span> > <span class="field">طابور الدفع</span>. يظهر جميع طلبات الدفع المعلقة والجارية المرتبطة بالأنشطة الرياضية.<span class="info">الطابور يتحدث تلقائياً كل 30 ثانية. أنواع الطلبات: تسجيل رياضي، اشتراك نشاط، حجز ساعة، إيجار لوكر.</span></div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">التأكد من وجود وردية مفتوحة</h3><div class="tut-step-body">قبل التحصيل — يجب أن تكون هناك وردية مفتوحة. إذا لم تكن موجودة:<ul><li>يظهر شريط أصفر: «لا توجد وردية مفتوحة»</li><li>اضغط <span class="field">فتح وردية</span> لبدء العمل</li></ul><span class="warn">لا يمكن تحصيل أي دفعة بدون وردية مفتوحة — الزر «تحصيل» لن يعمل.</span></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">التأكد من وجود وردية مفتوحة</h3><div class="tut-step-body">قبل التحصيل — يجب أن تكون هناك وردية مفتوحة. إذا لم تكن موجودة:<ul><li>يظهر شريط أصفر: «لا توجد وردية مفتوحة»</li><li>اضغط <span class="field">فتح وردية</span> لبدء العمل</li></ul><span class="warn">لا يمكن تحصيل أي دفعة بدون وردية مفتوحة — الزر «تحصيل» لن يعمل.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إدارة قائمة الانتظار</h1><p>إضافة لاعب لقائمة انتظار مجموعة ممتلئة</p></div> <div><h1>إدارة قائمة الانتظار</h1><p>إضافة لاعب لقائمة انتظار مجموعة ممتلئة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/sa-waitlist.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">متى تظهر قائمة الانتظار</h3><div class="tut-step-body">عند محاولة تسجيل لاعب في مجموعة ممتلئة (<span class="field">is_full = 1</span>).</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">متى تظهر قائمة الانتظار</h3><div class="tut-step-body">عند محاولة تسجيل لاعب في مجموعة ممتلئة (<span class="field">is_full = 1</span>).</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">الإضافة للقائمة</h3><div class="tut-step-body">النظام يعرض خيار "إضافة لقائمة الانتظار". يتم تسجيل اللاعب بـ <span class="field">status = waiting</span> وترتيب تلقائي.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">الإضافة للقائمة</h3><div class="tut-step-body">النظام يعرض خيار "إضافة لقائمة الانتظار". يتم تسجيل اللاعب بـ <span class="field">status = waiting</span> وترتيب تلقائي.</div></div>
<div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">عند انسحاب لاعب</h3><div class="tut-step-body"><div class="tut-diagram">المجموعة ممتلئة (12/12) <div class="tut-step"><div class="tut-step-num">3</div><h3 class="tut-step-title">عند انسحاب لاعب</h3><div class="tut-step-body"><div class="tut-diagram">المجموعة ممتلئة (12/12)
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إيداع بنكي</h1><p>تسجيل إيداع المبالغ في الحساب البنكي</p></div> <div><h1>إيداع بنكي</h1><p>تسجيل إيداع المبالغ في الحساب البنكي</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/cashier-deposits.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">متى يتم الإيداع؟</h3><div class="tut-step-body">أمين الخزنة الرئيسية ملزم بإيداع كل المبالغ النقدية المستلمة في البنك <strong>في اليوم التالي قبل الساعة 11 صباحاً</strong>. لا يجوز بقاء مبالغ في العهدة أكثر من يوم عمل.<span class="warn">التأخير في الإيداع يظهر كتنبيه تلقائي للإدارة ويُسجل في تقرير المتابعة.</span></div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">متى يتم الإيداع؟</h3><div class="tut-step-body">أمين الخزنة الرئيسية ملزم بإيداع كل المبالغ النقدية المستلمة في البنك <strong>في اليوم التالي قبل الساعة 11 صباحاً</strong>. لا يجوز بقاء مبالغ في العهدة أكثر من يوم عمل.<span class="warn">التأخير في الإيداع يظهر كتنبيه تلقائي للإدارة ويُسجل في تقرير المتابعة.</span></div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">الذهاب إلى إيداعات البنك</h3><div class="tut-step-body">من القائمة الجانبية اذهب إلى <span class="field">الخزنة</span> > <span class="field">إيداعات البنك</span>. ستظهر قائمة الإيداعات السابقة.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">الذهاب إلى إيداعات البنك</h3><div class="tut-step-body">من القائمة الجانبية اذهب إلى <span class="field">الخزنة</span> > <span class="field">إيداعات البنك</span>. ستظهر قائمة الإيداعات السابقة.</div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إغلاق وردية</h1><p>إنهاء الوردية الحالية ومراجعة إجمالي التحصيلات</p></div> <div><h1>إغلاق وردية</h1><p>إنهاء الوردية الحالية ومراجعة إجمالي التحصيلات</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/treasury-sessions.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الذهاب إلى لوحة التحكم</h3><div class="tut-step-body">من لوحة الخزنة الفرعية، ستجد ملخص الوردية الحالية يعرض عدد الإيصالات وإجمالي المبالغ المحصّلة.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الذهاب إلى لوحة التحكم</h3><div class="tut-step-body">من لوحة الخزنة الفرعية، ستجد ملخص الوردية الحالية يعرض عدد الإيصالات وإجمالي المبالغ المحصّلة.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">الضغط على إغلاق الوردية</h3><div class="tut-step-body">اضغط زر <span class="field">إغلاق الوردية</span>. سيطلب النظام تأكيداً قبل الإغلاق.<span class="warn">بعد الإغلاق لا يمكن إضافة تحصيلات جديدة على هذه الوردية. تأكد من إتمام كل العمليات المعلّقة.</span></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">الضغط على إغلاق الوردية</h3><div class="tut-step-body">اضغط زر <span class="field">إغلاق الوردية</span>. سيطلب النظام تأكيداً قبل الإغلاق.<span class="warn">بعد الإغلاق لا يمكن إضافة تحصيلات جديدة على هذه الوردية. تأكد من إتمام كل العمليات المعلّقة.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تحصيل مبلغ</h1><p>استلام دفعة من عضو أو لاعب وإصدار إيصال</p></div> <div><h1>تحصيل مبلغ</h1><p>استلام دفعة من عضو أو لاعب وإصدار إيصال</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/treasury-queue.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح قائمة الانتظار</h3><div class="tut-step-body">من لوحة الخزنة الفرعية، اضغط على <span class="field">طلبات التحصيل</span> أو <span class="field">قائمة الانتظار</span>. ستظهر جميع الطلبات المعلّقة التي تنتظر الدفع.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح قائمة الانتظار</h3><div class="tut-step-body">من لوحة الخزنة الفرعية، اضغط على <span class="field">طلبات التحصيل</span> أو <span class="field">قائمة الانتظار</span>. ستظهر جميع الطلبات المعلّقة التي تنتظر الدفع.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار الطلب المعلّق</h3><div class="tut-step-body">اختر الطلب المطلوب تحصيله. ستظهر تفاصيل المبلغ المستحق واسم العضو ونوع الخدمة (اشتراك، تجديد، نشاط رياضي، إلخ).<span class="info">يمكنك البحث بالاسم أو رقم العضوية للوصول السريع للطلب.</span></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">اختيار الطلب المعلّق</h3><div class="tut-step-body">اختر الطلب المطلوب تحصيله. ستظهر تفاصيل المبلغ المستحق واسم العضو ونوع الخدمة (اشتراك، تجديد، نشاط رياضي، إلخ).<span class="info">يمكنك البحث بالاسم أو رقم العضوية للوصول السريع للطلب.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>تأكيد إيداع</h1><p>مراجعة واعتماد الإيداع البنكي من مدير المحاسبة</p></div> <div><h1>تأكيد إيداع</h1><p>مراجعة واعتماد الإيداع البنكي من مدير المحاسبة</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/cashier-deposits.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح شاشة الإيداعات</h3><div class="tut-step-body">مدير المحاسبة يذهب إلى <span class="field">المحاسبة</span> > <span class="field">إيداعات البنك</span> أو من الإشعارات الواردة بوجود إيداع معلّق.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح شاشة الإيداعات</h3><div class="tut-step-body">مدير المحاسبة يذهب إلى <span class="field">المحاسبة</span> > <span class="field">إيداعات البنك</span> أو من الإشعارات الواردة بوجود إيداع معلّق.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">عرض الإيداعات المعلّقة</h3><div class="tut-step-body">ستظهر قائمة الإيداعات بحالة <span class="field">في انتظار التأكيد</span>. اختر الإيداع المراد مراجعته.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">عرض الإيداعات المعلّقة</h3><div class="tut-step-body">ستظهر قائمة الإيداعات بحالة <span class="field">في انتظار التأكيد</span>. اختر الإيداع المراد مراجعته.</div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>متابعة العهدة</h1><p>فهم رصيد العهدة وكيفية مراقبته وتصفيره</p></div> <div><h1>متابعة العهدة</h1><p>فهم رصيد العهدة وكيفية مراقبته وتصفيره</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/treasury-dashboard.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هي العهدة؟</h3><div class="tut-step-body">العهدة هي المبلغ المالي الموجود في حوزة الموظف والذي لم يُسلَّم بعد. كل موظف خزنة له رصيد عهدة يتغير مع العمليات اليومية.<span class="info">العهدة ليست ملكاً للموظف — هي أموال النادي المؤتمن عليها مؤقتاً حتى تسليمها.</span></div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">ما هي العهدة؟</h3><div class="tut-step-body">العهدة هي المبلغ المالي الموجود في حوزة الموظف والذي لم يُسلَّم بعد. كل موظف خزنة له رصيد عهدة يتغير مع العمليات اليومية.<span class="info">العهدة ليست ملكاً للموظف — هي أموال النادي المؤتمن عليها مؤقتاً حتى تسليمها.</span></div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">أين ترى رصيد العهدة؟</h3><div class="tut-step-body">رصيد العهدة يظهر في: <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">أين ترى رصيد العهدة؟</h3><div class="tut-step-body">رصيد العهدة يظهر في:
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>الدورة الكاملة</h1><p>من لحظة دفع اللاعب حتى القيد المحاسبي النهائي</p></div> <div><h1>الدورة الكاملة</h1><p>من لحظة دفع اللاعب حتى القيد المحاسبي النهائي</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/treasury-dashboard.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الصورة الكاملة</h3><div class="tut-step-body"><div class="tut-diagram">Player pays 500 EGP <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الصورة الكاملة</h3><div class="tut-step-body"><div class="tut-diagram">Player pays 500 EGP
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>إنشاء تسوية</h1><p>تحويل المبالغ المحصّلة من الخزنة الفرعية إلى الخزنة الرئيسية</p></div> <div><h1>إنشاء تسوية</h1><p>تحويل المبالغ المحصّلة من الخزنة الفرعية إلى الخزنة الرئيسية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/treasury-settlements.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الذهاب إلى التسويات</h3><div class="tut-step-body">من القائمة الجانبية اذهب إلى <span class="field">الخزنة</span> > <span class="field">التسويات</span>. ستظهر قائمة التسويات السابقة وزر إنشاء تسوية جديدة.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الذهاب إلى التسويات</h3><div class="tut-step-body">من القائمة الجانبية اذهب إلى <span class="field">الخزنة</span> > <span class="field">التسويات</span>. ستظهر قائمة التسويات السابقة وزر إنشاء تسوية جديدة.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إنشاء تسوية جديدة</h3><div class="tut-step-body">اضغط <span class="field">تسوية جديدة</span>. النظام يعرض الورديات المغلقة التي لم تُسوَّ بعد.</div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">إنشاء تسوية جديدة</h3><div class="tut-step-body">اضغط <span class="field">تسوية جديدة</span>. النظام يعرض الورديات المغلقة التي لم تُسوَّ بعد.</div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>فتح وردية</h1><p>بدء يوم العمل في الخزنة الفرعية وتفعيل استقبال المدفوعات</p></div> <div><h1>فتح وردية</h1><p>بدء يوم العمل في الخزنة الفرعية وتفعيل استقبال المدفوعات</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/treasury-sessions.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الدخول إلى الخزنة الفرعية</h3><div class="tut-step-body">من القائمة الجانبية اذهب إلى <span class="field">الخزنة</span> > <span class="field">الخزنة الفرعية</span>. ستظهر لك لوحة التحكم الخاصة بالخزنة.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">الدخول إلى الخزنة الفرعية</h3><div class="tut-step-body">من القائمة الجانبية اذهب إلى <span class="field">الخزنة</span> > <span class="field">الخزنة الفرعية</span>. ستظهر لك لوحة التحكم الخاصة بالخزنة.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">الضغط على فتح وردية</h3><div class="tut-step-body">اضغط على زر <span class="field">فتح وردية</span> الموجود أعلى الصفحة. لن يظهر الزر إذا كانت هناك وردية مفتوحة بالفعل.<span class="warn">لا يمكن فتح أكثر من وردية واحدة في نفس الوقت لنفس الموظف.</span></div></div> <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">الضغط على فتح وردية</h3><div class="tut-step-body">اضغط على زر <span class="field">فتح وردية</span> الموجود أعلى الصفحة. لن يظهر الزر إذا كانت هناك وردية مفتوحة بالفعل.<span class="warn">لا يمكن فتح أكثر من وردية واحدة في نفس الوقت لنفس الموظف.</span></div></div>
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
<div><h1>استلام تسوية</h1><p>تأكيد استلام المبالغ في الخزنة الرئيسية من الخزنات الفرعية</p></div> <div><h1>استلام تسوية</h1><p>تأكيد استلام المبالغ في الخزنة الرئيسية من الخزنات الفرعية</p></div>
</div> </div>
<div style="margin-bottom:20px;border:1px solid #E5E7EB;border-radius:12px;overflow:hidden;"><img src="/assets/tutorials/screenshots/treasury-settlements.png" alt="لقطة شاشة" style="width:100%;display:block;" loading="lazy"></div>
<div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح شاشة الخزنة الرئيسية</h3><div class="tut-step-body">من القائمة الجانبية اذهب إلى <span class="field">الخزنة</span> > <span class="field">الخزنة الرئيسية</span>. ستظهر التسويات الواردة التي تنتظر الاستلام.</div></div> <div class="tut-step"><div class="tut-step-num">1</div><h3 class="tut-step-title">فتح شاشة الخزنة الرئيسية</h3><div class="tut-step-body">من القائمة الجانبية اذهب إلى <span class="field">الخزنة</span> > <span class="field">الخزنة الرئيسية</span>. ستظهر التسويات الواردة التي تنتظر الاستلام.</div></div>
<div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">مراجعة التسويات الواردة</h3><div class="tut-step-body">اختر التسوية المطلوب استلامها. تحقق من: <div class="tut-step"><div class="tut-step-num">2</div><h3 class="tut-step-title">مراجعة التسويات الواردة</h3><div class="tut-step-body">اختر التسوية المطلوب استلامها. تحقق من:
......
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