- 18 May, 2026 4 commits
-
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
Covers all use cases: setup, registration, academies, scheduling, financial operations, daily operations, and 3 full end-to-end scenarios (swimming pool, football academy, tennis courts). Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
- 17 May, 2026 3 commits
-
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
- Add payment_request.cancelled listener that reverts member/dependent to payment_pending when their payment is cancelled from the queue - Allow cancellation of completed payment requests (voids linked payment) - Add cancel button for completed items in queue UI - Fix self-healing logic to not re-activate dependents whose payment was intentionally cancelled (checks for cancelled requests without a valid completed replacement) Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 16 May, 2026 2 commits
-
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 15 May, 2026 5 commits
-
-
Mahmoud Aglan authored
- MatchCenter: schedule/start/end matches, live pitch-side event entry - Events auto-increment score on goals, timeline view by minute - Dashboard shows live (pulsing), scheduled, and finished matches - News module: full CRUD with cover image upload, publish/unpublish toggle - Category-based filtering (match/facility/announcement/schedule/general) Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Club level: total revenue, player demographics, discipline breakdown, utilization - Sport level: discipline-specific KPIs, coach performance, academy links - Facility level: bookings, revenue, utilization rate, popular time slots - Reusable time filter partial (day/week/month/year/3year/5year/custom) - PDF export via PdfExportService - DashboardMetricsService for centralized metric calculations Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Zone trainee assignment now validates player card_status and medical_status - Zone schedule creation validates coach/academy active registration - Academy contracts support PDF document upload on create/edit - New MedicalBoard module for board review of player medical certificates Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Fix payment void cascade, enhance death workflow, and transfer same-number with companion validation - Payment void now also voids linked payment_requests and reverts frozen/suspended members - Death case requires full form fill for spouse, charges 570+annual, supports secondary wives as separate memberships - Transfers keep the SAME membership number, archive source, charge surcharge for extra companions Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Divorce requests now go through board review before payment - Board sets fee percentage based on qualification + divorce certificate - Total fee = (percentage × membership value) + 570 form fee + annual subscription - New member page shows old/new membership number transfer link - Full workflow: submit → board_review → board_approved → payment → complete Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 14 May, 2026 17 commits
-
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
1. Payment void now reverts entity status: added payment.voided listener that sets dependents back to pending_payment (or reverts member to payment_pending if membership payment is voided with no other valid payment) 2. Added join_date column to children and temporary_members tables (migration), set on activation. Display in family tree tables. 3. Removed stepchild (ابن/ابنة الزوج) from children relationship dropdown 4. Form fee (570) now includes annual subscription on post-activation additions (restored bcadd with getAnnualSubscriptionForAddition) 5. Added join_date to Child and TemporaryMember model fillables Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Replace unsupported DROP INDEX IF EXISTS with information_schema check. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Gender: strictly enforce male/female only in member, spouse, child, temporary creation (validated from NID or manual input) - Spouse classification: under 21 = عضو تابع (dependent), 21+ = عضو عامل (working) - Post-activation lock: after membership payment (membership_number assigned), all member/dependent data becomes non-editable except by super admin - Locks: create, edit, update, archive on spouses, children, temporaries - Locks: edit, fill-form, update on member itself - UI: hides add/edit buttons when locked, shows lock indicator - Marriage rules already enforced: male→4 females max, female→1 male max (via Spouse::getMaxSpouses and gender cross-check from NID) Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Phase_64_002: Convert to closure-based migration with column existence checks (was failing because movement_type already existed from partial prior run) - Phase_65_012: Backtick-quote `row_number` (MySQL 8.0 reserved word) - Phase_64_001 seed: Use description_ar instead of non-existent description column, remove is_active (not in schema), add config_type and group_name Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Penalties only apply for late additions (post-activation). When adding spouses during the initial membership form, only the percentage fee applies — no yearly fines for marriage before membership. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- BillingService now marks dependents as paid when their DB status is active (handles combined membership payment where no individual addition_fee payment exists) - Remove annual subscription from addition form fee calculation (570 only, not 827) Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Fix membership payment sync, auto-send post-activation additions to cashier, and add fee calculation transparency - Fix critical bug in Cashier bootstrap where children/temporary_members activation failed silently due to non-existent join_date column (only spouses have it) - Add self-healing sync in MemberController::show() to fix historically stuck dependents - Auto-create payment_request when adding dependents to active members (post-activation) - Add pending additions UI section for active members showing cashier queue status - Store fee calculation breakdowns in new fee_breakdown_json column on dependent tables - Display expandable fee breakdowns in family tree for full calculation transparency - Add migration Phase_65_014 for fee_breakdown_json column Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- create.php: passport section (hidden by default) with passport number, manual DOB, manual gender - create.php: checkbox toggle to switch between NID and passport modes - create.php: JS hides NID card and shows passport section when toggled - MemberController: store() reads date_of_birth_manual/gender_manual for passport path - MemberController: nationality auto-set to أجنبي when using passport ID type - MemberController: saveFillForm() now includes passport_number in allowed fields Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
NID is the only ID verification needed. The FormBridge NEW_MEMBERSHIP schema had passport_number as required (with conditional visibility), causing browser validation errors. Now always uses our custom form which has no passport field. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Restructured create.php: NID is now primary input with auto-extracted DOB/age/gender/governorate displayed in highlighted results box - Rebuilt fill-form.php to match paper form sections: personal data, contact, residence, work details, referral source, special discount - All fill-form fields non-mandatory except qualification_id (pricing) - Spouse form: NID locks DOB field when parsed, shows source indicators - Children form: NID locks both DOB and gender when parsed - Added discount document upload handling to saveFillForm controller - Bilingual labels (Arabic/English) matching physical paper forms Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
- Views used ['code'] but query now returns ['account_code'] — fixed in budgets/index, daily_transactions/index, opening_entries/create - journal_entry_lines columns are 'debit'/'credit' not 'debit_amount'/ 'credit_amount' — fixed in BudgetService, HistoricalBalance, OpeningEntryController, DailyTransactionService - Column 'description' doesn't exist, use 'description_ar' Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- chart_of_accounts uses 'account_code' not 'code' — fixed in BudgetController, DailyTransactionController, OpeningEntryController, BudgetService - academy_levels uses 'level_order' not 'sort_order' — fixed in EnrollWizardController, PlayerController - Created 4 missing views: daily_cash, settlements/form, documentary_credits/form, guarantees/form Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Default to admin/ClubManagement superadmin account - Login form uses 'username' field, not 'email' Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 13 May, 2026 9 commits
-
-
Mahmoud Aglan authored
Write report to sys_get_temp_dir() instead of tools/ directory, and suppress with @ so it doesn't crash the page. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Visit /tools/smoke-test in browser to get full HTML report - Dark UI with stats cards, error details, and "Copy for Claude" button - Requires settings.edit permission (admin only) - Still works via CLI: php tools/smoke_test.php [url] [email] [pass] Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- SessionFeedbackController used CONCAT(first_name_ar, last_name_ar) but coaches table has full_name_ar — causes 500 on feedback pages - Add missing feedback_coach_summary.php view (controller referenced it) - Enhance smoke_test.php with better error extraction and Claude-pasteable output Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
All JOIN and SELECT queries referencing 'disciplines' updated to use the actual table name 'sport_disciplines' in Tournaments and PlayerAffairs modules. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Phase_63_005: removed AFTER `time_tier` (column doesn't exist), use AFTER `is_active` instead; removed duplicate `booker_type` ADD (already in schema) - Phase_63_006: renamed FK `fk_pa_player` → `fk_pach_player` and `fk_ppl_player` → `fk_pplog_player` to avoid duplicate constraint names Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-