package com.salesmanager.core.business.services.catalog.product; import java.math.BigDecimal; import java.util.List; import java.util.Locale; import com.salesmanager.core.business.exception.ServiceException; import com.salesmanager.core.model.catalog.product.Product; import com.salesmanager.core.model.catalog.product.attribute.ProductAttribute; import com.salesmanager.core.model.catalog.product.price.FinalPrice; import com.salesmanager.core.model.customer.Customer; import com.salesmanager.core.model.merchant.MerchantStore; import com.salesmanager.core.model.reference.currency.Currency; /** * Services for Product item price calculation. * @author Carl Samson * */ public interface PricingService { /** * Calculates the FinalPrice of a Product taking into account * all defined prices and possible rebates * @param product * @return * @throws ServiceException */ FinalPrice calculateProductPrice(Product product) throws ServiceException; /** * Calculates the FinalPrice of a Product taking into account * all defined prices and possible rebates. It also applies other calculation * based on the customer * @param product * @param customer * @return * @throws ServiceException */ FinalPrice calculateProductPrice(Product product, Customer customer) throws ServiceException; /** * Calculates the FinalPrice of a Product taking into account * all defined prices and possible rebates. This method should be used to calculate * any additional prices based on the default attributes or based on the user selected attributes. * @param product * @param attributes * @return * @throws ServiceException */ FinalPrice calculateProductPrice(Product product, List<ProductAttribute> attributes) throws ServiceException; /** * Calculates the FinalPrice of a Product taking into account * all defined prices and possible rebates. This method should be used to calculate * any additional prices based on the default attributes or based on the user selected attributes. * It also applies other calculation based on the customer * @param product * @param attributes * @param customer * @return * @throws ServiceException */ FinalPrice calculateProductPrice(Product product, List<ProductAttribute> attributes, Customer customer) throws ServiceException; /** * Method to be used to print a displayable formated amount to the end user * @param amount * @param store * @return * @throws ServiceException */ String getDisplayAmount(BigDecimal amount, MerchantStore store) throws ServiceException; /** * Method to be used when building an amount formatted with the appropriate currency * @param amount * @param locale * @param currency * @param store * @return * @throws ServiceException */ String getDisplayAmount(BigDecimal amount, Locale locale, Currency currency, MerchantStore store) throws ServiceException; /** * String format of the money amount without currency symbol * @param amount * @param store * @return * @throws ServiceException */ String getStringAmount(BigDecimal amount, MerchantStore store) throws ServiceException; }