/// <summary> /// Merges the carts. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="anonymousVisitorId">The anonymous visitor identifier.</param> /// <param name="anonymousVisitorCart">The anonymous visitor cart.</param> /// <returns> /// The manager response where the merged cart is returned in the result. /// </returns> public virtual ManagerResponse <CartResult, CommerceCart> MergeCarts([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, string anonymousVisitorId, Cart anonymousVisitorCart) { Assert.ArgumentNotNull(storefront, "storefront"); Assert.ArgumentNotNull(visitorContext, "visitorContext"); Assert.ArgumentNotNullOrEmpty(anonymousVisitorId, "anonymousVisitorId"); var userId = visitorContext.UserId; var cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, userId, true); if (!cartResult.Success || cartResult.Cart == null) { var message = StorefrontManager.GetSystemMessage(StorefrontConstants.SystemMessages.CartNotFoundError); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart)); } CommerceCart currentCart = (CommerceCart)cartResult.Cart; var result = new CartResult { Cart = currentCart, Success = true }; if (userId != anonymousVisitorId) { var anonymousCartHasPromocodes = (anonymousVisitorCart is CommerceCart) && ((CommerceCart)anonymousVisitorCart).OrderForms.Any(of => of.PromoCodes.Any()); if (anonymousVisitorCart != null && (anonymousVisitorCart.Lines.Any() || anonymousCartHasPromocodes)) { if ((currentCart.ShopName == anonymousVisitorCart.ShopName) || (currentCart.ExternalId != anonymousVisitorCart.ExternalId)) { var mergeCartRequest = new MergeCartRequest(anonymousVisitorCart, currentCart); result = this.CartServiceProvider.MergeCart(mergeCartRequest); } } } if (result.Success && result.Cart != null) { var cartCache = CommerceTypeLoader.CreateInstance <CartCacheHelper>(); cartCache.InvalidateCartCache(anonymousVisitorId); cartCache.AddCartToCache(result.Cart as CommerceCart); } return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart)); }
public ManagerResponse <CartResult, CommerceCart> MergeCarts(string newUserId, string previousUserId, Cart anonymousVisitorCart) { Assert.ArgumentNotNullOrEmpty(previousUserId, nameof(previousUserId)); Assert.ArgumentNotNullOrEmpty(newUserId, nameof(newUserId)); var cartResult = LoadCartByName(CommerceConstants.CartSettings.DefaultCartName, newUserId, true); if (!cartResult.Success || cartResult.Cart == null) { cartResult.SystemMessages.Add(new SystemMessage { Message = DictionaryPhraseRepository.Current.Get("/System Messages/Cart/Cart Not Found Error", "Could not retrieve the cart for the current user") }); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart)); } var currentCart = (CommerceCart)cartResult.Cart; var result = new CartResult { Cart = currentCart, Success = true }; if (newUserId != previousUserId) { var anonymousCartHasPromocodes = anonymousVisitorCart is CommerceCart && ((CommerceCart)anonymousVisitorCart).OrderForms.Any(of => of.PromoCodes.Any()); if (anonymousVisitorCart != null && (anonymousVisitorCart.Lines.Any() || anonymousCartHasPromocodes)) { if (currentCart.ShopName == anonymousVisitorCart.ShopName || currentCart.ExternalId != anonymousVisitorCart.ExternalId) { var mergeCartRequest = new MergeCartRequest(anonymousVisitorCart, currentCart); result = CartServiceProvider.MergeCart(mergeCartRequest); } } } if (result.Success && result.Cart != null) { CartCacheHelper.InvalidateCartCache(previousUserId); CartCacheHelper.AddCartToCache(result.Cart as CommerceCart); } return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart)); }
/// <summary> /// Merges the carts. /// </summary> /// <param name="userCart">The user cart.</param> /// <param name="anonymousCart">The anonymous cart.</param> /// <returns> /// The merged cart. /// </returns> public Cart MergeCarts([NotNull] Cart userCart, [NotNull] Cart anonymousCart) { Assert.ArgumentNotNull(userCart, "userCart"); Assert.ArgumentNotNull(anonymousCart, "anonymousCart"); userCart = this.EnsureCorrectCartUserId(userCart); if ((userCart.ShopName == anonymousCart.ShopName) && (userCart.ExternalId != anonymousCart.ExternalId)) { var mergeCartRequest = new MergeCartRequest(anonymousCart, userCart); var result = this._cartServiceProvider.MergeCart(mergeCartRequest); this._cartServiceProvider.DeleteCart(new DeleteCartRequest(anonymousCart)); return(result.Cart); } return(userCart); }
/// <summary> /// Merges the carts. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="anonymousVisitorId">The anonymous visitor identifier.</param> /// <param name="anonymousVisitorCart">The anonymous visitor cart.</param> /// <returns> /// The manager response where the merged cart is returned in the result. /// </returns> public virtual ManagerResponse<CartResult, CommerceCart> MergeCarts([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, string anonymousVisitorId, Cart anonymousVisitorCart) { Assert.ArgumentNotNull(storefront, "storefront"); Assert.ArgumentNotNull(visitorContext, "visitorContext"); Assert.ArgumentNotNullOrEmpty(anonymousVisitorId, "anonymousVisitorId"); var userId = visitorContext.UserId; var cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, userId, true); if (!cartResult.Success || cartResult.Cart == null) { var message = StorefrontManager.GetSystemMessage("CartNotFoundError"); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); return new ManagerResponse<CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart); } CommerceCart currentCart = (CommerceCart)cartResult.Cart; var result = new CartResult { Cart = currentCart, Success = true }; if (userId != anonymousVisitorId) { if (anonymousVisitorCart != null && anonymousVisitorCart.Lines.Any()) { if ((currentCart.ShopName == anonymousVisitorCart.ShopName) || (currentCart.ExternalId != anonymousVisitorCart.ExternalId)) { var mergeCartRequest = new MergeCartRequest(anonymousVisitorCart, currentCart); result = this.CartServiceProvider.MergeCart(mergeCartRequest); if (result.Success) { var updateCartRequest = new UpdateCartLinesRequest(result.Cart, anonymousVisitorCart.Lines); updateCartRequest.RefreshCart(true); result = this.CartServiceProvider.UpdateCartLines(updateCartRequest); if (result.Success) { this.CartServiceProvider.DeleteCart(new DeleteCartRequest(anonymousVisitorCart)); } } } } } if (result.Success && result.Cart != null) { var cartCache = CommerceTypeLoader.CreateInstance<CartCacheHelper>(); cartCache.InvalidateCartCache(anonymousVisitorId); cartCache.AddCartToCache(result.Cart as CommerceCart); } return new ManagerResponse<CartResult, CommerceCart>(result, result.Cart as CommerceCart); }