public ActionResult Index(BasketRenderingViewModel model) { var cartServiceProvider = new CartServiceProvider(); var cart = GetCart(); foreach (var orderLine in model.OrderLines) { var newQuantity = orderLine.Quantity; if (model.RemoveOrderlineId == orderLine.OrderLineId) { newQuantity = 0; } var bmw = cart.Lines.First(i => i.Product.ProductId == orderLine.Sku); bmw.Quantity = (uint)newQuantity; if (newQuantity > 0) { var updateCartLinesRequest = new UpdateCartLinesRequest(cart, new Collection <CartLine> { bmw }); cartServiceProvider.UpdateCartLines(updateCartLinesRequest); } else { var request = new RemoveCartLinesRequest(cart, cart.Lines.Where(l => l.Product.ProductId == bmw.Product.ProductId).ToArray()); cartServiceProvider.RemoveCartLines(request); } } return(Redirect("/Cart")); }
/// <summary> /// Changes the visitor's cart line quantity. /// </summary> /// <param name="productId"> /// The product id. /// </param> /// <param name="quantity"> /// The quantity. /// </param> /// <returns> /// The <see cref="Cart"/>. /// </returns> public Cart ChangeLineQuantity(string productId, uint quantity) { Assert.ArgumentNotNull(productId, "productId"); var cart = this.GetCart(); if (string.IsNullOrWhiteSpace(cart.ShopName)) { cart.ShopName = this.ShopName; } var cartLineToChange = cart.Lines.SingleOrDefault(cl => cl.Product != null && cl.Product.ProductId == productId); if (cartLineToChange == null) { return(cart); } cartLineToChange.Quantity = quantity; var updateRequest = new UpdateCartLinesRequest(cart, new[] { cartLineToChange }); var cartResult = this._cartServiceProvider.UpdateCartLines(updateRequest); return(this.UpdatePrices(cartResult.Cart)); }
/// <summary> /// Adds product to the visitor's cart. /// </summary> /// <param name="productId"> /// The product id. /// </param> /// <param name="quantity"> /// The quantity. /// </param> /// <returns> /// The <see cref="Cart"/>. /// </returns> public Cart AddToCart(string productId, uint quantity) { Assert.ArgumentNotNull(productId, "productId"); var cart = this.GetCart(); if (string.IsNullOrWhiteSpace(cart.ShopName)) { cart.ShopName = this.ShopName; } CartResult cartResult; var cartLineToChange = cart.Lines.FirstOrDefault(cl => cl.Product != null && cl.Product.ProductId == productId); if (cartLineToChange != null) { cartLineToChange.Quantity += quantity; var updateRequest = new UpdateCartLinesRequest(cart, new[] { cartLineToChange }); cartResult = this._cartServiceProvider.UpdateCartLines(updateRequest); } else { var cartLine = new CartLine { Product = new CartProduct { ProductId = productId }, Quantity = quantity }; this.UpdateStockInformation(cartLine); var request = new AddCartLinesRequest(cart, new[] { cartLine }); cartResult = this._cartServiceProvider.AddCartLines(request); } return(this.UpdatePrices(cartResult.Cart)); }
public ManagerResponse <CartResult, Cart> UpdateLineItemsInCart( Cart cart, IEnumerable <CartLineArgument> cartLines, string giftCardProductId, string giftCardPageLink) { Assert.ArgumentNotNull(cart, nameof(cart)); Assert.ArgumentNotNull(cartLines, nameof(cartLines)); var cartLineList = new List <CartLine>(); foreach (var cartLine in cartLines) { Assert.ArgumentNotNullOrEmpty(cartLine.ProductId, "inputModel.ProductId"); Assert.ArgumentNotNullOrEmpty(cartLine.CatalogName, "inputModel.CatalogName"); Assert.ArgumentNotNull(cartLine.Quantity, "inputModel.Quantity"); var quantity = cartLine.Quantity; bool Selector(CartLine x) { var product = (CommerceCartProduct)x.Product; return((x.Product.ProductId == cartLine.ProductId) && (product.ProductVariantId == cartLine.VariantId) && (product.ProductCatalog == cartLine.CatalogName)); } var commerceCartLine = cart.Lines.FirstOrDefault(Selector) ?? new CommerceCartLine( cartLine.CatalogName, cartLine.ProductId, cartLine.VariantId == "-1" ? null : cartLine.VariantId, quantity); commerceCartLine.Quantity = quantity; cartLineList.Add(commerceCartLine); } var request = new UpdateCartLinesRequest(cart, cartLineList); var updateCartResult = this.cartServiceProvider.UpdateCartLines(request); if (!updateCartResult.Success) { updateCartResult.SystemMessages.LogSystemMessages(this); } return(new ManagerResponse <CartResult, Cart>(updateCartResult, updateCartResult.Cart)); }
/// <summary> /// Changes the line quantity. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="inputModel">The input model.</param> /// <returns> /// The manager response where the modified CommerceCart is returned in the Result. /// </returns> public virtual ManagerResponse <CartResult, CommerceCart> ChangeLineQuantity([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] UpdateCartLineInputModel inputModel) { Assert.ArgumentNotNull(inputModel, "inputModel"); Assert.ArgumentNotNullOrEmpty(inputModel.ExternalCartLineId, "inputModel.ExternalCartLineId"); var cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, visitorContext.UserId); 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)); } var cartCache = CommerceTypeLoader.CreateInstance <CartCacheHelper>(); cartCache.InvalidateCartCache(visitorContext.GetCustomerId()); var cart = cartResult.Cart; var result = new CartResult { Cart = cart, Success = true }; var cartLineToChange = cart.Lines.SingleOrDefault(cl => cl.Product != null && cl.ExternalCartLineId == inputModel.ExternalCartLineId); if (inputModel.Quantity == 0 && cartLineToChange != null) { result = this.RemoveCartLines(cart, new[] { cartLineToChange }, true); } else if (cartLineToChange != null) { cartLineToChange.Quantity = inputModel.Quantity; var request = new UpdateCartLinesRequest(cart, new[] { cartLineToChange }); request.RefreshCart(true); result = this.CartServiceProvider.UpdateCartLines(request); } if (result.Success && result.Cart != null) { cartCache.AddCartToCache(result.Cart as CommerceCart); } this.AddBasketErrorsToResult(result.Cart as CommerceCart, result); return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart)); }
public ManagerResponse <CartResult, CommerceCart> ChangeLineQuantity(string userId, UpdateCartLineInputModel inputModel) { Assert.ArgumentNotNull(inputModel, nameof(inputModel)); Assert.ArgumentNotNullOrEmpty(inputModel.ExternalCartLineId, nameof(inputModel.ExternalCartLineId)); var cartResult = LoadCartByName(CommerceConstants.CartSettings.DefaultCartName, userId); if (!cartResult.Success || cartResult.Cart == null) { var message = DictionaryPhraseRepository.Current.Get("/System Messages/Cart/Cart Not Found Error", "Could not retrieve the cart for the current user"); cartResult.SystemMessages.Add(new SystemMessage { Message = message }); return(new ManagerResponse <CartResult, CommerceCart>(cartResult, cartResult.Cart as CommerceCart)); } CartCacheHelper.InvalidateCartCache(userId); var cart = cartResult.Cart; var result = new CartResult { Cart = cart, Success = true }; var cartLineToChange = cart.Lines.SingleOrDefault(cl => cl.Product != null && cl.ExternalCartLineId == inputModel.ExternalCartLineId); if (inputModel.Quantity == 0 && cartLineToChange != null) { result = RemoveCartLines(cart, new[] { cartLineToChange }, true); } else if (cartLineToChange != null) { cartLineToChange.Quantity = inputModel.Quantity; var request = new UpdateCartLinesRequest(cart, new[] { cartLineToChange }); RefreshCart(request, true); result = CartServiceProvider.UpdateCartLines(request); } if (result.Success && result.Cart != null) { CartCacheHelper.AddCartToCache(result.Cart as CommerceCart); } AddBasketErrorsToResult(result.Cart as CommerceCart, result); return(new ManagerResponse <CartResult, CommerceCart>(result, result.Cart as CommerceCart)); }
/// <summary> /// Initializes a new instance of the <see cref="UpdateLinesOnCartTest"/> class. /// </summary> public UpdateLinesOnCartTest() { this.visitorId = Guid.NewGuid(); this.lineToUpdate = new CartLine { ExternalCartLineId = "LineId2", Product = new CartProduct { ProductId = "100500", Price = new Price { Amount = 100 } }, Quantity = 12 }; this.cart = new Cart { ExternalId = this.visitorId.ToString(), Lines = new ReadOnlyCollection <CartLine>(new List <CartLine> { new CartLine(), this.lineToUpdate }) }; this.request = new UpdateCartLinesRequest(this.cart, new[] { this.lineToUpdate }); this.result = new CartResult(); this.args = new ServicePipelineArgs(this.request, this.result); this.client = Substitute.For <ICartsServiceChannel>(); var clientFactory = Substitute.For <ServiceClientFactory>(); clientFactory.CreateClient <ICartsServiceChannel>(Arg.Any <string>(), Arg.Any <string>()).Returns(this.client); this.processor = new UpdateLinesOnCart { ClientFactory = clientFactory }; }
public PipelineExecutionResult Execute(IPipelineArgs <UpdateLineItemRequest, UpdateLineItemResponse> subject) { if (subject.Request.Properties.ContainsKey("FromUCommerce")) { if (!(bool)subject.Request.Properties["FromUCommerce"]) { return(PipelineExecutionResult.Success); } } if (subject.Request.Quantity > 0) { var cart = MappingLibrary.MapPurchaseOrderToCart(subject.Request.OrderLine.PurchaseOrder); var cartLine = MappingLibrary.MapOrderLineToCartLine(subject.Request.OrderLine); var cartServiceProvider = new CartServiceProvider(); var request = new UpdateCartLinesRequest(cart, new Collection <CartLine> { cartLine }); request.Properties["FromUCommerce"] = true; cartServiceProvider.UpdateCartLines(request); } return(PipelineExecutionResult.Success); }
/// <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); }
/// <summary> /// Changes the line quantity. /// </summary> /// <param name="storefront">The storefront.</param> /// <param name="visitorContext">The visitor context.</param> /// <param name="inputModel">The input model.</param> /// <returns> /// The manager response where the modified CommerceCart is returned in the Result. /// </returns> public virtual ManagerResponse<CartResult, CommerceCart> ChangeLineQuantity([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] UpdateCartLineInputModel inputModel) { Assert.ArgumentNotNull(inputModel, "inputModel"); Assert.ArgumentNotNullOrEmpty(inputModel.ExternalCartLineId, "inputModel.ExternalCartLineId"); var cartResult = this.LoadCartByName(storefront.ShopName, storefront.DefaultCartName, visitorContext.UserId); 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); } var cartCache = CommerceTypeLoader.CreateInstance<CartCacheHelper>(); cartCache.InvalidateCartCache(visitorContext.GetCustomerId()); // We remove the curly brackets from the JSON for the lineitem id. We need to add them back. inputModel.ExternalCartLineId = Guid.Parse(inputModel.ExternalCartLineId).ToString("B"); var cart = cartResult.Cart; var result = new CartResult { Cart = cart, Success = true }; var cartLineToChange = cart.Lines.SingleOrDefault(cl => cl.Product != null && cl.ExternalCartLineId == inputModel.ExternalCartLineId); if (inputModel.Quantity == 0 && cartLineToChange != null) { result = this.RemoveCartLines(cart, new[] { cartLineToChange }, true); } else if (cartLineToChange != null) { cartLineToChange.Quantity = inputModel.Quantity; var request = new UpdateCartLinesRequest(cart, new[] { cartLineToChange }); request.RefreshCart(true); result = this.CartServiceProvider.UpdateCartLines(request); } if (result.Success && result.Cart != null) { cartCache.AddCartToCache(result.Cart as CommerceCart); } this.AddBasketErrorsToResult(result.Cart as CommerceCart, result); return new ManagerResponse<CartResult, CommerceCart>(result, result.Cart as CommerceCart); }