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); } }