/// <summary>
        /// Reorders one or more items from an existing order.
        /// </summary>
        /// <param name="storefront">The storefront context.</param>
        /// <param name="visitorContext">The visitor context.</param>
        /// <param name="inputModel">The reorder input model.</param>
        /// <returns>The result of the operation.</returns>
        public ManagerResponse <CartResult, CommerceCart> Reorder([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, ReorderInputModel inputModel)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNull(visitorContext, "visitorContext");
            Assert.ArgumentNotNull(inputModel, "inputModel");
            Assert.ArgumentNotNullOrEmpty(inputModel.OrderId, "inputModel.OrderId");

            var request = new ReorderByCartNameRequest()
            {
                CustomerId                  = visitorContext.GetCustomerId(),
                OrderId                     = inputModel.OrderId,
                ReorderLineExternalIds      = inputModel.ReorderLineExternalIds,
                CartName                    = storefront.DefaultCartName,
                OrderShippingPreferenceType = ShippingOptionType.ShipToAddress,
            };

            var cartCache = CommerceTypeLoader.CreateInstance <CartCacheHelper>();

            cartCache.InvalidateCartCache(visitorContext.GetCustomerId());

            var result = this.OrderServiceProvider.Reorder(request);

            if (result.Success && result.Cart != null)
            {
                cartCache.AddCartToCache(result.Cart as CommerceCart);
            }

            Helpers.LogSystemMessages(result.SystemMessages, result);
            return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart));
        }
        public ManagerResponse <CartResult, CommerceCart> Reorder(string userId, ReorderInputModel inputModel)
        {
            Assert.ArgumentNotNull(inputModel, nameof(inputModel));
            Assert.ArgumentNotNullOrEmpty(inputModel.OrderId, nameof(inputModel.OrderId));

            var request = new ReorderByCartNameRequest
            {
                CustomerId                  = userId,
                OrderId                     = inputModel.OrderId,
                ReorderLineExternalIds      = inputModel.ReorderLineExternalIds,
                CartName                    = CommerceConstants.CartSettings.DefaultCartName,
                OrderShippingPreferenceType = ShippingOptionType.ShipToAddress
            };

            var result = OrderServiceProvider.Reorder(request);

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