The abstract class atg.commerce.pricing.ItemPriceCalculator
is the parent class for many item pricing calculators (for example, ItemListPriceCalculator
and ItemSalePriceCalculator
), consolidating the functionality that these calculators have in common.
This class determines a price for an object based on a pricesource
object and the properties of that pricesource
. It contains a single abstract method, priceItems
. Extending classes implement this method to leverage the other item pricing functionality that this class provides.
The ItemPriceCalculator
class also contains the following properties:
loggingIdentifier
: The ID that this class uses to identify itself in logs.pricePropertyName
: The name of the property of thepriceSource
that represents an item’s price. ThepriceSource
is the value returned from thegetPriceSource
property.requirePriceValue
: If this property istrue
, an exception is thrown if thepriceSource
of theCommerceItem
does not have itspricePropertyName
property set.priceFromCatalogRef
: If this property istrue
,getPriceSource
returns thecatalogRef
property of the inputCommerceItem
. If this property isfalse
,getPriceSource
returns theproductRef
property.
ItemPriceCalculator
determines an item’s price based on a property value. The property value comes from a priceSource
object. The priceSource
object can be one of two objects, depending on the boolean value of the priceFromCatalogRef
property.
If
true
, thepriceSource
object is thecatalogRef
property of the item to be priced.If
false
, thepriceSource
object is theproductRef
property of the item to be priced.
The catalogRef
property of items to be priced points to a SKU in the SKU catalog. The productRef
property points to a product in the product catalog. For more information, see the atg.commerce.order.CommerceItem
entry in the ATG Platform API Reference.
The pricePropertyName
in the ItemPriceCalculator
(and therefore the ItemListPriceCalculator
and ItemSalePriceCalculator
, which extend ItemPriceCalculator
) identifies the property on the priceSource
object (the SKU or product) that contains the price for the current item. The ItemListPriceCalculator
and ItemSalePriceCalculator
read this value and return a price object that contains the price.
How Classes that Extend ItemPriceCalculator Determine Prices
The ItemListPriceCalculator
extends ItemPriceCalculator
. In this example, the ItemListPriceCalculator
is set with the following properties:
priceFromCatalogRef
=true
(indicating it will get its property from a SKU)pricePropertyName
=listPrice
.
In this example, the SKU catalog contains a SKU that identifies blue shorts. That SKU has the following properties:
color
= blueitemType
= shortslistPrice
= 10.00
When a CommerceItem
is passed to the ItemListPriceCalculator
, this particular Itemlistpricecalculator
looks at the item’s catalogRef
property (SKU) and retrieves the value of that object’s listPrice
property (10.00). The ItemListPriceCalculator
then modifies the input price to be 10.00 and returns it.
The ItemSalePriceCalculator
works in almost the same way. The ItemSalePriceCalculator
has an additional property called onSalePropertyName
, which is a boolean property on the priceSource
object that indicates whether the item is on sale.
In this example, the priceFromCatalogRef
property of ItemSalePriceCalculator
is set to true
. The pricePropertyName
property is set to salePrice
. A SKU in the SKU catalog has a property called onSale
. If a SKU were on sale, the onSale
property would be set to true
. The onSalePropertyName
property of ItemSalePriceCalculator
is set to onSale
.
When an item is passed to the ItemSalePriceCalculator
, it has a catalogRef
property that points to a SKU from the SKU catalog.
color=blue
itemType=shorts
listPrice=10.00
onSale=true
salePrice=7.00
When the ItemSalePriceCalculator
receives this item, it uses the value of the SKU’s onSale
property to determine if it is on sale. In this example, the value is true
, indicating that the SKU is on sale. The calculator then gets the sale price using the SKU’s salePrice
property. The price in this case is 7.00. The calculator then modifies the input price for the item to be 7.00 and registers that a change has been made to the price. This registering is done by creating a new PricingAdjustment
and adding it to the adjustments property of the price object, which in this case is an ItemPriceInfo
. The adjustment would be -3.00, and it would show that the ItemSalePriceCalculator
was responsible for the change.