1. 16 Jul, 2026 7 commits
    • Mahmoud Aglan's avatar
      Expose proration settings in /settings/system → التسجيل tab · 85319db6
      Mahmoud Aglan authored
      Add allow_proration (boolean) and renewal_day (number, 1-28) to the
      enrollment settings schema with descriptive hints so admins can find and
      toggle partial monthly payment from the UI.
      Co-Authored-By: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      85319db6
    • Mahmoud Aglan's avatar
      Add essential products: quick-buttons in wizard, delivery tracking, admin price override on invoice · 9df1341d
      Mahmoud Aglan authored
      - Add is_essential boolean to products (migration + model + form toggle)
      - Essential products appear as quick-add buttons in registration wizard step 5 (no search needed), highlighted when added to cart
      - New EssentialDeliveries page (/inventory/essential-deliveries): lists all players who bought essential products, mark استلم/لم يستلم per item with who delivered and when
      - Delivery tracking: add is_delivered, delivered_at, delivered_by to invoice_items; hotbuy cart items now store itemable_type/id for proper morph link
      - Admin price override now stored in invoice item metadata (original_price, overridden_price, override_reason) and displayed on invoice print with crossed-out original price
      - "أساسي" badge on product list; "تسليم الأساسيات" button on product list header and sidebar
      Co-Authored-By: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      9df1341d
    • Mahmoud Aglan's avatar
      Expand wizard payment step: all 7 methods, partial, split, transaction refs · c6327cf7
      Mahmoud Aglan authored
      Payment modes:
      - Full (default): pays entire invoice amount
      - Partial: enter amount paid now, remainder stays as balance due on invoice
      - Split: two methods, amount1 + calculated remainder, both recorded as payments
      
      All 7 PaymentMethod values now available:
      - cash: no extra fields
      - card: transaction_reference (required)
      - bank_transfer: transaction_reference (required), bank_name (optional)
      - online (Instapay/digital wallets): transaction_reference (required)
      - wallet (club wallet): deducts from member balance
      - cheque: cheque_number (required), bank_name (optional)
      - other: notes field
      
      Each payment recorded with gateway_data JSON (ref, cheque_number, bank_name)
      Enrollment payment_status only set to 'paid' when full amount covered
      Validation rules built dynamically from active mode + method combination
      Co-Authored-By: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      c6327cf7
    • Mahmoud Aglan's avatar
      Unify receipt/invoice settings: 3-tab template system + fix seeder · 2be39175
      Mahmoud Aglan authored
      - EnrollmentSettingsSeeder: fix Organization → Academy class name
      - ReceiptTemplate: add defaultInvoiceFields/Settings + defaultPaymentFields/Settings
      - ReceiptSettings: rewritten with pos/invoice/payment tabs; each tab loads
        its own ReceiptTemplate (type='invoice'|'payment') and saves independently
      - receipt-settings.blade.php: 3-tab UI with field toggles + appearance settings
        per document type; link to branding page for logo/colors
      - print/invoice.blade.php: all 15 fields now gated by invoice template flags
        (logo, academy name, branch, tax number, client details, items table,
        subtotal, discount, tax, service fee, paid amount, payments history,
        signature, terms & conditions, footer text)
      - print/payment-receipt.blade.php: all 11 fields gated by payment template;
        footer text pulled from template settings instead of hardcoded string
      Co-Authored-By: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      2be39175
    • Mahmoud Aglan's avatar
      Fix log permission: touch and chown laravel.log in entrypoint · 20284ee2
      Mahmoud Aglan authored
      CapRover volume remounts can override build-time chown, leaving
      storage/logs owned by root. Explicitly touch + chown the log file
      at container start before php-fpm runs.
      Co-Authored-By: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      20284ee2
    • Mahmoud Aglan's avatar
    • Mahmoud Aglan's avatar
      Add phone-or-email login, Egyptian NID decoder, proration engine, and receptionist wizard overhaul · 0504e7d1
      Mahmoud Aglan authored
      - AuthService: accepts email or phone for login (identifier-based lookup)
      - Login UI: updated to text input with Arabic labels
      - EgyptianNidDecoder: decodes 14-digit NID → birth date, gender, governorate
      - ProrationResult DTO + ProrationService: mid-month enrollment fee proration (x/30 of remaining days based on configurable renewal day)
      - EnrollmentSettingsSeeder: seeds enrollment.allow_proration and enrollment.renewal_day per academy
      - NewRegistrationWizard: rewritten — player-first flow, NID auto-decode locks birth/gender/governorate, foreign player toggle, guardian name deduced from player name, phone-only guardian, super admin price override, proration display
      - EnrollmentService: applies proration to invoice creation
      - EnrollExistingWizard: adds proratedProgramFee computed property, review step shows original vs prorated fee
      - Migration: adds governorate column to people table
      Co-Authored-By: 's avatarClaude Sonnet 4.6 <noreply@anthropic.com>
      0504e7d1
  2. 11 Jul, 2026 6 commits
  3. 10 Jul, 2026 10 commits
  4. 09 Jul, 2026 13 commits
  5. 07 Jul, 2026 3 commits
  6. 06 Jul, 2026 1 commit