You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2013/06/16 16:01:58 UTC

svn commit: r1493512 - in /ofbiz/trunk: applications/order/config/ applications/order/src/org/ofbiz/order/shoppingcart/ applications/order/webapp/ordermgr/WEB-INF/ applications/order/webapp/ordermgr/entry/cart/ specialpurpose/ecommerce/webapp/ecommerce...

Author: jleroux
Date: Sun Jun 16 14:01:56 2013
New Revision: 1493512

URL: http://svn.apache.org/r1493512
Log:
A slightly modified patch from Ankit Jain from a previous work by Nandani Aggarwal for "No method to remove a promo code from the shopping cart" https://issues.apache.org/jira/browse/OFBIZ-4291

When working with promotions and promo codes in the shopping cart, it seems not possible to remove _one_ specific promo code from the cart neither through the ShoppingCart and its helpers and services, nor through the ProductPromoWorker.
ShoppingCart has the method 

{{addProductPromoCode(String productPromoCodeId, LocalDispatcher dispatcher)}}

but no method to remove the added PromoCode. Is there any other worker, service or event that can be called to do this? And if not, is there a specifc reason (maybe relating to promotions application rules) for not implementing this?

Current provided method of dealing with removal of promotions is a so called brute force approach where removing all and adding not to be removed promotions again.

jleroux: 
* in ecommerce no needs to be authentified to be abble to remove a promo code
* I also added a French label

Modified:
    ofbiz/trunk/applications/order/config/OrderUiLabels.xml
    ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java
    ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java
    ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
    ofbiz/trunk/applications/order/webapp/ordermgr/entry/cart/promoUseDetailsInline.ftl
    ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml

Modified: ofbiz/trunk/applications/order/config/OrderUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/config/OrderUiLabels.xml?rev=1493512&r1=1493511&r2=1493512&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/config/OrderUiLabels.xml (original)
+++ ofbiz/trunk/applications/order/config/OrderUiLabels.xml Sun Jun 16 14:01:56 2013
@@ -3018,6 +3018,10 @@
         <value xml:lang="zh">内容</value>
         <value xml:lang="zh_TW">內容</value>
     </property>
+    <property key="OrderRemovePromotion">
+        <value xml:lang="en">Remove Promotion</value>
+        <value xml:lang="fr">Supprimer la promotion</value>
+    </property>
     <property key="OrderContinueToFinalOrderReview">
         <value xml:lang="cs">Dále k závěrečnému přehledu objednávky</value>
         <value xml:lang="de">Weiter zur abschließenden Bestellüberprüfung</value>

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=1493512&r1=1493511&r2=1493512&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 Sun Jun 16 14:01:56 2013
@@ -3150,6 +3150,21 @@ public class ShoppingCart implements Ite
         this.productPromoUseInfoList.add(new ProductPromoUseInfo(productPromoId, productPromoCodeId, totalDiscountAmount, quantityLeftInActions));
     }
 
