/// <summary> /// Migrate shopping cart /// </summary> /// <param name="fromCustomer">From customer</param> /// <param name="toCustomer">To customer</param> /// <param name="includeCouponCodes">A value indicating whether to coupon codes (discount and gift card) should be also re-applied</param> public virtual void MigrateShoppingCart(Customer fromCustomer, Customer toCustomer, bool includeCouponCodes) { if (fromCustomer == null) throw new ArgumentNullException("fromCustomer"); if (toCustomer == null) throw new ArgumentNullException("toCustomer"); if (fromCustomer.Id == toCustomer.Id) return; //the same customer //shopping cart items var fromCart = fromCustomer.ShoppingCartItems.ToList(); for (int i = 0; i < fromCart.Count; i++) { var sci = fromCart[i]; AddToCart(toCustomer, sci.ProductVariant, sci.ShoppingCartType, sci.StoreId, sci.AttributesXml, sci.CustomerEnteredPrice, sci.Quantity, false); } for (int i = 0; i < fromCart.Count; i++) { var sci = fromCart[i]; DeleteShoppingCartItem(sci); } //migrate gift card and discount coupon codes if (includeCouponCodes) { //discount var discountCouponCode = fromCustomer.GetAttribute<string>(SystemCustomerAttributeNames.DiscountCouponCode); if (!String.IsNullOrEmpty(discountCouponCode)) _genericAttributeService.SaveAttribute(toCustomer, SystemCustomerAttributeNames.DiscountCouponCode, discountCouponCode); //gift card foreach (var gcCode in fromCustomer.ParseAppliedGiftCardCouponCodes()) toCustomer.ApplyGiftCardCouponCode(gcCode); //save customer _customerService.UpdateCustomer(toCustomer); } }