Search in sources :

Example 1 with OrderTotalVariation

use of com.salesmanager.core.model.order.OrderTotalVariation 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;
}
Also used : HashMap(java.util.HashMap) OrderTotalSummary(com.salesmanager.core.model.order.OrderTotalSummary) ArrayList(java.util.ArrayList) BigDecimal(java.math.BigDecimal) ShippingConfiguration(com.salesmanager.core.model.shipping.ShippingConfiguration) TaxItem(com.salesmanager.core.model.tax.TaxItem) OrderTotalVariation(com.salesmanager.core.model.order.OrderTotalVariation) ShoppingCartItem(com.salesmanager.core.model.shoppingcart.ShoppingCartItem) OrderTotal(com.salesmanager.core.model.order.OrderTotal) FinalPrice(com.salesmanager.core.model.catalog.product.price.FinalPrice)

Aggregations

FinalPrice (com.salesmanager.core.model.catalog.product.price.FinalPrice)1 OrderTotal (com.salesmanager.core.model.order.OrderTotal)1 OrderTotalSummary (com.salesmanager.core.model.order.OrderTotalSummary)1 OrderTotalVariation (com.salesmanager.core.model.order.OrderTotalVariation)1 ShippingConfiguration (com.salesmanager.core.model.shipping.ShippingConfiguration)1 ShoppingCartItem (com.salesmanager.core.model.shoppingcart.ShoppingCartItem)1 TaxItem (com.salesmanager.core.model.tax.TaxItem)1 BigDecimal (java.math.BigDecimal)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1