package com.salesmanager.core.business.services.catalog.product;
import java.math.BigDecimal;
import java.util.List;
import java.util.Locale;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.business.utils.ProductPriceUtils;
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;
/**
* Contains all the logic required to calculate product price
* @author Carl Samson
*
*/
@Service("pricingService")
public class PricingServiceImpl implements PricingService {
private static final Logger LOGGER = LoggerFactory.getLogger(PricingServiceImpl.class);
@Inject
private ProductPriceUtils priceUtil;
@Override
public FinalPrice calculateProductPrice(Product product) throws ServiceException {
return priceUtil.getFinalPrice(product);
}
@Override
public FinalPrice calculateProductPrice(Product product, Customer customer) throws ServiceException {
/** TODO add rules for price calculation **/
return priceUtil.getFinalPrice(product);
}
@Override
public FinalPrice calculateProductPrice(Product product, List<ProductAttribute> attributes) throws ServiceException {
return priceUtil.getFinalProductPrice(product, attributes);
}
@Override
public FinalPrice calculateProductPrice(Product product, List<ProductAttribute> attributes, Customer customer) throws ServiceException {
/** TODO add rules for price calculation **/
return priceUtil.getFinalProductPrice(product, attributes);
}
@Override
public String getDisplayAmount(BigDecimal amount, MerchantStore store) throws ServiceException {
try {
String price= priceUtil.getStoreFormatedAmountWithCurrency(store,amount);
return price;
} catch (Exception e) {
LOGGER.error("An error occured when trying to format an amount " + amount.toString());
throw new ServiceException(e);
}
}
@Override
public String getDisplayAmount(BigDecimal amount, Locale locale,
Currency currency, MerchantStore store) throws ServiceException {
try {
String price= priceUtil.getFormatedAmountWithCurrency(locale, currency, amount);
return price;
} catch (Exception e) {
LOGGER.error("An error occured when trying to format an amunt " + amount.toString() + " using locale " + locale.toString() + " and currency " + currency.toString());
throw new ServiceException(e);
}
}
@Override
public String getStringAmount(BigDecimal amount, MerchantStore store)
throws ServiceException {
try {
String price = priceUtil.getAdminFormatedAmount(store, amount);
return price;
} catch (Exception e) {
LOGGER.error("An error occured when trying to format an amount " + amount.toString());
throw new ServiceException(e);
}
}
}