You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by mr...@apache.org on 2016/10/15 11:12:11 UTC

svn commit: r1765034 - /ofbiz/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java

Author: mridulpathak
Date: Sat Oct 15 11:12:11 2016
New Revision: 1765034

URL: http://svn.apache.org/viewvc?rev=1765034&view=rev
Log:
Improved: Product based promotion calculation.
(OFBIZ-7359)

In case of a promotion where X% discount has to be applied on a product, when more than one quantity of the product is added to order, respective multiple item adjustments are created. Improved the code to create a single adjustment for the total discount.

Thanks: Arvind Singh Tomar for contribution.

Modified:
    ofbiz/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java

Modified: ofbiz/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java?rev=1765034&r1=1765033&r2=1765034&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java (original)
+++ ofbiz/trunk/applications/order/src/main/java/org/apache/ofbiz/order/shoppingcart/product/ProductPromoWorker.java Sat Oct 15 11:12:11 2016
@@ -1881,6 +1881,21 @@ public final class ProductPromoWorker {
         // round the amount before setting to make sure we don't get funny numbers in there
         // only round to 3 places, we need more specific amounts in adjustments so that they add up cleaner as part of the item subtotal, which will then be rounded
         amount = amount.setScale(3, rounding);
+        boolean addNewAdjustment = true;
+        List<GenericValue> adjustments = cartItem.getAdjustments();
+        if (UtilValidate.isNotEmpty(adjustments)) {
+            for(GenericValue adjustment : adjustments) {
+                if("PROMOTION_ADJUSTMENT".equals(adjustment.getString("orderAdjustmentTypeId")) && 
+                        productPromoAction.get("productPromoId").equals(adjustment.getString("productPromoId")) &&
+                        productPromoAction.get("productPromoRuleId").equals(adjustment.getString("productPromoRuleId")) &&
+                        productPromoAction.get("productPromoActionSeqId").equals(adjustment.getString("productPromoActionSeqId"))) {
+                    BigDecimal newAmount = amount.add(adjustment.getBigDecimal(amountField));
+                    adjustment.set(amountField, newAmount);
+                    addNewAdjustment = false;
+                }
+            }
+        }
+        if (addNewAdjustment) {
         GenericValue orderAdjustment = delegator.makeValue("OrderAdjustment",
                 UtilMisc.toMap("orderAdjustmentTypeId", "PROMOTION_ADJUSTMENT", amountField, amount,
                         "productPromoId", productPromoAction.get("productPromoId"),
@@ -1894,6 +1909,7 @@ public final class ProductPromoWorker {
         }
 
         cartItem.addAdjustment(orderAdjustment);
+        }
     }
 
     public static void doOrderPromoAction(GenericValue productPromoAction, ShoppingCart cart, BigDecimal amount, String amountField, Delegator delegator) {