• Mahmoud Aglan's avatar
    fix(pricing,members): merge board-offer discounts into the member special-discount dropdown · 01e3b4ef
    Mahmoud Aglan authored
    Client clarified their earlier request: the member "special discount"
    dropdown should show board-approved special_discounts AND active
    عروض مجلس الإدارة (board_offers) cash discounts side by side, not one
    instead of the other — they'd stopped seeing anything they'd added
    under Board Offers.
    
    - Add members.special_discount_source ('special_discount'|'board_offer')
      and drop the hard FK on special_discount_id (a single column can no
      longer FK exactly one table). Integrity is now validated in
      MemberController::parseDiscountSelection().
    - BoardOffer::allActiveWithCashDiscount() surfaces board offers that
      define a cash discount as selectable options.
    - SpecialDiscountService::resolveAssignedDiscount()/amountForType() give
      one place that normalizes "the member's assigned discount" across both
      source tables — used by BillingService's invoice line item, the show
      page's applied-discount banner, and the dropdown's own validation.
    - fill-form/edit/show views render two <optgroup>s ("عروض مجلس الإدارة" /
      "الخصومات الخاصة") with prefixed option values (bo:<id> / sd:<id>) so a
      single form field can select from either table; edit.php's live
      discount-amount preview now handles fixed-amount discounts too, not
      just percentage.
    Co-Authored-By: 's avatarClaude Sonnet 5 <noreply@anthropic.com>
    01e3b4ef
Pricing.md 9.44 KB