- 14 May, 2026 13 commits
-
-
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 14 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
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
DebugBar used self:: in heredoc causing undefined variable fatal error. Database query instrumentation now wrapped in try/catch so logging/debug can never crash actual queries. Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-
- 12 May, 2026 8 commits
-
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
Cast string params to int at the start of each controller method. 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
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
- Phase_45_004: activity_pricing has no 'fee_type' column, use 'nonmember_rate_pm' as AFTER target instead - Seed Phase_52_001: system_config uses 'group_name' not 'category', and 'description_ar' not 'description', and needs 'config_type' Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
Grid rewrite: - Fully interactive lanes×timeslots grid with click/drag cell selection - Click individual cells, drag-select rectangles, row headers (full lane), column headers (full time slot) - Inline booking panel slides up from bottom when cells are selected — no separate page needed, book directly from the grid - Recurring schedules shown as purple cells on the grid - Real-time refresh every 30s via AJAX - Visual pool dimensions display with lane numbers New: Weekly Schedules (pool_schedules): - Create recurring weekly templates (coach, academy, age group, gender, lanes) - Effective date range, color-coded, max swimmers per schedule - Auto-displayed on the grid for the matching day of week - Manage page with create form + list of all schedules with delete New: Pool Dashboard (/pool/{id}/dashboard): - KPI cards: today/week/month bookings, swimmers, revenue, utilization % - Heatmap: bookings per hour per day of week (last 30 days) with color intensity - Booking type breakdown with progress bars - Lane utilization bars (hours used vs available) - Peak hours chart with AI recommendations for increasing occupancy - Low-utilization detection + suggestions Updated pool index: - Cards with mini pool visual, 3 action buttons (grid, dashboard, schedules) - Better visual hierarchy and information density Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
- Medical records: upload with certificate type (ممارس/أكاديمي/دولي), auto-validity calculation, Board of Trustees approval workflow (pending → approved/rejected) - New /medical-approvals page for مجلس الأمناء with approve/reject actions - Mirror (المراية): interactive grid system for facility scheduling - create grids, assign coaches/academies to boxes, manage trainees (max 5 per box) - Facility dashboard: per-facility stats with day/week/month/custom date filtering - FacilityPricingService: reads club pricing rules from system_config, integrates with reservation creation as rate fallback - Pricing seed: official 2025 club ruleset for non-educational activities stored in system_config (member/non-member rates, entry tickets, general fees) - Updated sidebar menu with medical approvals link Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 11 May, 2026 3 commits
-
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
-
Mahmoud Aglan authored
- Fix route URL mismatches in player show.php (card/activate, card/suspend, card/revoke, enroll/drop) - Fix Sports module permissions (was using temp.view/temp.add, now sports.view/sports.add/sports.convert) - Add CSRF middleware to Sports POST route - Fix AcademyEnrollment::getForPlayer() to JOIN academy/level names - Add NID auto-parsing API and JS to player create/edit (deduces DOB, age, gender, governorate) - Replace raw ID inputs in enrollment form with cascading dropdowns (academy→level→schedule) - Add profile photo upload to player create/edit/show with live preview - Add full player history timeline (enrollments, payments, medical, attendance) - Add sport→facility cascade filter to reservation create form - Make all code fields optional with auto-generation (Disciplines, Academies, Facilities, Levels) - Overhaul Sports create form with discipline dropdown and competitive level select Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
- 10 May, 2026 2 commits
-
-
Mahmoud Aglan authored
The service_catalog table does not have a 'category' column — the seed was inserting into it causing deployment to fail with "Unknown column 'category'". Co-Authored-By:Claude Opus 4.6 <noreply@anthropic.com>
-
Mahmoud Aglan authored
-