+    public void removeProductPromoUse(String productPromoId) {
+        if (!productPromoId.isEmpty()) {
+            int index = -1;
+            for (ProductPromoUseInfo productPromoUseInfo : this.productPromoUseInfoList) {
+                if (productPromoId.equals(productPromoUseInfo.productPromoId)) {
+                    index = this.productPromoUseInfoList.indexOf(productPromoUseInfo);
+                    break;
+                }
+            }
+            if (index != -1) {
+                this.productPromoUseInfoList.remove(index);
+            }
+        }
+    }
+
     public void clearProductPromoUseInfo() {
         // clear out info for general promo use
         this.productPromoUseInfoList.clear();

Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java?rev=1493512&r1=1493511&r2=1493512&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartEvents.java Sun Jun 16 14:01:56 2013
@@ -23,6 +23,7 @@ import java.math.MathContext;
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -53,6 +54,7 @@ import org.ofbiz.entity.GenericValue;
 import org.ofbiz.entity.condition.EntityCondition;
 import org.ofbiz.entity.condition.EntityOperator;
 import org.ofbiz.entity.util.EntityUtil;
+import org.ofbiz.order.shoppingcart.ShoppingCart.ProductPromoUseInfo;
 import org.ofbiz.order.shoppingcart.product.ProductPromoWorker;
 import org.ofbiz.product.catalog.CatalogWorker;
 import org.ofbiz.product.config.ProductConfigWorker;
@@ -96,6 +98,58 @@ public class ShoppingCartEvents {
         return "success";
     }
 
+    public static String removePromotion(HttpServletRequest request,HttpServletResponse response) {
+        LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
+        ShoppingCart cart = getCartObject(request);
+        String promoCodeId = (String) request.getParameter("promoCode");
+        String result = "error";
+
+        if (!promoCodeId.isEmpty()) {
+            cart.getProductPromoCodesEntered().clear();
+            GenericValue productPromoCode = null;
+            try {
+                productPromoCode = dispatcher.getDelegator().findOne("ProductPromoCode", UtilMisc.toMap("productPromoCodeId", promoCodeId), false);
+                if (!productPromoCode.isEmpty()) {
+                    String productPromoId = productPromoCode.getString("productPromoId");
+                    GenericValue productPromoAction = null;
+                    Map<String, String> productPromoActionMap = new HashMap<String, String>();
+                    productPromoActionMap.put("productPromoId", productPromoId);
+                    productPromoActionMap.put("productPromoRuleId", "01");
+                    productPromoActionMap.put("productPromoActionSeqId", "01");
+
+                    productPromoAction = dispatcher.getDelegator().findOne("ProductPromoAction", productPromoActionMap, false);
+                    if (!productPromoAction.isEmpty()) {
+                        int index = cart.getAdjustmentPromoIndex(productPromoId);
+                        /*Remove order adjustment*/
+                        if (index != -1) {
+                            cart.removeAdjustment(index);
+                            result = "success";
+                        }
+
+                        /*Remove product  adjustment*/
+                        for(ShoppingCartItem checkItem : cart) {
+                            List<GenericValue> itemAdjustments = checkItem.getAdjustments();
+                            if (!itemAdjustments.isEmpty()) {
+                                index = 0;
+                                for (GenericValue adjustment : itemAdjustments ) {
+                                    if(adjustment.get("productPromoId").equals(productPromoId)) {
+                                        checkItem.getAdjustments().remove(index);
+                                        result = "success";
+                                    }
+                                    index++;
+                                }
+                            }
+                        }
+                        cart.removeProductPromoUse(productPromoId);
+                    }
+                }
+            } catch (GenericEntityException e) {
+                Debug.logError(e.getMessage(), module);
+            }
+        }
+        return result;
+    }
+
     public static String addItemGroup(HttpServletRequest request, HttpServletResponse response) {
         ShoppingCart cart = getCartObject(request);
         Map<String, Object> parameters = UtilHttp.getParameterMap(request);

Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml?rev=1493512&r1=1493511&r2=1493512&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml Sun Jun 16 14:01:56 2013
@@ -663,6 +663,12 @@ under the License.
         <security https="true" auth="true"/>
         <response name="success" type="view" value="showPromotionDetails"/>
     </request-map>
+    <request-map uri="removePromotion">
+        <security https="true" auth="true"/>
+        <event type="java" path="org.ofbiz.order.shoppingcart.ShoppingCartEvents" invoke="removePromotion"/>
+        <response name="success" type="request" value="orderentry"/>
+        <response name="error" type="request" value="orderentry"/>
+    </request-map>
     <request-map uri="quickadd">
         <response name="success" type="view" value="quickadd"/>
     </request-map>

Modified: ofbiz/trunk/applications/order/webapp/ordermgr/entry/cart/promoUseDetailsInline.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/entry/cart/promoUseDetailsInline.ftl?rev=1493512&r1=1493511&r2=1493512&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/entry/cart/promoUseDetailsInline.ftl (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/entry/cart/promoUseDetailsInline.ftl Sun Jun 16 14:01:56 2013
@@ -27,6 +27,9 @@ under the License.
                        ${uiLabelMap.OrderPromotion} <a href="<@o...@ofbizUrl>" class="button">${uiLabelMap.CommonDetails}</a>
                     <#if productPromoUseInfo.productPromoCodeId?has_content> - ${uiLabelMap.OrderWithPromoCode} [${productPromoUseInfo.productPromoCodeId}]</#if>
                     <#if (productPromoUseInfo.totalDiscountAmount != 0)> - ${uiLabelMap.CommonTotalValue} <@ofbizCurrency amount=(-1*productPromoUseInfo.totalDiscountAmount) isoCode=shoppingCart.getCurrency()/></#if>
+                    <#if productPromoUseInfo.productPromoCodeId?has_content>
+                        <a href="<@o...@ofbizUrl>" class="button">${uiLabelMap.OrderRemovePromotion}</a>
+                    </#if>
                 </li>
                 <#if (productPromoUseInfo.quantityLeftInActions > 0)>
                     <li>- Could be used for ${productPromoUseInfo.quantityLeftInActions} more discounted item<#if (productPromoUseInfo.quantityLeftInActions > 1)>s</#if> if added to your cart.</li>

Modified: ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml?rev=1493512&r1=1493511&r2=1493512&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/specialpurpose/ecommerce/webapp/ecommerce/WEB-INF/controller.xml Sun Jun 16 14:01:56 2013
@@ -321,6 +321,12 @@ under the License.
         <security https="false" auth="false"/>
         <response name="success" type="view" value="showPromotionDetails"/>
     </request-map>
+    <request-map uri="removePromotion">
+        <security https="true" auth="false"/>
+        <event type="java" path="org.ofbiz.order.shoppingcart.ShoppingCartEvents" invoke="removePromotion"/>
+        <response name="success" type="view" value="showcart"/>
+        <response name="error" type="view" value="showcart"/>
+    </request-map>
 
     <!-- Start Anonymous checkout requests -->
     <request-map uri="setCustomer">