Announcement: You can find the guides for Commerce 7.5 and later on the new Elastic Path Documentation site. The Developer Center continues to support Commerce 6.13.0 through 7.4.1.Visit new site

Managing pricing

Managing pricing

Getting Prices in the Storefront

In the storefront, controllers use the PriceLookupFacade service to retrieve prices. For example, AbstractCatalogControllerImpl contains the following code:

protected Map<String, Price> getProductPrices(final Collection<StoreProduct> products, final ShoppingCart cart) {
    if (products == null) {
        return Collections.EMPTY_MAP;
    }
    return priceLookupFacade.getPromotedPricesForProducts(
            new ArrayList<Product>(products),
            cart.getStore(),
            cart.getCustomerSession(),
            cart.getAppliedRules());
}

The getPromotedPricesForProducts method of PriceLookupFacade returns a map of prices (keyed on product code) for the current shopper for the specified products with all cart promotion rules applied.

Getting the Shopper's Price List Stack

When the shopper sends a request to the storefront, WebCustomerSessionServiceImpl checks if that customer's price list stack is valid. For example, if the currency has changed, the stack is invalidated. If the price list stack is invalid, the session service calls the PriceListLookupService's retrievePriceListStack method to re-fetch the price list stack.

void retrievePriceListStack(final CustomerSession customerSession) {
    customerSession.setPriceListStack(
            priceListLookupService.getPriceListStack(
                    customerSession.getCustomer().getStore().getCatalog().getCode(),
                    customerSession.getCurrency(),
                    customerSession.getCustomerTagSet()
            )
    );
}

getPriceListStack gets the price list stack for a shopper in the specified currency. Note that you can customize how it determines which price lists are in the stack by Customizing the price list stack lookup strategy and wiring it to the PriceListLookupService bean.

Getting Prices in the Commerce Manger Client

The PriceListService is used in the CM client to retrieve price list descriptors and prices. Note that this service uses DTOs to minimize overhead of working with domain objects, which contain additional data and persistence method that are not required on the client.

PriceListService priceListService = getBeanFactory().getBean(ContextIdNames.PRICE_LIST_CLIENT_SERVICE);
BaseAmountDTO baseAmount = priceListService.getBaseAmount(baseAmountGuid);