Author: mor
Date: Wed May 20 06:25:23 2009 New Revision: 776581 URL: http://svn.apache.org/viewvc?rev=776581&view=rev Log: Now Shipping Total adjustments can be applied using promotion. User can specify percentage discount on a specific shipping method. Applied patch from Arun Patidar, part of OFBIZ-2488 (https://issues.apache.org/jira/browse/OFBIZ-2488) Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/shipping/ShippingEvents.java ofbiz/trunk/applications/product/data/ProductTypeData.xml ofbiz/trunk/applications/product/script/org/ofbiz/product/promo/PromoServices.xml ofbiz/trunk/applications/product/servicedef/services_pricepromo.xml ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl ofbiz/trunk/applications/product/widget/catalog/PromoScreens.xml ofbiz/trunk/specialpurpose/ecommerce/script/org/ofbiz/ecommerce/customer/CustomerEvents.xml Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java?rev=776581&r1=776580&r2=776581&view=diff ============================================================================== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java (original) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/CheckOutHelper.java Wed May 20 06:25:23 2009 @@ -53,6 +53,7 @@ import org.ofbiz.order.finaccount.FinAccountHelper; import org.ofbiz.order.order.OrderChangeHelper; import org.ofbiz.order.order.OrderReadHelper; +import org.ofbiz.order.shoppingcart.product.ProductPromoWorker; import org.ofbiz.order.shoppingcart.shipping.ShippingEvents; import org.ofbiz.party.contact.ContactHelper; import org.ofbiz.product.store.ProductStoreWorker; @@ -407,6 +408,7 @@ shippingTotal = BigDecimal.ZERO; } cart.setItemShipGroupEstimate(shippingTotal, 0); + ProductPromoWorker.doPromotions(cart, dispatcher); //Recalc tax before setting payment try { 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=776581&r1=776580&r2=776581&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 Wed May 20 06:25:23 2009 @@ -763,7 +763,12 @@ String otherValue = productPromoCond.getString("otherValue"); String inputParamEnumId = productPromoCond.getString("inputParamEnumId"); String operatorEnumId = productPromoCond.getString("operatorEnumId"); + String shippingMethod = ""; + if (otherValue != null && otherValue.contains("@")) { + shippingMethod = otherValue.substring(otherValue.indexOf("@")+1); + otherValue = ""; + } String partyId = cart.getPartyId(); GenericValue userLogin = cart.getUserLogin(); if (userLogin == null) { @@ -1121,6 +1126,10 @@ } } } + } else if ("PPIP_ORDER_SHIPTOTAL".equals(inputParamEnumId) && shippingMethod.equals(cart.getShipmentMethodTypeId())) { + BigDecimal orderTotalShipping = cart.getTotalShipping(); + if (Debug.verboseOn()) { Debug.logVerbose("Doing order total Shipping compare: ordertotalShipping=" + orderTotalShipping, module); } + compareBase = new Integer(orderTotalShipping.compareTo(new BigDecimal(condValue))); } else { Debug.logWarning(UtilProperties.getMessage(resource_error,"OrderAnUnSupportedProductPromoCondInputParameterLhs", UtilMisc.toMap("inputParamEnumId",productPromoCond.getString("inputParamEnumId")), cart.getLocale()), module); return false; @@ -1494,6 +1503,14 @@ } } } + } else if ("PROMO_SHIP_CHARGE".equals(productPromoActionEnumId)) { + 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; + } } else { Debug.logError("An un-supported productPromoActionType was used: " + productPromoActionEnumId + ", not performing any action", module); actionResultInfo.ranAction = false; Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/shipping/ShippingEvents.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/shipping/ShippingEvents.java?rev=776581&r1=776580&r2=776581&view=diff ============================================================================== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/shipping/ShippingEvents.java (original) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/shipping/ShippingEvents.java Wed May 20 06:25:23 2009 @@ -52,6 +52,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.ofbiz.order.shoppingcart.product.ProductPromoWorker; /** * ShippingEvents - Events used for processing shipping fees @@ -84,6 +85,7 @@ cart.setItemShipGroupEstimate(shippingTotal, i); } + ProductPromoWorker.doPromotions(cart, dispatcher); // all done return "success"; } Modified: ofbiz/trunk/applications/product/data/ProductTypeData.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/data/ProductTypeData.xml?rev=776581&r1=776580&r2=776581&view=diff ============================================================================== --- ofbiz/trunk/applications/product/data/ProductTypeData.xml (original) +++ ofbiz/trunk/applications/product/data/ProductTypeData.xml Wed May 20 06:25:23 2009 @@ -377,6 +377,7 @@ <Enumeration description="Promotion Recurrence" enumCode="PROMO_RECURRENCE" enumId="PPIP_RECURRENCE" sequenceId="11" enumTypeId="PROD_PROMO_IN_PARAM"/> <Enumeration description="Order sub-total X since beginning of current year" enumCode="ORST_YEAR" enumId="PPIP_ORST_YEAR" sequenceId="12" enumTypeId="PROD_PROMO_IN_PARAM"/> <Enumeration description="Order sub-total X last year" enumCode="ORST_LAST_YEAR" enumId="PPIP_ORST_LAST_YEAR" sequenceId="13" enumTypeId="PROD_PROMO_IN_PARAM"/> + <Enumeration description="Shipping Total" enumCode="ORDER_SHIP_TOTAL" enumId="PPIP_ORDER_SHIPTOTAL" sequenceId="14" enumTypeId="PROD_PROMO_IN_PARAM"/> <EnumerationType description="Product Promotion Condition" enumTypeId="PROD_PROMO_COND" hasTable="N" parentTypeId="PROD_PROMO"/> <!-- old style very technical ... @@ -408,6 +409,7 @@ <Enumeration description="Order Percent Discount" enumCode="ORDER_PERCENT" enumId="PROMO_ORDER_PERCENT" sequenceId="06" enumTypeId="PROD_PROMO_ACTION"/> <Enumeration description="Order Amount Flat" enumCode="ORDER_AMOUNT" enumId="PROMO_ORDER_AMOUNT" sequenceId="07" enumTypeId="PROD_PROMO_ACTION"/> <Enumeration description="Product for [Special Promo] Price" enumCode="PROD_SPPRC" enumId="PROMO_PROD_SPPRC" sequenceId="08" enumTypeId="PROD_PROMO_ACTION"/> + <Enumeration description="Shipping X% discount" enumCode="SHIP_CHARGE" enumId="PROMO_SHIP_CHARGE" sequenceId="09" enumTypeId="PROD_PROMO_ACTION"/> <EnumerationType description="Product Rating Field Type" enumTypeId="PROD_RATING_TYPE" hasTable="N" parentTypeId=""/> <Enumeration description="Min Rating" enumCode="MIN" enumId="PRDR_MIN" sequenceId="01" enumTypeId="PROD_RATING_TYPE"/> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/promo/PromoServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/promo/PromoServices.xml?rev=776581&r1=776580&r2=776581&view=diff ============================================================================== --- ofbiz/trunk/applications/product/script/org/ofbiz/product/promo/PromoServices.xml (original) +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/promo/PromoServices.xml Wed May 20 06:25:23 2009 @@ -251,6 +251,9 @@ <make-value value-field="newEntity" entity-name="ProductPromoCond"/> <set-nonpk-fields map="parameters" value-field="newEntity"/> + <if-not-empty field="parameters.carrierShipmentMethod"> + <set field="newEntity.otherValue" from-field="parameters.carrierShipmentMethod"/> + </if-not-empty> <set-pk-fields map="parameters" value-field="newEntity"/> <make-next-seq-id value-field="newEntity" seq-field-name="productPromoCondSeqId" numeric-padding="2"/> <field-to-result field="newEntity.productPromoCondSeqId" result-name="productPromoCondSeqId"/> @@ -266,6 +269,9 @@ <set-pk-fields map="parameters" value-field="lookupPKMap"/> <find-by-primary-key entity-name="ProductPromoCond" map="lookupPKMap" value-field="lookedUpValue"/> <set-nonpk-fields map="parameters" value-field="lookedUpValue"/> + <if-not-empty field="parameters.carrierShipmentMethod"> + <set field="lookedUpValue.otherValue" from-field="parameters.carrierShipmentMethod"/> + </if-not-empty> <store-value value-field="lookedUpValue"/> </simple-method> <simple-method method-name="deleteProductPromoCond" short-description="Delete an ProductPromoCond"> Modified: ofbiz/trunk/applications/product/servicedef/services_pricepromo.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_pricepromo.xml?rev=776581&r1=776580&r2=776581&view=diff ============================================================================== --- ofbiz/trunk/applications/product/servicedef/services_pricepromo.xml (original) +++ ofbiz/trunk/applications/product/servicedef/services_pricepromo.xml Wed May 20 06:25:23 2009 @@ -273,6 +273,7 @@ <description>Create a ProductPromo</description> <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> + <attribute name="carrierShipmentMethod" type="String" mode="IN" optional="true"/> <override name="productPromoCondSeqId" mode="OUT"/> </service> <service name="updateProductPromoCond" default-entity-name="ProductPromoCond" engine="simple" @@ -280,6 +281,7 @@ <description>Update a ProductPromo</description> <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> + <attribute name="carrierShipmentMethod" type="String" mode="IN" optional="true"/> </service> <service name="deleteProductPromoCond" default-entity-name="ProductPromoCond" engine="simple" location="component://product/script/org/ofbiz/product/promo/PromoServices.xml" invoke="deleteProductPromoCond" auth="true"> Modified: ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl?rev=776581&r1=776580&r2=776581&view=diff ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl (original) +++ ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl Wed May 20 06:25:23 2009 @@ -98,7 +98,27 @@ </#list> </select> <input type="text" size="25" name="condValue" value="${(productPromoCond.condValue)?if_exists}"> - ${uiLabelMap.CommonOther}:<input type="text" size="10" name="otherValue" value="${(productPromoCond.otherValue)?if_exists}"> + <#assign otherValue = productPromoCond.otherValue?if_exists> + <label>${uiLabelMap.CommonOther}:</label><input type="text" size="10" name="otherValue" <#if otherValue?has_content && !otherValue.contains("@")> value="${(productPromoCond.otherValue)?if_exists}"</#if> > + <#if otherValue?has_content && otherValue.contains("@")> + <#assign carrierShippingMethod = productPromoCond.otherValue?if_exists> + </#if> + <#if carrierShippingMethod?has_content> + <#assign carrierParty = carrierShippingMethod.substring(0, carrierShippingMethod.indexOf("@"))> + <#assign shippingMethodTypeId = carrierShippingMethod.substring(carrierShippingMethod.indexOf("@")+1)> + <#assign description = (delegator.findOne("ShipmentMethodType", {"shipmentMethodTypeId":shippingMethodTypeId}, false)).description> + <#else> + <#assign description = ""> + </#if> + <label>${uiLabelMap.OrderSelectShippingMethod}:</label> + <select name = "carrierShipmentMethod"> + <option value = "${productPromoCond.carrierShippingMethod?if_exists}">${carrierParty?if_exists} ${description}</option> + <option value = ""> </option> + <#list carrierShipmentMethods as carrierShipmentMethod> + <#assign shipmentMethodType = carrierShipmentMethod.getRelatedOneCache("ShipmentMethodType")> + <option value = "${carrierShipmentMethod.partyId?if_exists}@${carrierShipmentMethod.shipmentMethodTypeId?if_exists}">${carrierShipmentMethod.partyId?if_exists} ${shipmentMethodType.get("description")?if_exists}</option> + </#list> + </select> <input type="submit" value="${uiLabelMap.CommonUpdate}"> </form> <#-- ======================= Categories ======================== --> @@ -207,6 +227,14 @@ </select> <input type="text" size="25" name="condValue"> ${uiLabelMap.CommonOther}:<input type="text" size="10" name="otherValue"> + <label>${uiLabelMap.OrderSelectShippingMethod}:</label> + <select name = "carrierShipmentMethod"> + <option value = "">--${uiLabelMap.OrderSelectShippingMethod}--</option> + <#list carrierShipmentMethods as carrierShipmentMethod> + <#assign shipmentMethodType = carrierShipmentMethod.getRelatedOneCache("ShipmentMethodType")> + <option value = "${carrierShipmentMethod.partyId?if_exists}@${carrierShipmentMethod.shipmentMethodTypeId?if_exists}">${carrierShipmentMethod.partyId?if_exists} ${shipmentMethodType.get("description")?if_exists}</option> + </#list> + </select> <input type="submit" value="${uiLabelMap.CommonCreate}"> </form> </td> Modified: ofbiz/trunk/applications/product/widget/catalog/PromoScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/widget/catalog/PromoScreens.xml?rev=776581&r1=776580&r2=776581&view=diff ============================================================================== --- ofbiz/trunk/applications/product/widget/catalog/PromoScreens.xml (original) +++ ofbiz/trunk/applications/product/widget/catalog/PromoScreens.xml Wed May 20 06:25:23 2009 @@ -164,6 +164,7 @@ <set field="tabButtonItem" value="EditProductPromoRules"/> <set field="labelTitleProperty" value="ProductRules"/> + <property-map resource="OrderUiLabels" map-name="uiLabelMap"/> <set field="productPromoId" from-field="parameters.productPromoId"/> <entity-one entity-name="ProductPromo" value-field="productPromo" auto-field-map="true"/> @@ -194,6 +195,9 @@ <condition-expr field-name="enumTypeId" value="PROD_PROMO_IN_PARAM"/> <order-by field-name="sequenceId"/> </entity-condition> + <entity-condition entity-name="CarrierShipmentMethod" list="carrierShipmentMethods" use-cache="true"> + <order-by field-name="shipmentMethodTypeId"/> + </entity-condition> <entity-condition entity-name="Enumeration" list="condOperEnums" use-cache="true"> <condition-expr field-name="enumTypeId" value="PROD_PROMO_COND"/> <order-by field-name="sequenceId"/> Modified: ofbiz/trunk/specialpurpose/ecommerce/script/org/ofbiz/ecommerce/customer/CustomerEvents.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/ecommerce/script/org/ofbiz/ecommerce/customer/CustomerEvents.xml?rev=776581&r1=776580&r2=776581&view=diff ============================================================================== --- ofbiz/trunk/specialpurpose/ecommerce/script/org/ofbiz/ecommerce/customer/CustomerEvents.xml (original) +++ ofbiz/trunk/specialpurpose/ecommerce/script/org/ofbiz/ecommerce/customer/CustomerEvents.xml Wed May 20 06:25:23 2009 @@ -1149,6 +1149,10 @@ parameters.put("cartGrandTotal", cartGrandTotal); ]]></call-bsh> + <call-class-method method-name="doPromotions" class-name="org.ofbiz.order.shoppingcart.product.ProductPromoWorker"> + <field field="shoppingCart" type="org.ofbiz.order.shoppingcart.ShoppingCart"/> + <field field="dispatcher" type="org.ofbiz.service.LocalDispatcher"/> + </call-class-method> <field-to-request field="parameters.shippingTotal" request-name="shippingTotal"/> <field-to-request field="parameters.cartGrandTotal" request-name="cartGrandTotal"/> <field-to-request field="parameters.totalSalesTax" request-name="totalSalesTax"/> |
Free forum by Nabble | Edit this page |