svn commit: r1065504 - in /ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart: ShoppingCart.java product/ProductPromoWorker.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1065504 - in /ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart: ShoppingCart.java product/ProductPromoWorker.java

hansbak-2
Author: hansbak
Date: Mon Jan 31 07:58:48 2011
New Revision: 1065504

URL: http://svn.apache.org/viewvc?rev=1065504&view=rev
Log:
shipping promotion now working on all shipping methods: https://issues.apache.org/jira/browse/OFBIZ-2488

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

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java?rev=1065504&r1=1065503&r2=1065504&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java Mon Jan 31 07:58:48 2011
@@ -2740,6 +2740,17 @@ public class ShoppingCart implements Ite
         return adjustments;
     }
 
+    public int getAdjustmentPromoIndex(String productPromoId) {
+     int index = adjustments.size();
+     while (index > 0) {
+     if (adjustments.get(index).getString("productPromoId").equals(productPromoId)) {
+     return(index);
+     }
+     index++;
+     }
+        return -1;
+    }
+
     /** Add an adjustment to the order; don't worry about setting the orderId, orderItemSeqId or orderAdjustmentId; they will be set when the order is created */
     public int addAdjustment(GenericValue adjustment) {
         adjustments.add(adjustment);
@@ -2750,6 +2761,10 @@ public class ShoppingCart implements Ite
         adjustments.remove(index);
     }
 
+    public GenericValue getAdjustment(int index) {
+        return adjustments.get(index);
+    }
+
     /** Get a List of orderTerms on the order (ie cart) */
     public List getOrderTerms() {
         return orderTerms;

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java?rev=1065504&r1=1065503&r2=1065504&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java Mon Jan 31 07:58:48 2011
@@ -779,12 +779,9 @@ public class ProductPromoWorker {
                     // perform all actions, either apply or unapply
 
                     List productPromoActions = productPromoRule.getRelatedCache("ProductPromoAction", null, UtilMisc.toList("productPromoActionSeqId"));
-                    if (Debug.verboseOn()) Debug.logVerbose("Performing " + productPromoActions.size() + " actions for rule " + productPromoRule, module);
                     Iterator productPromoActionIter = UtilMisc.toIterator(productPromoActions);
                     while (productPromoActionIter != null && productPromoActionIter.hasNext()) {
                         GenericValue productPromoAction = (GenericValue) productPromoActionIter.next();
-
-                        // Debug.logInfo("Doing action: " + productPromoAction, module);
                         try {
                             ActionResultInfo actionResultInfo = performAction(productPromoAction, cart, delegator, dispatcher, nowTimestamp);
                             totalDiscountAmount = totalDiscountAmount.add(actionResultInfo.totalDiscountAmount);
@@ -1759,9 +1756,17 @@ public class ProductPromoWorker {
             BigDecimal percentage = (productPromoAction.get("amount") == null ? BigDecimal.ZERO : (productPromoAction.getBigDecimal("amount").movePointLeft(2))).negate();
             BigDecimal amount = cart.getTotalShipping().multiply(percentage);
             if (amount.compareTo(BigDecimal.ZERO) != 0) {
-                doOrderPromoAction(productPromoAction, cart, amount, "amount", delegator);
-                actionResultInfo.ranAction = true;
-                actionResultInfo.totalDiscountAmount = amount;
+             int existingOrderPromoIndex = cart.getAdjustmentPromoIndex(productPromoAction.getString("productPromoId"));
+             if (existingOrderPromoIndex != -1 && cart.getAdjustment(existingOrderPromoIndex).getBigDecimal("amount").compareTo(amount) == 0) {
+                 actionResultInfo.ranAction = false;  // already ran, no need to repeat
+             } else {
+             if (existingOrderPromoIndex != -1 && cart.getAdjustment(existingOrderPromoIndex).getBigDecimal("amount").compareTo(amount) != 0) {
+             cart.removeAdjustment(existingOrderPromoIndex);
+             }
+         doOrderPromoAction(productPromoAction, cart, amount, "amount", delegator);
+             actionResultInfo.ranAction = true;
+             actionResultInfo.totalDiscountAmount = amount;
+             }
             }
         } else {
             Debug.logError("An un-supported productPromoActionType was used: " + productPromoActionEnumId + ", not performing any action", module);