Author: diveshdutta
Date: Sat Jun 20 15:25:41 2015 New Revision: 1686641 URL: http://svn.apache.org/r1686641 Log: Applied fix from trunk for revision: 1686635 === [OFBIZ-5347] 1) Fixed issue: Shipping costs not recalculated after changing sales order shipment method. For this introduced new service as per the design in this task. 2) This service will loads the cart save new shipping method in cart, re-do all the calculations for tax and promotion, and saves the cart again in order. 3) Also adding new SECA rule which will trigger resetGrandTotal service on new service updateShipGroupShipInfo. Modified: ofbiz/branches/release14.12/ (props changed) ofbiz/branches/release14.12/applications/order/servicedef/secas.xml ofbiz/branches/release14.12/applications/order/servicedef/services.xml ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/controller.xml ofbiz/branches/release14.12/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl Propchange: ofbiz/branches/release14.12/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Jun 20 15:25:41 2015 @@ -8,4 +8,4 @@ /ofbiz/branches/json-integration-refactoring:1634077-1635900 /ofbiz/branches/multitenant20100310:921280-927264 /ofbiz/branches/release13.07:1547657 -/ofbiz/trunk:1649072,1649083-1649084,1649086,1649090,1649096,1649230,1649238-1649239,1649248,1649272,1649275,1649280-1649281,1649283,1649285-1649286,1649291,1649329,1649331,1649384,1649393,1649666,1649742,1650240,1650348,1650357,1650583,1650642,1650678,1650821,1650882,1650887,1650938,1651593,1652312,1652361,1652638,1652641,1652672,1652688,1652706,1652725,1652731,1652739,1652852,1653248,1653296,1653456,1653597,1653614,1654175,1654273,1654509,1654670,1654672-1654673,1654683-1654684,1654824,1655046,1655668,1655979,1656014,1656185,1656198,1656445,1656983,1657323,1657506-1657507,1657514,1657714,1657790,1657848,1658364,1658662,1658882,1659224,1659965,1660031,1660053,1660389,1660444,1660579,1661303,1661328,1661760,1661778,1661853,1661862,1661873,1661940,1661951,1661977,1662119-1662120,1662361,1662500,1662812,1662919,1663202,1663912,1663979,1664602,1664604,1664696,1665154,1665162,1665535,1666404,1666511,1666633,1666836,1666939,1666949,1666958,1667055,1667253,1667483,1667492,1667774,1668207, 1668214,1668236,1668246,1668258,1668263,1668265,1668270,1668277,1668314,1668657,1669317,1669588,1672427,1672430,1672846,1672853,1672856,1672862,1672873,1673764,1674447,1674464,1674491,1674496,1674908,1676674,1677123,1677597,1677769-1677770,1678294,1678882,1678911,1679689,1679697,1679709,1679720,1679728,1679732,1679957,1680155,1680288,1680304,1680671,1680675,1680733,1680840,1680881,1682272,1682295,1682415,1682633,1683998,1684094,1686360,1686536,1686545,1686566,1686569,1686574,1686583 +/ofbiz/trunk:1649072,1649083-1649084,1649086,1649090,1649096,1649230,1649238-1649239,1649248,1649272,1649275,1649280-1649281,1649283,1649285-1649286,1649291,1649329,1649331,1649384,1649393,1649666,1649742,1650240,1650348,1650357,1650583,1650642,1650678,1650821,1650882,1650887,1650938,1651593,1652312,1652361,1652638,1652641,1652672,1652688,1652706,1652725,1652731,1652739,1652852,1653248,1653296,1653456,1653597,1653614,1654175,1654273,1654509,1654670,1654672-1654673,1654683-1654684,1654824,1655046,1655668,1655979,1656014,1656185,1656198,1656445,1656983,1657323,1657506-1657507,1657514,1657714,1657790,1657848,1658364,1658662,1658882,1659224,1659965,1660031,1660053,1660389,1660444,1660579,1661303,1661328,1661760,1661778,1661853,1661862,1661873,1661940,1661951,1661977,1662119-1662120,1662361,1662500,1662812,1662919,1663202,1663912,1663979,1664602,1664604,1664696,1665154,1665162,1665535,1666404,1666511,1666633,1666836,1666939,1666949,1666958,1667055,1667253,1667483,1667492,1667774,1668207, 1668214,1668236,1668246,1668258,1668263,1668265,1668270,1668277,1668314,1668657,1669317,1669588,1672427,1672430,1672846,1672853,1672856,1672862,1672873,1673764,1674447,1674464,1674491,1674496,1674908,1676674,1677123,1677597,1677769-1677770,1678294,1678882,1678911,1679689,1679697,1679709,1679720,1679728,1679732,1679957,1680155,1680288,1680304,1680671,1680675,1680733,1680840,1680881,1682272,1682295,1682415,1682633,1683998,1684094,1686360,1686536,1686545,1686566,1686569,1686574,1686583,1686635 Modified: ofbiz/branches/release14.12/applications/order/servicedef/secas.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/servicedef/secas.xml?rev=1686641&r1=1686640&r2=1686641&view=diff ============================================================================== --- ofbiz/branches/release14.12/applications/order/servicedef/secas.xml (original) +++ ofbiz/branches/release14.12/applications/order/servicedef/secas.xml Sat Jun 20 15:25:41 2015 @@ -451,4 +451,7 @@ under the License. <condition field-name="orderTypeId" operator="equals" value="SALES_ORDER"/> <action service="checkOrderItemForProductGroupOrder" mode="sync"/> </eca> + <eca service="updateShipGroupShipInfo" event="commit"> + <action service="resetGrandTotal" mode="sync"/> + </eca> </service-eca> Modified: ofbiz/branches/release14.12/applications/order/servicedef/services.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/servicedef/services.xml?rev=1686641&r1=1686640&r2=1686641&view=diff ============================================================================== --- ofbiz/branches/release14.12/applications/order/servicedef/services.xml (original) +++ ofbiz/branches/release14.12/applications/order/servicedef/services.xml Sat Jun 20 15:25:41 2015 @@ -1187,4 +1187,12 @@ under the License. <attribute name="quantity" type="BigDecimal" mode="IN"/> </service> + <service name="updateShipGroupShipInfo" engine="java" location="org.ofbiz.order.order.OrderServices" invoke="updateShipGroupShipInfo" auth="true"> + <description>Update Shipping Information on Order View</description> + <attribute name="contactMechId" type="String" mode="IN" optional="false"/> + <attribute name="orderId" type="String" mode="IN" optional="true"/> + <attribute name="oldContactMechId" type="String" mode="IN" optional="true"/> + <attribute name="shipGroupSeqId" type="String" mode="IN" optional="true"/> + <attribute name="shipmentMethod" type="String" mode="IN" optional="true"/> + </service> </services> Modified: ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?rev=1686641&r1=1686640&r2=1686641&view=diff ============================================================================== --- ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java (original) +++ ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Sat Jun 20 15:25:41 2015 @@ -3013,5 +3013,18 @@ public class OrderReadHelper { return ZERO; } } + + public List<BigDecimal> getShippableSizes(String shipGrouSeqId) { + List<BigDecimal> shippableSizes = FastList.newInstance(); + List<GenericValue> validItems = getValidOrderItems(shipGrouSeqId); + if (validItems != null) { + Iterator<GenericValue> i = validItems.iterator(); + while (i.hasNext()) { + GenericValue item = i.next(); + shippableSizes.add(this.getItemSize(item)); + } + } + return shippableSizes; + } } Modified: ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=1686641&r1=1686640&r2=1686641&view=diff ============================================================================== --- ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java (original) +++ ofbiz/branches/release14.12/applications/order/src/org/ofbiz/order/order/OrderServices.java Sat Jun 20 15:25:41 2015 @@ -6375,4 +6375,110 @@ public class OrderServices { return ServiceUtil.returnSuccess(); } + + /** + * This service runs when you update shipping method of Order from order view page. + */ + public static Map<String, Object> updateShipGroupShipInfo(DispatchContext dctx, Map<String, ? extends Object> context) { + LocalDispatcher dispatcher = dctx.getDispatcher(); + Delegator delegator = dctx.getDelegator(); + Locale locale = (Locale) context.get("locale"); + GenericValue userLogin = (GenericValue)context.get("userLogin"); + String orderId = (String)context.get("orderId"); + String shipGroupSeqId = (String)context.get("shipGroupSeqId"); + String contactMechId = (String)context.get("contactMechId"); + String oldContactMechId = (String)context.get("oldContactMechId"); + String shipmentMethod = (String)context.get("shipmentMethod"); + + //load cart from order to update new shipping method or address + ShoppingCart shoppingCart = null; + try { + shoppingCart = loadCartForUpdate(dispatcher, delegator, userLogin, orderId); + } catch(GeneralException e) { + Debug.logError(e, module); + } + + String message = null; + if (UtilValidate.isNotEmpty(shipGroupSeqId)) { + OrderReadHelper orh = new OrderReadHelper(delegator, orderId); + List<GenericValue> shippingMethods = null; + String shipmentMethodTypeId = null; + String carrierPartyId = null; + + // get shipment method from OrderItemShipGroup, if not available in parameters + if (UtilValidate.isNotEmpty(shipmentMethod)) { + String[] arr = shipmentMethod.split( "@" ); + shipmentMethodTypeId = arr[0]; + carrierPartyId = arr[1]; + } else { + GenericValue orderItemshipGroup = orh.getOrderItemShipGroup(shipGroupSeqId); + shipmentMethodTypeId = orderItemshipGroup.getString("shipmentMethodTypeId"); + carrierPartyId = orderItemshipGroup.getString("carrierPartyId"); + } + int groupIdx =Integer.parseInt(shipGroupSeqId); + + /* check whether new selected contact address is same as old contact. + If contact address is different, get applicable ship methods for changed contact */ + if (UtilValidate.isNotEmpty(oldContactMechId) && oldContactMechId.equals(contactMechId)) { + shoppingCart.setShipmentMethodTypeId(groupIdx - 1, shipmentMethodTypeId); + shoppingCart.setCarrierPartyId(groupIdx - 1, carrierPartyId); + } else { + Map<String, BigDecimal> shippableItemFeatures = orh.getFeatureIdQtyMap(shipGroupSeqId); + BigDecimal shippableTotal = orh.getShippableTotal(shipGroupSeqId); + BigDecimal shippableWeight = orh.getShippableWeight(shipGroupSeqId); + List<BigDecimal> shippableItemSizes = orh.getShippableSizes(shipGroupSeqId); + + GenericValue shippingAddress = null; + if(UtilValidate.isEmpty(shippingAddress)) { + shippingAddress = orh.getShippingAddress(shipGroupSeqId); + } + + shippingMethods = ProductStoreWorker.getAvailableStoreShippingMethods(delegator, orh.getProductStoreId(), + shippingAddress, shippableItemSizes, shippableItemFeatures, shippableWeight, shippableTotal); + + boolean isShippingMethodAvailable = false; + // search shipping method for ship group is applicable to new address or not. + for (GenericValue shippingMethod : shippingMethods) { + isShippingMethodAvailable = shippingMethod.getString("partyId").equals(carrierPartyId) && shippingMethod.getString("shipmentMethodTypeId").equals(shipmentMethodTypeId); + if (isShippingMethodAvailable) { + shoppingCart.setShipmentMethodTypeId(groupIdx - 1, shipmentMethodTypeId); + shoppingCart.setCarrierPartyId(groupIdx - 1, carrierPartyId); + break; + } + } + + // set first shipping method from list, if shipping method for ship group is not applicable to new ship address. + if(!isShippingMethodAvailable) { + shoppingCart.setShipmentMethodTypeId(groupIdx - 1, shippingMethods.get(0).getString("shipmentMethodTypeId")); + shoppingCart.setCarrierPartyId(groupIdx - 1, shippingMethods.get(0).getString("carrierPartyId")); + + String newShipMethTypeDesc =null; + String shipMethTypeDesc=null; + try { + shipMethTypeDesc = delegator.findOne("ShipmentMethodType", UtilMisc.toMap("shipmentMethodTypeId", shipmentMethodTypeId), false).getString("description"); + newShipMethTypeDesc = delegator.findOne("ShipmentMethodType", UtilMisc.toMap("shipmentMethodTypeId", shippingMethods.get(0).getString("shipmentMethodTypeId")), false).getString("description"); + } catch(GenericEntityException e) { + Debug.logError(e, module); + } + // message to notify user for not applicability of shipping method + message= "Shipping Method "+carrierPartyId+" "+shipMethTypeDesc+" is not applicable to shipping address. "+shippingMethods.get(0).getString("carrierPartyId")+" "+newShipMethTypeDesc+" has been set for shipping address."; + } + shoppingCart.setShippingContactMechId(groupIdx-1, contactMechId); + } + } + + // save cart after updating shipping method and shipping address. + Map<String, Object> changeMap = new HashMap<String, Object>(); + try { + saveUpdatedCartToOrder(dispatcher, delegator, shoppingCart, locale, userLogin, orderId, changeMap, true, false); + } catch(GeneralException e) { + Debug.logError(e, module); + } + + if (UtilValidate.isNotEmpty(message)) { + return ServiceUtil.returnSuccess(message); + } else { + return ServiceUtil.returnSuccess(); + } + } } Modified: ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy?rev=1686641&r1=1686640&r2=1686641&view=diff ============================================================================== --- ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy (original) +++ ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy Sat Jun 20 15:25:41 2015 @@ -29,6 +29,7 @@ import org.ofbiz.order.order.*; import org.ofbiz.party.contact.*; import org.ofbiz.product.inventory.InventoryWorker; import org.ofbiz.product.catalog.CatalogWorker; +import org.ofbiz.product.store.ProductStoreWorker; import org.ofbiz.accounting.payment.*; import javolution.util.FastMap; @@ -422,8 +423,19 @@ if (orderHeader) { context.shippingContactMechList = shippingContactMechList; // list to find all the shipmentMethods from the view named "ProductStoreShipmentMethView". - if (productStore) { - context.productStoreShipmentMethList = from("ProductStoreShipmentMethView").where("productStoreId", productStore.productStoreId).orderBy("sequenceNumber").cache(true).queryList(); + shipGroupShippingMethods = [:]; + shipGroups.each { shipGroup -> + shipGroupSeqId = shipGroup.shipGroupSeqId; + shippableItemFeatures = orderReadHelper.getFeatureIdQtyMap(shipGroupSeqId); + shippableTotal = orderReadHelper.getShippableTotal(shipGroupSeqId); + shippableWeight = orderReadHelper.getShippableWeight(shipGroupSeqId); + shippableItemSizes = orderReadHelper.getShippableSizes(shipGroupSeqId); + shippingAddress = orderReadHelper.getShippingAddress(shipGroupSeqId); + + List<GenericValue> productStoreShipmentMethList = ProductStoreWorker.getAvailableStoreShippingMethods(delegator, orderReadHelper.getProductStoreId(), + shippingAddress, shippableItemSizes, shippableItemFeatures, shippableWeight, shippableTotal); + shipGroupShippingMethods.put(shipGroupSeqId, productStoreShipmentMethList); + context.shipGroupShippingMethods = shipGroupShippingMethods; } // Get a map of returnable items Modified: ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/controller.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/controller.xml?rev=1686641&r1=1686640&r2=1686641&view=diff ============================================================================== --- ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/controller.xml (original) +++ ofbiz/branches/release14.12/applications/order/webapp/ordermgr/WEB-INF/controller.xml Sat Jun 20 15:25:41 2015 @@ -1695,7 +1695,7 @@ under the License. <request-map uri="addShippingAddress"> <security https="true" auth="true"/> <event type="service" invoke="createUpdateShippingAddress"/> - <response name="success" type="request" value="updateOrderItemShipGroup"/> + <response name="success" type="request" value="updateShipGroupShipInfo"/> <response name="error" type="view" value="orderview"/> </request-map> <request-map uri="getAssociatedStateList"> @@ -1882,6 +1882,13 @@ under the License. <response name="success" type="view" value="splitship"/> <response name="error" type="request" value="splitship"/> </request-map> + + <request-map uri="updateShipGroupShipInfo"> + <security https="true" auth="true"/> + <event type="service" invoke="updateShipGroupShipInfo"/> + <response name="success" type="view" value="orderview"/> + <response name="error" type="view" value="orderview"/> + </request-map> <!-- These are just examples of reports developed using JasperReport and not really Modified: ofbiz/branches/release14.12/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/release14.12/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl?rev=1686641&r1=1686640&r2=1686641&view=diff ============================================================================== --- ofbiz/branches/release14.12/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl (original) +++ ofbiz/branches/release14.12/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl Sat Jun 20 15:25:41 2015 @@ -353,7 +353,7 @@ under the License. <br class="clear"/> </div> <div class="screenlet-body" id="ShipGroupScreenletBody_${shipGroup.shipGroupSeqId}"> - <form name="updateOrderItemShipGroup" method="post" action="<@ofbizUrl>updateOrderItemShipGroup</@ofbizUrl>"> + <form name="updateOrderItemShipGroup" method="post" action="<@ofbizUrl>updateShipGroupShipInfo</@ofbizUrl>"> <input type="hidden" name="orderId" value="${orderId!}"/> <input type="hidden" name="shipGroupSeqId" value="${shipGroup.shipGroupSeqId!}"/> <input type="hidden" name="contactMechPurposeTypeId" value="SHIPPING_LOCATION"/> @@ -404,7 +404,7 @@ under the License. <#if shipGroup.shipmentMethodTypeId?has_content> <option value="${shipGroup.shipmentMethodTypeId}@${shipGroup.carrierPartyId!}@${shipGroup.carrierRoleTypeId!}"><#if shipGroup.carrierPartyId?? && shipGroup.carrierPartyId != "_NA_">${shipGroup.carrierPartyId!}</#if> ${shipmentMethodType.get("description",locale)!}</option> </#if> - <#list productStoreShipmentMethList as productStoreShipmentMethod> + <#list shipGroupShippingMethods[shipGroup.shipGroupSeqId] as productStoreShipmentMethod> <#assign shipmentMethodTypeAndParty = productStoreShipmentMethod.shipmentMethodTypeId + "@" + productStoreShipmentMethod.partyId + "@" + productStoreShipmentMethod.roleTypeId> <#if productStoreShipmentMethod.partyId?has_content || productStoreShipmentMethod?has_content> <option value="${shipmentMethodTypeAndParty!}"><#if productStoreShipmentMethod.partyId != "_NA_">${productStoreShipmentMethod.partyId!}</#if> ${productStoreShipmentMethod.get("description",locale)?default("")}</option> |
Free forum by Nabble | Edit this page |