use of com.salesmanager.core.model.order.OrderTotalSummary in project shopizer by shopizer-ecommerce.
the class OrderFacadeImpl method calculateOrderTotal.
private OrderTotalSummary calculateOrderTotal(MerchantStore store, Customer customer, com.salesmanager.shop.model.order.v0.PersistableOrder order, Language language) throws Exception {
OrderTotalSummary orderTotalSummary = null;
OrderSummary summary = new OrderSummary();
if (order instanceof ShopOrder) {
ShopOrder o = (ShopOrder) order;
summary.setProducts(o.getShoppingCartItems());
if (o.getShippingSummary() != null) {
summary.setShippingSummary(o.getShippingSummary());
}
if (!StringUtils.isBlank(o.getCartCode())) {
ShoppingCart shoppingCart = shoppingCartFacade.getShoppingCartModel(o.getCartCode(), store);
// promo code
if (!StringUtils.isBlank(shoppingCart.getPromoCode())) {
// promo
Date promoDateAdded = shoppingCart.getPromoAdded();
// valid
// 1 day
Instant instant = promoDateAdded.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
LocalDate date = zdt.toLocalDate();
// date added < date + 1 day
LocalDate tomorrow = LocalDate.now().plusDays(1);
if (date.isBefore(tomorrow)) {
summary.setPromoCode(shoppingCart.getPromoCode());
} else {
// clear promo
shoppingCart.setPromoCode(null);
shoppingCartService.saveOrUpdate(shoppingCart);
}
}
}
orderTotalSummary = orderService.caculateOrderTotal(summary, customer, store, language);
} else {
// PersistableOrder not implemented
throw new Exception("calculateOrderTotal not yet implemented for PersistableOrder");
}
return orderTotalSummary;
}
use of com.salesmanager.core.model.order.OrderTotalSummary in project shopizer by shopizer-ecommerce.
the class OrderFacadeImpl method calculateOrderTotal.
@Override
public OrderTotalSummary calculateOrderTotal(MerchantStore store, com.salesmanager.shop.model.order.v0.PersistableOrder order, Language language) throws Exception {
List<PersistableOrderProduct> orderProducts = order.getOrderProductItems();
ShoppingCartItemPopulator populator = new ShoppingCartItemPopulator();
populator.setProductAttributeService(productAttributeService);
populator.setProductService(productService);
populator.setShoppingCartService(shoppingCartService);
List<ShoppingCartItem> items = new ArrayList<ShoppingCartItem>();
for (PersistableOrderProduct orderProduct : orderProducts) {
ShoppingCartItem item = populator.populate(orderProduct, new ShoppingCartItem(), store, language);
items.add(item);
}
Customer customer = customer(order.getCustomer(), store, language);
OrderTotalSummary summary = this.calculateOrderTotal(store, customer, order, language);
return summary;
}
use of com.salesmanager.core.model.order.OrderTotalSummary in project shopizer by shopizer-ecommerce.
the class OrderServiceImpl method caculateOrder.
private OrderTotalSummary caculateOrder(OrderSummary summary, Customer customer, final MerchantStore store, final Language language) throws Exception {
OrderTotalSummary totalSummary = new OrderTotalSummary();
List<OrderTotal> orderTotals = new ArrayList<OrderTotal>();
Map<String, OrderTotal> otherPricesTotals = new HashMap<String, OrderTotal>();
ShippingConfiguration shippingConfiguration = null;
BigDecimal grandTotal = new BigDecimal(0);
grandTotal.setScale(2, RoundingMode.HALF_UP);
// price by item
/**
* qty * price
* subtotal
*/
BigDecimal subTotal = new BigDecimal(0);
subTotal.setScale(2, RoundingMode.HALF_UP);
for (ShoppingCartItem item : summary.getProducts()) {
BigDecimal st = item.getItemPrice().multiply(new BigDecimal(item.getQuantity()));
item.setSubTotal(st);
subTotal = subTotal.add(st);
// Other prices
FinalPrice finalPrice = item.getFinalPrice();
if (finalPrice != null) {
List<FinalPrice> otherPrices = finalPrice.getAdditionalPrices();
if (otherPrices != null) {
for (FinalPrice price : otherPrices) {
if (!price.isDefaultPrice()) {
OrderTotal itemSubTotal = otherPricesTotals.get(price.getProductPrice().getCode());
if (itemSubTotal == null) {
itemSubTotal = new OrderTotal();
itemSubTotal.setModule(Constants.OT_ITEM_PRICE_MODULE_CODE);
itemSubTotal.setTitle(Constants.OT_ITEM_PRICE_MODULE_CODE);
itemSubTotal.setOrderTotalCode(price.getProductPrice().getCode());
itemSubTotal.setOrderTotalType(OrderTotalType.PRODUCT);
itemSubTotal.setSortOrder(0);
otherPricesTotals.put(price.getProductPrice().getCode(), itemSubTotal);
}
BigDecimal orderTotalValue = itemSubTotal.getValue();
if (orderTotalValue == null) {
orderTotalValue = new BigDecimal(0);
orderTotalValue.setScale(2, RoundingMode.HALF_UP);
}
orderTotalValue = orderTotalValue.add(price.getFinalPrice());
itemSubTotal.setValue(orderTotalValue);
if (price.getProductPrice().getProductPriceType().name().equals(OrderValueType.ONE_TIME)) {
subTotal = subTotal.add(price.getFinalPrice());
}
}
}
}
}
}
// only in order page, otherwise invokes too many processing
if (OrderSummaryType.ORDERTOTAL.name().equals(summary.getOrderSummaryType().name()) || OrderSummaryType.SHOPPINGCART.name().equals(summary.getOrderSummaryType().name())) {
// Post processing order total variation modules for sub total calculation - drools, custom modules
// may affect the sub total
OrderTotalVariation orderTotalVariation = orderTotalService.findOrderTotalVariation(summary, customer, store, language);
int currentCount = 10;
if (CollectionUtils.isNotEmpty(orderTotalVariation.getVariations())) {
for (OrderTotal variation : orderTotalVariation.getVariations()) {
variation.setSortOrder(currentCount++);
orderTotals.add(variation);
subTotal = subTotal.subtract(variation.getValue());
}
}
}
totalSummary.setSubTotal(subTotal);
grandTotal = grandTotal.add(subTotal);
OrderTotal orderTotalSubTotal = new OrderTotal();
orderTotalSubTotal.setModule(Constants.OT_SUBTOTAL_MODULE_CODE);
orderTotalSubTotal.setOrderTotalType(OrderTotalType.SUBTOTAL);
orderTotalSubTotal.setOrderTotalCode("order.total.subtotal");
orderTotalSubTotal.setTitle(Constants.OT_SUBTOTAL_MODULE_CODE);
orderTotalSubTotal.setSortOrder(5);
orderTotalSubTotal.setValue(subTotal);
orderTotals.add(orderTotalSubTotal);
// shipping
if (summary.getShippingSummary() != null) {
OrderTotal shippingSubTotal = new OrderTotal();
shippingSubTotal.setModule(Constants.OT_SHIPPING_MODULE_CODE);
shippingSubTotal.setOrderTotalType(OrderTotalType.SHIPPING);
shippingSubTotal.setOrderTotalCode("order.total.shipping");
shippingSubTotal.setTitle(Constants.OT_SHIPPING_MODULE_CODE);
shippingSubTotal.setSortOrder(100);
orderTotals.add(shippingSubTotal);
if (!summary.getShippingSummary().isFreeShipping()) {
shippingSubTotal.setValue(summary.getShippingSummary().getShipping());
grandTotal = grandTotal.add(summary.getShippingSummary().getShipping());
} else {
shippingSubTotal.setValue(new BigDecimal(0));
grandTotal = grandTotal.add(new BigDecimal(0));
}
// check handling fees
shippingConfiguration = shippingService.getShippingConfiguration(store);
if (summary.getShippingSummary().getHandling() != null && summary.getShippingSummary().getHandling().doubleValue() > 0) {
if (shippingConfiguration.getHandlingFees() != null && shippingConfiguration.getHandlingFees().doubleValue() > 0) {
OrderTotal handlingubTotal = new OrderTotal();
handlingubTotal.setModule(Constants.OT_HANDLING_MODULE_CODE);
handlingubTotal.setOrderTotalType(OrderTotalType.HANDLING);
handlingubTotal.setOrderTotalCode("order.total.handling");
handlingubTotal.setTitle(Constants.OT_HANDLING_MODULE_CODE);
// handlingubTotal.setText("order.total.handling");
handlingubTotal.setSortOrder(120);
handlingubTotal.setValue(summary.getShippingSummary().getHandling());
orderTotals.add(handlingubTotal);
grandTotal = grandTotal.add(summary.getShippingSummary().getHandling());
}
}
}
// tax
List<TaxItem> taxes = taxService.calculateTax(summary, customer, store, language);
if (taxes != null && taxes.size() > 0) {
BigDecimal totalTaxes = new BigDecimal(0);
totalTaxes.setScale(2, RoundingMode.HALF_UP);
int taxCount = 200;
for (TaxItem tax : taxes) {
OrderTotal taxLine = new OrderTotal();
taxLine.setModule(Constants.OT_TAX_MODULE_CODE);
taxLine.setOrderTotalType(OrderTotalType.TAX);
taxLine.setOrderTotalCode(tax.getLabel());
taxLine.setSortOrder(taxCount);
taxLine.setTitle(Constants.OT_TAX_MODULE_CODE);
taxLine.setText(tax.getLabel());
taxLine.setValue(tax.getItemPrice());
totalTaxes = totalTaxes.add(tax.getItemPrice());
orderTotals.add(taxLine);
// grandTotal=grandTotal.add(tax.getItemPrice());
taxCount++;
}
grandTotal = grandTotal.add(totalTaxes);
totalSummary.setTaxTotal(totalTaxes);
}
// grand total
OrderTotal orderTotal = new OrderTotal();
orderTotal.setModule(Constants.OT_TOTAL_MODULE_CODE);
orderTotal.setOrderTotalType(OrderTotalType.TOTAL);
orderTotal.setOrderTotalCode("order.total.total");
orderTotal.setTitle(Constants.OT_TOTAL_MODULE_CODE);
// orderTotal.setText("order.total.total");
orderTotal.setSortOrder(500);
orderTotal.setValue(grandTotal);
orderTotals.add(orderTotal);
totalSummary.setTotal(grandTotal);
totalSummary.setTotals(orderTotals);
return totalSummary;
}
use of com.salesmanager.core.model.order.OrderTotalSummary in project shopizer by shopizer-ecommerce.
the class ShoppingCartCalculationServiceImpl method calculate.
/**
* <p>
* Method used to recalculate state of shopping cart every time any change
* has been made to underlying {@link ShoppingCart} object in DB.
* </p>
* Following operations will be performed by this method.
*
* <li>Calculate price for each {@link ShoppingCartItem} and update it.</li>
* <p>
* This method is backbone method for all price calculation related to
* shopping cart.
* </p>
*
* @see OrderServiceImpl
*
* @param cartModel
* @param store
* @param language
* @throws ServiceException
*/
@Override
public OrderTotalSummary calculate(final ShoppingCart cartModel, final MerchantStore store, final Language language) throws ServiceException {
Validate.notNull(cartModel, "cart cannot be null");
Validate.notNull(cartModel.getLineItems(), "Cart should have line items.");
Validate.notNull(store, "MerchantStore cannot be null");
OrderTotalSummary orderTotalSummary = orderService.calculateShoppingCartTotal(cartModel, store, language);
updateCartModel(cartModel);
return orderTotalSummary;
}
use of com.salesmanager.core.model.order.OrderTotalSummary in project shopizer by shopizer-ecommerce.
the class ReadableShoppingCartMapper method merge.
@Override
public ReadableShoppingCart merge(ShoppingCart source, ReadableShoppingCart destination, MerchantStore store, Language language) {
Validate.notNull(source, "ShoppingCart cannot be null");
Validate.notNull(destination, "ReadableShoppingCart cannot be null");
Validate.notNull(store, "MerchantStore cannot be null");
Validate.notNull(language, "Language cannot be null");
destination.setCode(source.getShoppingCartCode());
int cartQuantity = 0;
destination.setCustomer(source.getCustomerId());
try {
if (!StringUtils.isBlank(source.getPromoCode())) {
// promo valid 1 day
Date promoDateAdded = source.getPromoAdded();
if (promoDateAdded == null) {
promoDateAdded = new Date();
}
Instant instant = promoDateAdded.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
LocalDate date = zdt.toLocalDate();
// date added < date + 1 day
LocalDate tomorrow = LocalDate.now().plusDays(1);
if (date.isBefore(tomorrow)) {
destination.setPromoCode(source.getPromoCode());
}
}
Set<com.salesmanager.core.model.shoppingcart.ShoppingCartItem> items = source.getLineItems();
if (items != null) {
for (com.salesmanager.core.model.shoppingcart.ShoppingCartItem item : items) {
ReadableShoppingCartItem shoppingCartItem = new ReadableShoppingCartItem();
readableMinimalProductMapper.merge(item.getProduct(), shoppingCartItem, store, language);
// ReadableProductPopulator readableProductPopulator = new
// ReadableProductPopulator();
// readableProductPopulator.setPricingService(pricingService);
// readableProductPopulator.setimageUtils(imageUtils);
// readableProductPopulator.populate(item.getProduct(), shoppingCartItem, store,
// language);
shoppingCartItem.setPrice(item.getItemPrice());
shoppingCartItem.setFinalPrice(pricingService.getDisplayAmount(item.getItemPrice(), store));
shoppingCartItem.setQuantity(item.getQuantity());
cartQuantity = cartQuantity + item.getQuantity();
BigDecimal subTotal = pricingService.calculatePriceQuantity(item.getItemPrice(), item.getQuantity());
// calculate sub total (price * quantity)
shoppingCartItem.setSubTotal(subTotal);
shoppingCartItem.setDisplaySubTotal(pricingService.getDisplayAmount(subTotal, store));
Set<com.salesmanager.core.model.shoppingcart.ShoppingCartAttributeItem> attributes = item.getAttributes();
if (attributes != null) {
for (com.salesmanager.core.model.shoppingcart.ShoppingCartAttributeItem attribute : attributes) {
ProductAttribute productAttribute = productAttributeService.getById(attribute.getProductAttributeId());
if (productAttribute == null) {
LOG.warn("Product attribute with ID " + attribute.getId() + " not found, skipping cart attribute " + attribute.getId());
continue;
}
ReadableShoppingCartAttribute cartAttribute = new ReadableShoppingCartAttribute();
cartAttribute.setId(attribute.getId());
ProductOption option = productAttribute.getProductOption();
ProductOptionValue optionValue = productAttribute.getProductOptionValue();
List<ProductOptionDescription> optionDescriptions = option.getDescriptionsSettoList();
List<ProductOptionValueDescription> optionValueDescriptions = optionValue.getDescriptionsSettoList();
String optName = null;
String optValue = null;
if (!CollectionUtils.isEmpty(optionDescriptions) && !CollectionUtils.isEmpty(optionValueDescriptions)) {
optName = optionDescriptions.get(0).getName();
optValue = optionValueDescriptions.get(0).getName();
for (ProductOptionDescription optionDescription : optionDescriptions) {
if (optionDescription.getLanguage() != null && optionDescription.getLanguage().getId().intValue() == language.getId().intValue()) {
optName = optionDescription.getName();
break;
}
}
for (ProductOptionValueDescription optionValueDescription : optionValueDescriptions) {
if (optionValueDescription.getLanguage() != null && optionValueDescription.getLanguage().getId().intValue() == language.getId().intValue()) {
optValue = optionValueDescription.getName();
break;
}
}
}
if (optName != null) {
ReadableShoppingCartAttributeOption attributeOption = new ReadableShoppingCartAttributeOption();
attributeOption.setCode(option.getCode());
attributeOption.setId(option.getId());
attributeOption.setName(optName);
cartAttribute.setOption(attributeOption);
}
if (optValue != null) {
ReadableShoppingCartAttributeOptionValue attributeOptionValue = new ReadableShoppingCartAttributeOptionValue();
attributeOptionValue.setCode(optionValue.getCode());
attributeOptionValue.setId(optionValue.getId());
attributeOptionValue.setName(optValue);
cartAttribute.setOptionValue(attributeOptionValue);
}
shoppingCartItem.getCartItemattributes().add(cartAttribute);
}
}
destination.getProducts().add(shoppingCartItem);
}
}
// Calculate totals using shoppingCartService
// OrderSummary contains ShoppingCart items
OrderSummary summary = new OrderSummary();
List<com.salesmanager.core.model.shoppingcart.ShoppingCartItem> productsList = new ArrayList<com.salesmanager.core.model.shoppingcart.ShoppingCartItem>();
productsList.addAll(source.getLineItems());
summary.setProducts(productsList);
// OrdetTotalSummary contains all calculations
OrderTotalSummary orderSummary = shoppingCartCalculationService.calculate(source, store, language);
if (CollectionUtils.isNotEmpty(orderSummary.getTotals())) {
if (orderSummary.getTotals().stream().filter(t -> Constants.OT_DISCOUNT_TITLE.equals(t.getOrderTotalCode())).count() == 0) {
// no promo coupon applied
destination.setPromoCode(null);
}
List<ReadableOrderTotal> totals = new ArrayList<ReadableOrderTotal>();
for (com.salesmanager.core.model.order.OrderTotal t : orderSummary.getTotals()) {
ReadableOrderTotal total = new ReadableOrderTotal();
total.setCode(t.getOrderTotalCode());
total.setValue(t.getValue());
total.setText(t.getText());
totals.add(total);
}
destination.setTotals(totals);
}
destination.setSubtotal(orderSummary.getSubTotal());
destination.setDisplaySubTotal(pricingService.getDisplayAmount(orderSummary.getSubTotal(), store));
destination.setTotal(orderSummary.getTotal());
destination.setDisplayTotal(pricingService.getDisplayAmount(orderSummary.getTotal(), store));
destination.setQuantity(cartQuantity);
destination.setId(source.getId());
if (source.getOrderId() != null) {
destination.setOrder(source.getOrderId());
}
} catch (Exception e) {
throw new ConversionRuntimeException("An error occured while converting ReadableShoppingCart", e);
}
return destination;
}
Aggregations