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

svn commit: r1686635 - in /ofbiz/trunk/applications/order: servicedef/ src/org/ofbiz/order/order/ webapp/ordermgr/WEB-INF/ webapp/ordermgr/WEB-INF/actions/order/ webapp/ordermgr/order/

Author: diveshdutta
Date: Sat Jun 20 14:58:45 2015
New Revision: 1686635

URL: http://svn.apache.org/r1686635
Log:
[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/trunk/applications/order/servicedef/secas.xml
    ofbiz/trunk/applications/order/servicedef/services.xml
    ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
    ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
    ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
    ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
    ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl

Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=1686635&r1=1686634&r2=1686635&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/secas.xml Sat Jun 20 14:58:45 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/trunk/applications/order/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?rev=1686635&r1=1686634&r2=1686635&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/services.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/services.xml Sat Jun 20 14:58:45 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/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?rev=1686635&r1=1686634&r2=1686635&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java Sat Jun 20 14:58:45 2015
@@ -33,6 +33,8 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
+import javolution.util.FastList;
+
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilDateTime;
 import org.ofbiz.base.util.UtilFormatOut;
@@ -3012,4 +3014,17 @@ public class OrderReadHelper {
         }
     }
 
+    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/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=1686635&r1=1686634&r2=1686635&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java (original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java Sat Jun 20 14:58:45 2015
@@ -6371,4 +6371,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/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy?rev=1686635&r1=1686634&r2=1686635&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy Sat Jun 20 14:58:45 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.*;
 
 orderId = parameters.orderId;
@@ -420,8 +421,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/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=1686635&r1=1686634&r2=1686635&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml Sat Jun 20 14:58:45 2015
@@ -1701,7 +1701,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">
@@ -1888,6 +1888,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/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl?rev=1686635&r1=1686634&r2=1686635&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl Sat Jun 20 14:58:45 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="<@o...@ofbizUrl>">
+          <form name="updateOrderItemShipGroup" method="post" action="<@o...@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>&nbsp;${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>&nbsp;${productStoreShipmentMethod.get("description",locale)?default("")}</option>



Re: svn commit: r1686635 - in /ofbiz/trunk/applications/order: servicedef/ src/org/ofbiz/order/order/ webapp/ordermgr/WEB-INF/ webapp/ordermgr/WEB-INF/actions/order/ webapp/ordermgr/order/

Posted by Divesh Dutta <di...@hotwaxsystems.com>.
Thanks Deepak. Will change the code accordingly.


Thanks
--
Divesh Dutta.

On Sun, Jun 21, 2015 at 10:40 AM, Deepak Dixit <
deepak.dixit@hotwaxsystems.com> wrote:

> Please do not use javolution classes.
>
> Thanks & Regards
> --
> Deepak Dixit
>
> On Saturday, June 20, 2015, <di...@apache.org> wrote:
>
> > Author: diveshdutta
> > Date: Sat Jun 20 14:58:45 2015
> > New Revision: 1686635
> >
> > URL: http://svn.apache.org/r1686635
> > Log:
> > [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/trunk/applications/order/servicedef/secas.xml
> >     ofbiz/trunk/applications/order/servicedef/services.xml
> >
> >
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
> >
> >
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
> >
> >
> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
> >     ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
> >
> >
> ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
> >
> > Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
> > URL:
> >
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=1686635&r1=1686634&r2=1686635&view=diff
> >
> >
> ==============================================================================
> > --- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
> > +++ ofbiz/trunk/applications/order/servicedef/secas.xml Sat Jun 20
> > 14:58:45 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/trunk/applications/order/servicedef/services.xml
> > URL:
> >
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?rev=1686635&r1=1686634&r2=1686635&view=diff
> >
> >
> ==============================================================================
> > --- ofbiz/trunk/applications/order/servicedef/services.xml (original)
> > +++ ofbiz/trunk/applications/order/servicedef/services.xml Sat Jun 20
> > 14:58:45 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/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
> > URL:
> >
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?rev=1686635&r1=1686634&r2=1686635&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
> > (original)
> > +++
> >
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
> > Sat Jun 20 14:58:45 2015
> > @@ -33,6 +33,8 @@ import java.util.Locale;
> >  import java.util.Map;
> >  import java.util.Set;
> >
> > +import javolution.util.FastList;
> > +
> >  import org.ofbiz.base.util.Debug;
> >  import org.ofbiz.base.util.UtilDateTime;
> >  import org.ofbiz.base.util.UtilFormatOut;
> > @@ -3012,4 +3014,17 @@ public class OrderReadHelper {
> >          }
> >      }
> >
> > +    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/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
> > URL:
> >
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=1686635&r1=1686634&r2=1686635&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
> > (original)
> > +++
> >
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
> > Sat Jun 20 14:58:45 2015
> > @@ -6371,4 +6371,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/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
> > URL:
> >
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy?rev=1686635&r1=1686634&r2=1686635&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
> > (original)
> > +++
> >
> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
> > Sat Jun 20 14:58:45 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.*;
> >
> >  orderId = parameters.orderId;
> > @@ -420,8 +421,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/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=1686635&r1=1686634&r2=1686635&view=diff
> >
> >
> ==============================================================================
> > --- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
> > (original)
> > +++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
> > Sat Jun 20 14:58:45 2015
> > @@ -1701,7 +1701,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">
> > @@ -1888,6 +1888,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/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
> > URL:
> >
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl?rev=1686635&r1=1686634&r2=1686635&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
> > (original)
> > +++
> >
> ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
> > Sat Jun 20 14:58:45 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="<@o...@ofbizUrl>">
> > +          <form name="updateOrderItemShipGroup" method="post"
> > action="<@o...@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>&nbsp;${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>&nbsp;${productStoreShipmentMethod.get("description",locale)?default("")}</option>
> >
> >
> >
>
> --
> Thanks & Regards
> --
> Deepak Dixit
> www.hotwaxsystems.com
>

Re: svn commit: r1686635 - in /ofbiz/trunk/applications/order: servicedef/ src/org/ofbiz/order/order/ webapp/ordermgr/WEB-INF/ webapp/ordermgr/WEB-INF/actions/order/ webapp/ordermgr/order/

Posted by Deepak Dixit <de...@hotwaxsystems.com>.
Please do not use javolution classes.

Thanks & Regards
--
Deepak Dixit

On Saturday, June 20, 2015, <di...@apache.org> wrote:

> Author: diveshdutta
> Date: Sat Jun 20 14:58:45 2015
> New Revision: 1686635
>
> URL: http://svn.apache.org/r1686635
> Log:
> [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/trunk/applications/order/servicedef/secas.xml
>     ofbiz/trunk/applications/order/servicedef/services.xml
>
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
>
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
>
> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
>     ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
>
> ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
>
> Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
> URL:
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=1686635&r1=1686634&r2=1686635&view=diff
>
> ==============================================================================
> --- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
> +++ ofbiz/trunk/applications/order/servicedef/secas.xml Sat Jun 20
> 14:58:45 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/trunk/applications/order/servicedef/services.xml
> URL:
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/services.xml?rev=1686635&r1=1686634&r2=1686635&view=diff
>
> ==============================================================================
> --- ofbiz/trunk/applications/order/servicedef/services.xml (original)
> +++ ofbiz/trunk/applications/order/servicedef/services.xml Sat Jun 20
> 14:58:45 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/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
> URL:
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java?rev=1686635&r1=1686634&r2=1686635&view=diff
>
> ==============================================================================
> ---
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
> (original)
> +++
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderReadHelper.java
> Sat Jun 20 14:58:45 2015
> @@ -33,6 +33,8 @@ import java.util.Locale;
>  import java.util.Map;
>  import java.util.Set;
>
> +import javolution.util.FastList;
> +
>  import org.ofbiz.base.util.Debug;
>  import org.ofbiz.base.util.UtilDateTime;
>  import org.ofbiz.base.util.UtilFormatOut;
> @@ -3012,4 +3014,17 @@ public class OrderReadHelper {
>          }
>      }
>
> +    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/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
> URL:
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=1686635&r1=1686634&r2=1686635&view=diff
>
> ==============================================================================
> ---
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
> (original)
> +++
> ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
> Sat Jun 20 14:58:45 2015
> @@ -6371,4 +6371,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/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
> URL:
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy?rev=1686635&r1=1686634&r2=1686635&view=diff
>
> ==============================================================================
> ---
> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
> (original)
> +++
> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/actions/order/OrderView.groovy
> Sat Jun 20 14:58:45 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.*;
>
>  orderId = parameters.orderId;
> @@ -420,8 +421,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/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=1686635&r1=1686634&r2=1686635&view=diff
>
> ==============================================================================
> --- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
> (original)
> +++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
> Sat Jun 20 14:58:45 2015
> @@ -1701,7 +1701,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">
> @@ -1888,6 +1888,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/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
> URL:
> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl?rev=1686635&r1=1686634&r2=1686635&view=diff
>
> ==============================================================================
> ---
> ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
> (original)
> +++
> ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
> Sat Jun 20 14:58:45 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="<@o...@ofbizUrl>">
> +          <form name="updateOrderItemShipGroup" method="post"
> action="<@o...@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>&nbsp;${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>&nbsp;${productStoreShipmentMethod.get("description",locale)?default("")}</option>
>
>
>

-- 
Thanks & Regards
--
Deepak Dixit
www.hotwaxsystems.com