Why removing? This may prove useful in some cases...
- 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);
Jacques
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);