public virtual ManagerResponse MergeCarts()

in src/Foundation/CommerceServer/code/Managers/CartManager.cs [541:592]


        public virtual ManagerResponse<CartResult, CommerceCart> MergeCarts([NotNull] CommerceStorefront storefront, [NotNull] IVisitorContext 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)
                        {
                            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 = ContextTypeLoader.CreateInstance<CartCacheHelper>();
                cartCache.InvalidateCartCache(anonymousVisitorId);
                cartCache.AddCartToCache(result.Cart as CommerceCart);
            }

            return new ManagerResponse<CartResult, CommerceCart>(result, result.Cart as CommerceCart);
        }