Skip to content

Pricing & Promotions

Pricing & Promotions is the domain that determines which price a shopper or account is eligible to receive, and how campaign-style discounts are applied on top of that pricing.

This is the right second deep documentation pass because the framework clearly separates offer resolution from promotion code redemption, and both areas touch storefront behavior, admin tools, Excel workflows, and ERP sync.

Status

  • [x] Domain overview written
  • [x] Subdomains reviewed
  • [x] Technical node pages linked
  • [x] End-user concept pages linked
  • [x] Task guides linked

Responsibility

This domain is responsible for:

  • storing product-level sellable price records
  • resolving which offer is available for a given shopper, location, and quantity
  • materializing best-price snapshots for storefront pricing surfaces
  • managing promotions, codes, conditions, and per-product benefits
  • applying validated promotion redemptions during cart and order recalculation

Subdomains

  • Offer Resolution
    • ProductOffer
  • System-Generated Pricing Views
    • FeaturedOffer
  • Promotions And Code Redemption
    • Promotion
    • PromotionCode
    • PromotionCondition
    • PromotionBenefit
  • Folded Supporting Records
    • PriceHistory
    • PromotionRedemption
    • PriceList
    • ProductOfferBillingAddress
    • ProductOfferShippingAddress
    • ProductOfferProductInventoryItem

Classification Decisions

Standalone technical pages

Standalone end-user pages

Standalone task guides

Folded into parent pages for now

  • PriceHistory
    • folded into Product Offer
  • PromotionRedemption
    • folded into Promotion Code and Promotions
  • PriceList
    • folded into domain notes because the default framework route exists, but the base customer implementation is intentionally incomplete
  • targeting pivots such as ProductOfferBillingAddress, ProductOfferShippingAddress, ProductOfferProductInventoryItem
    • folded into Product Offer

Explicitly deferred or ambiguous

  • price_rule_id, price_zone_id, and custom_price_id
    • present on ProductOffer and in admin filters, but this sprint did not find packaged first-class ownership surfaces that justify standalone pages yet

Evidence Highlights

Framework ownership

  • packages/framework/src/Models/ProductOffer.php
  • packages/framework/src/Models/FeaturedOffer.php
  • packages/framework/src/Models/PriceHistory.php
  • packages/framework/src/Models/Promotion.php
  • packages/framework/src/Models/PromotionCode.php
  • packages/framework/src/Models/PromotionCondition.php
  • packages/framework/src/Models/PromotionBenefit.php
  • packages/framework/src/Models/PromotionRedemption.php

Admin surfaces

  • packages/admin/routes/web.php
  • packages/admin/src/Livewire/Admin/Settings/Promotions
  • packages/admin/src/Livewire/Admin/Settings/Promotion
  • packages/admin/src/Livewire/Admin/Forms/PromotionForm.php
  • packages/admin/src/Livewire/Admin/Tools/Excel/ExportDialog/ProductOffersExport.php
  • packages/admin/src/Livewire/Admin/Tools/Excel/ExportDialog/PromotionsExport.php
  • packages/admin/src/Livewire/Admin/Tools/Excel/ImportDialog/PromotionImport.php
  • packages/admin/src/Livewire/Admin/Order/Items/AddItemToOrder/ProductOffersDialog.php

Storefront surfaces

  • packages/storefront/src/Livewire/Storefront/Product/OfferBlock.php
  • packages/storefront/src/Livewire/Storefront/Product/PricingWrapper.php
  • packages/storefront/src/View/Components/Product/Pricing.php
  • packages/storefront/src/Livewire/Storefront/Cart/PromotionSection.php
  • packages/framework/src/Http/Resources/Storefront/ProductOfferResource.php
  • packages/framework/src/Http/Resources/Storefront/PromotionRedemptionResource.php

Integration and bulk-data surfaces

  • packages/framework/src/Actions/ProductOffer
  • packages/framework/src/Actions/FeaturedOffer/CalculateFeaturedOffers.php
  • packages/framework/src/Actions/PriceList/DownloadPriceList.php
  • packages/framework/src/Imports/Promotions
  • packages/framework/src/Exports/Promotions
  • packages/framework/src/Actions/Exports/ProductOffer
  • packages/framework/src/Actions/ErpBridge/ProductOffer
  • packages/erp-bridge/src/Requests/ProductOffers/GetProductOffersRequest.php
  • ProductOffer is the pricing center of gravity in the framework, but this first pass did not find a packaged admin CRUD screen equivalent to the promotion settings UI.
  • FeaturedOffer is a system-generated pricing snapshot, not a manually authored settings record.
  • Promotions are feature-gated through PromotionsFeature, and featured-offer calculation is separately gated through CalculateFeaturedOfferFeature.
  • The default price-list route exists, but the base Customer::downloadPriceList() implementation throws until the host app provides the real customer-specific behavior.

Priority Technical Pages

Priority End-User Pages

Priority Task Guides

Quick Checklists