protected Order updateFulfillmentGroups(CartSummary cartSummary, Order currentCartOrder)
     throws PricingException {
   FulfillmentGroup fg = cartSummary.getFulfillmentGroup();
   if (fg.getId() == null) {
     cartService.removeAllFulfillmentGroupsFromOrder(currentCartOrder, false);
     for (CartOrderItem item : cartSummary.getRows()) {
       item.getOrderItem().setOrder(currentCartOrder);
       fg =
           cartService.addItemToFulfillmentGroup(
               item.getOrderItem(), fg, item.getQuantity(), false);
     }
     cartSummary.setFulfillmentGroup(fg);
   }
   return cartService.save(currentCartOrder, true);
 }
 @RequestMapping(
     value = "/viewCart.htm",
     params = "updateItemQuantity",
     method = RequestMethod.POST)
 public String updateItemQuantity(
     @ModelAttribute(value = "cartSummary") CartSummary cartSummary,
     Errors errors,
     ModelMap model,
     HttpServletRequest request)
     throws PricingException {
   if (errors.hasErrors()) {
     model.addAttribute("cartSummary", cartSummary);
     return cartView;
   }
   Order currentCartOrder = retrieveCartOrder(request, model);
   List<OrderItem> orderItems = currentCartOrder.getOrderItems();
   List<CartOrderItem> items = new ArrayList<CartOrderItem>(cartSummary.getRows());
   for (CartOrderItem cartOrderItem : items) {
     OrderItem orderItem =
         (OrderItem)
             CollectionUtils.find(
                 orderItems,
                 new BeanPropertyValueEqualsPredicate("id", cartOrderItem.getOrderItem().getId()));
     // in case the item was removed from the cart from another browser tab
     if (orderItem != null) {
       if (cartOrderItem.getQuantity() > 0) {
         orderItem.setQuantity(cartOrderItem.getQuantity());
         try {
           cartService.updateItemQuantity(currentCartOrder, orderItem);
         } catch (ItemNotFoundException e) {
           LOG.error("Item not found in order: (" + orderItem.getId() + ")", e);
         } catch (PricingException e) {
           LOG.error("Unable to price the order: (" + currentCartOrder.getId() + ")", e);
         }
       } else {
         try {
           cartService.removeItemFromOrder(currentCartOrder, orderItem);
           cartSummary.getRows().remove(cartOrderItem);
         } catch (Exception e) {
           // TODO: handle exception gracefully
           LOG.error("Unable to remove item from the order: (" + currentCartOrder.getId() + ")");
         }
       }
     }
   }
   cartSummary.setOrderDiscounts(currentCartOrder.getTotalAdjustmentsValue().getAmount());
   return cartView;
 }