Dynamics Retail Discount Extensibility – Three Discount Categories

We have decided to freeze concurrency models: partners choose either pricing zone, or compete within priority and compound across, and then focus on creating new discount types and/or other customizations.

First, threshold discounts are different in that retailers usually apply them at the end, and in one discount application, i.e. you do not get multiple $10 off in one transaction. As such, we split discounts into two categories: non-threshold and threshold. A threshold discount is of type IDiscountThreshold.

Non-threshold discounts are usually of type IDiscountForBestDeal. In short, when there is a competition, either between multiple discounts or within a single discount, we try to figure out the best deal. However, some retailers want to have a result that favors retailers for a special discount, for example, least expensive. We cannot figure out a way to fit favor-retailer discounts into the best deal problem. As such, we introduce a new type IDiscountPostBestDeal.

The class diagram first. All discounts have to inherit from DiscountBase, which provide basic discount data structure (lookups) and some utilities, and to implement one of the three interfaces we mentioned earlier. In addition, a discount may implement some optional interfaces.

discountclassdiagram

The second diagram shows how the three categories of discounts fit into overall flow for both concurrency models we support: pricing zone, and compete within priority and compound across. (The difference between the two models are about how to compete and how to compound.)

discount-flow-diagrams

The last diagram shows the overall flow for discounts of type IDiscountForBestDeal.

discount-best-deal-diagrams

We will explore details of three discount interfaces in subsequent posts. Stay tuned.

Related: Dynamics Retail Discount Extensibility Overall Approach

Related: Dynamics Retail Discount Concepts: Discountable Item Group