1. 23 Aug, 2026 1 commit
    • Mahmoud Aglan's avatar
      feat(pricing): implement regulatory discounts (Articles 97-102, 110) · 3f42fa01
      Mahmoud Aglan authored
      Full-cycle implementation of club bylaw discount rules:
      - Art 97: Cross-branch member discounts (50% Sheraton6th Oct, 25% →Admin Capital)
      - Art 98: Government employees 50%, Ministry of Youth 62.5% at Admin Capital
      - Art 99: Ministry of Youth 25% at Sheraton/6th Oct
      - Art 100: Board of Trustees 50% + 2yr interest-free installment
      - Art 101: Ministry employees installment-only (no discount)
      - Art 102: Club employees (5+ yrs) up to 15%
      - Art 110: Group membership tiered (5-10→3%, 11-20→7%, 21+→10%)
      
      Includes: migration, seed data, model, service with eligibility engine,
      controller (CRUD + eligibility check API + application workflow),
      views (index, form, applications), routes, permissions, menu entry,
      and PricingEngine integration.
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      3f42fa01
  2. 20 Aug, 2026 2 commits
    • Mahmoud Aglan's avatar
    • Mahmoud Aglan's avatar
      feat(pricing+subscriptions): multi-tier board offers + fix first-year subscription logic · cb63de72
      Mahmoud Aglan authored
      Board Offers:
      - Add board_offer_tiers table for multiple payment plans per offer
      - Each offer now supports 4 tiers: cash (10% discount), 24mo/0%, 40mo/15%, 60mo/15%
      - View shows all tiers as selectable cards with pre-calculated breakdowns
      - Controller accepts offer_tier_id and uses tier-specific terms
      - Seed populates tiers for all active board offers
      - Legacy fallback preserved when no tiers are configured
      
      Subscription Fix:
      - First-year members no longer get subscription rows (membership fee covers current FY)
      - First-year dependents no longer get subscription rows (addition fee covers current FY)
      - MembershipValidationService bypasses subscription check for first-year members
      - AutoFreezeService.checkSubscriptionBlock bypasses for first-year members
      - MembershipRulesService.canPrintCarnet bypasses for first-year members
      - SubscriptionGenerator skips first-year members/dependents entirely
      - Individual subscription pay() now redirects to payYear() (all-or-nothing family payment)
      Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
      cb63de72
  3. 19 Aug, 2026 3 commits
  4. 18 Aug, 2026 9 commits
  5. 16 Aug, 2026 3 commits
  6. 12 Aug, 2026 16 commits
  7. 11 Aug, 2026 6 commits