I think the attached patch fixes the issue I am having.

For each OrderItemShipGroup get the shipGroupSeqId value and use that as
the index. I also had to modify the call to

564: newItem.setQuantity(..., false, ...);
in
398: org.ofbiz.order.shoppingcart.ShoppingCartItem.makeItem(...)

so that when a second item gets added to the cart with a shipGroupSeqId
less then the first the shipInfo member in cart does not get touched.

I will create a JIRA issue, if no one finds any issues.

Stephen Rufle wrote:
> In ShoppingCartServices.loadCartFromOrder(dctx, context) there is a call
> to get a list of shipGroups
> *
> 455: List<GenericValue>shipGroups = orh.getOrderItemShipGroupAssocs(item);*
>
> This then loops through setting information on the cart creating new
> CartShipInfo objects if one can not be found. My issue is that when I
> get to the second item in the loop the shipGroups are gotten for that
> item and the
>
> *470: cart.setShipAfterDate(g, sg.getTimestamp("shipAfterDate"));*
>
> index (g) starts over and overwrites the previous value in the cart. I
> am not sure how else to set the shipGroups on the cart though so any
> advice would be great.
>  
> My data for the above scenario is as follows
> OrderItem orderItemSeqId="00001" productId="ABC"
> OrderItemShipGroupAssoc orderItemSeqId="00001" shipGroupSeqId="00001"
> OrderItemShipGroup shipGroupSeqId="00001" facilityId="AAA"
>  
> OrderItem orderItemSeqId="00002" productId="ABC"
> OrderItemShipGroupAssoc orderItemSeqId="00002" shipGroupSeqId="00002"
> OrderItemShipGroup shipGroupSeqId="00002" facilityId="BBB"
>
>
>
>
>   

-- 
Stephen P Rufle
sru...@salmonllc.com
H1:480-626-8022
H2:480-802-7173
Yahoo IM: stephen_rufle
AOL IM: stephen1rufle

### Eclipse Workspace Patch 1.0
#P ofbiz
Index: applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java
===================================================================
--- applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java   
(revision 730447)
+++ applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java   
(working copy)
@@ -561,7 +561,7 @@
         }
 
         try {
-            newItem.setQuantity((int)quantity, dispatcher, cart, 
triggerExternalOps, true, triggerPriceRules, 
skipInventoryChecks.booleanValue());
+            newItem.setQuantity((int)quantity, dispatcher, cart, 
triggerExternalOps, false, triggerPriceRules, 
skipInventoryChecks.booleanValue());
         } catch (CartItemModifyException e) {
             Debug.logWarning(e.getMessage(), module);
             cart.removeCartItem(cart.getItemIndex(newItem), dispatcher);
Index: 
applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartServices.java
===================================================================
--- 
applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartServices.java   
    (revision 730447)
+++ 
applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartServices.java   
    (working copy)
@@ -28,6 +28,7 @@
 import javolution.util.FastList;
 import javolution.util.FastMap;
 
+import org.apache.commons.lang.math.NumberUtils;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.UtilFormatOut;
@@ -467,19 +468,34 @@
                         Debug.logError(e, module);
                         return ServiceUtil.returnError(e.getMessage());
                     }
-                    cart.setShipAfterDate(g, sg.getTimestamp("shipAfterDate"));
-                    cart.setShipBeforeDate(g, sg.getTimestamp("shipByDate"));
-                    cart.setShipmentMethodTypeId(g, 
sg.getString("shipmentMethodTypeId"));
-                    cart.setCarrierPartyId(g, sg.getString("carrierPartyId"));
-                    cart.setSupplierPartyId(g, 
sg.getString("supplierPartyId"));
-                    cart.setMaySplit(g, sg.getBoolean("maySplit"));
-                    cart.setGiftMessage(g, sg.getString("giftMessage"));
-                    cart.setShippingContactMechId(g, 
sg.getString("contactMechId"));
-                    cart.setShippingInstructions(g, 
sg.getString("shippingInstructions"));
-                    cart.setShipGroupFacilityId(g, sg.getString("facilityId"));
-                    cart.setShipGroupVendorPartyId(g, 
sg.getString("vendorPartyId"));
-                    cart.setShipGroupSeqId(g, sg.getString("shipGroupSeqId"));
-                    cart.setItemShipGroupQty(itemIndex, 
shipGroupQty.doubleValue(), g);
+                    String cartShipGroupIndexStr = 
sg.getString("shipGroupSeqId");
+                    int cartShipGroupIndex = 
NumberUtils.toInt(cartShipGroupIndexStr);
+
+                    if (cart.getShipGroupSize() < cartShipGroupIndex) {
+                        int groupDiff = cartShipGroupIndex - 
cart.getShipGroupSize();
+                        for (int i = 0; i < groupDiff; i++) {
+                            cart.addShipInfo();
+                        }
+                    }
+
+                    cartShipGroupIndex = cartShipGroupIndex - 1;
+                    if (cartShipGroupIndex > 0) {
+                        cart.positionItemToGroup(itemIndex, 
shipGroupQty.doubleValue(), 0, cartShipGroupIndex, false);
+                    }
+                    
+                    cart.setShipAfterDate(cartShipGroupIndex, 
sg.getTimestamp("shipAfterDate"));
+                    cart.setShipBeforeDate(cartShipGroupIndex, 
sg.getTimestamp("shipByDate"));
+                    cart.setShipmentMethodTypeId(cartShipGroupIndex, 
sg.getString("shipmentMethodTypeId"));
+                    cart.setCarrierPartyId(cartShipGroupIndex, 
sg.getString("carrierPartyId"));
+                    cart.setSupplierPartyId(cartShipGroupIndex, 
sg.getString("supplierPartyId"));
+                    cart.setMaySplit(cartShipGroupIndex, 
sg.getBoolean("maySplit"));
+                    cart.setGiftMessage(cartShipGroupIndex, 
sg.getString("giftMessage"));
+                    cart.setShippingContactMechId(cartShipGroupIndex, 
sg.getString("contactMechId"));
+                    cart.setShippingInstructions(cartShipGroupIndex, 
sg.getString("shippingInstructions"));
+                    cart.setShipGroupFacilityId(cartShipGroupIndex, 
sg.getString("facilityId"));
+                    cart.setShipGroupVendorPartyId(cartShipGroupIndex, 
sg.getString("vendorPartyId"));
+                    cart.setShipGroupSeqId(cartShipGroupIndex, 
sg.getString("shipGroupSeqId"));
+                    cart.setItemShipGroupQty(itemIndex, 
shipGroupQty.doubleValue(), cartShipGroupIndex);
                 }
             }
 

Reply via email to