public async Task <IActionResult> AddToCartResult(long cartItemId) { var currentUser = await _workContext.GetCurrentUser(); var cartItem = _cartItemRepository.Query() .Include(x => x.Product).ThenInclude(x => x.ThumbnailImage) .Include(x => x.ProductVariation) .First(x => x.Id == cartItemId); var model = new AddToCartResult { ProductName = cartItem.Product.Name, ProductImage = _mediaService.GetThumbnailUrl(cartItem.Product.ThumbnailImage), ProductPrice = cartItem.ProductPrice, Quantity = cartItem.Quantity }; if (cartItem.ProductVariation != null) { model.VariationName = cartItem.ProductVariation.Name; } var cartItems = _cartService.GetCartItems(currentUser.Id); model.CartItemCount = cartItems.Count; model.CartAmount = cartItems.Sum(x => x.Quantity * x.ProductPrice); return(PartialView(model)); }
private static void AddValidationMessagesToResult(AddToCartResult result, ILineItem lineItem, Dictionary <ILineItem, List <ValidationIssue> > validationIssues, bool isHasAddedItem) { foreach (var validationIssue in validationIssues) { var warning = new StringBuilder(); warning.Append(string.Format("Line Item with code {0} ", lineItem.Code)); validationIssue.Value.Aggregate(warning, (current, issue) => current.Append(issue).Append(", ")); result.ValidationMessages.Add(warning.ToString().TrimEnd(',', ' ')); } if (!validationIssues.HasItemBeenRemoved(lineItem) && isHasAddedItem) { result.EntriesAddedToCart = true; } }
public async Task <AddToCartResult> AddToCart(NewCartItem item) { var mailingList = await mailingService.GetMailingList(item.ContainerId); var addedItem = shoppingCart.AddCartItem(item, mailingList); var result = new AddToCartResult { CartPreview = ItemsPreview(), Confirmation = new RequestResult { AlertMessage = resources.GetResourceString("Kadena.Product.ItemsAddedToCart") } }; return(result); }
public async Task <IActionResult> AddToCartResult(long productId) { //recuperamos los datos de Previsualizacion del carrito. var carrito = RecuperaTotalCarrito(GetIP(), GetSession()); // var currentUser = await _workContext.GetCurrentUser(); // var cart = await _cartService.GetActiveCartDetails(currentUser.Id); var model = new AddToCartResult(_currencyService) { CartItemCount = int.Parse(carrito.totallines), CartAmount = decimal.Parse(carrito.totaltopay.Replace(".", ",")) }; var linea = RecuperaLineasCarrito(GetIP(), GetSession(), carrito.totallines); model.ProductName = linea.result.description; model.ProductImage = linea.result.imagesmall; model.ProductPrice = decimal.Parse(linea.result.pricewithtax.Replace(".", ",")); model.Quantity = linea.result.quantity; string[] cntidad = linea.result.quantity.Split("."); int p = int.Parse(cntidad[0].ToString()); //ponemos 1 pode defecto mientras no completamos el siguiente paso int t = 0; bool s = int.TryParse(linea.result.quantity.Replace(".", ","), out t); decimal d = decimal.Parse(linea.result.quantity.Replace(".", ",")); //model.Quantity = p;//Int32.Parse(d.ToString()); ////////tenemos que recuperar los datos de la ultima linea añadida //////var articulo = RecuperaArtículo(GetIP(), GetSession(), productId); //////model.ProductName = articulo.result.description; //////model.ProductImage = articulo.result.imagesmall; //////model.ProductPrice = decimal.Parse(articulo.result.pricewithtax.Replace(".", ",")); ////////ponemos 1 pode defecto mientras no completamos el siguiente paso //////model.Quantity = 1; //leemos la cantidad de la ultima linea //model.Quantity = addedProduct.Quantity; // codigo origen //var addedProduct = cart.Items.First(x => x.ProductId == productId); //model.ProductName = addedProduct.ProductName; //model.ProductImage = addedProduct.ProductImage; //model.ProductPrice = addedProduct.ProductPrice; //model.Quantity = addedProduct.Quantity; return(PartialView(model)); }
public override object MutateAndGetPayload(MutationInputs inputs, ResolveFieldContext <object> context) { var cart = _cartService.LoadOrCreateCart(_cartService.DefaultCartName); AddToCartResult result = _cartService.AddToCart(cart, inputs.Get <string>("code"), inputs.Get <decimal>("quantity", 1m)); if (!result.EntriesAddedToCart) { context.Errors.AddRange(result.ValidationMessages.Select(m => new ExecutionError(m))); return(null); } _orderRepository.Save(cart); _recommendationService.TrackCartAsync(_httpContextBase.Invoke()).Wait(); LargeCartViewModel largeCartViewModel = _cartViewModelFactory.CreateLargeCartViewModel(cart); return(new { Cart = largeCartViewModel }); }
public async Task <IActionResult> AddToCartResult(long productId) { var currentUser = await _workContext.GetCurrentUser(); var cart = await _cartService.GetCart(currentUser.Id); var model = new AddToCartResult { CartItemCount = cart.Items.Count, CartAmount = cart.SubTotal }; var addedProduct = cart.Items.First(x => x.ProductId == productId); model.ProductName = addedProduct.ProductName; model.ProductImage = addedProduct.ProductImage; model.ProductPrice = addedProduct.ProductPrice; model.Quantity = addedProduct.Quantity; return(PartialView(model)); }
public async Task <JsonResult> AddToCart(RequestParamsToCart param) // only use Code { if (WishList.Cart == null) { _wishlist = new CartWithValidationIssues { Cart = _cartService.LoadOrCreateCart(_cartService.DefaultWishListName), ValidationIssues = new Dictionary <ILineItem, List <ValidationIssue> >() }; } // return 0 if the variant already exist in wishlist // return 1 if added susscessfully var result = new AddToCartResult(); var allLineItems = WishList.Cart.GetAllLineItems(); var contentLink = _referenceConverter.GetContentLink(param.Code); var message = ""; var productName = ""; var entryLink = _referenceConverter.GetContentLink(param.Code); productName = _contentLoader.Get <EntryContentBase>(entryLink).DisplayName; if (_contentLoader.Get <EntryContentBase>(contentLink) is GenericBundle bundle) // Add bundle { var variantCodes = _contentLoader .GetItems(bundle.GetEntries(_relationRepository), _languageResolver.GetPreferredCulture()) .OfType <VariationContent>() .Where(v => v.IsAvailableInCurrentMarket(_currentMarket) && !_filterPublished.ShouldFilter(v)) .Select(x => x.Code); var allLineItemCodes = allLineItems.Select(x => x.Code); var allNewCodes = variantCodes.Where(x => !allLineItemCodes.Contains(x)); if (!allNewCodes.Any()) { return(Json(new ChangeCartJsonResult { StatusCode = 0, Message = productName + " already exist in the wishlist." })); } else { foreach (var v in allNewCodes) { result = _cartService.AddToCart(WishList.Cart, new RequestParamsToCart { Code = v, Quantity = 1, Store = "delivery", SelectedStore = "" }); if (result.ValidationMessages.Count > 0) { message += string.Join("\n", result.ValidationMessages); } } } } else // Add variant { if (allLineItems.Any(item => item.Code.Equals(param.Code, StringComparison.OrdinalIgnoreCase))) { return(Json(new ChangeCartJsonResult { StatusCode = 0, Message = productName + " already exist in the wishlist." })); } result = _cartService.AddToCart(WishList.Cart, new RequestParamsToCart { Code = param.Code, Quantity = 1, Store = "delivery", SelectedStore = "" }); } if (result.EntriesAddedToCart) { _orderRepository.Save(WishList.Cart); await _trackingService.TrackWishlist(HttpContext); return(Json(new ChangeCartJsonResult { StatusCode = 1, CountItems = (int)WishList.Cart.GetAllLineItems().Sum(x => x.Quantity), Message = productName + " is added to the wishlist successfully.\n" + message })); } return(Json(new ChangeCartJsonResult { StatusCode = -1, Message = result.GetComposedValidationMessage() })); }
private AddToCartResult AddItemToShipment(ICart cart, EntryContentBase entryContent, decimal quantity, int shipmentId, string deliveryMethodId, string warehouseCode) { var result = new AddToCartResult(); IWarehouse warehouse = null; if (!string.IsNullOrEmpty(warehouseCode)) { warehouse = _warehouseRepository.Get(warehouseCode); } if (entryContent is BundleContent) { foreach (var relation in _relationRepository.GetChildren <BundleEntry>(entryContent.ContentLink)) { var entry = _contentLoader.Get <EntryContentBase>(relation.Child); var recursiveResult = AddItemToShipment(cart, entry, (relation.Quantity ?? 1) * quantity, shipmentId, deliveryMethodId, warehouseCode); if (recursiveResult.EntriesAddedToCart) { result.EntriesAddedToCart = true; } foreach (var message in recursiveResult.ValidationMessages) { result.ValidationMessages.Add(message); } } return(result); } var form = cart.GetFirstForm(); if (form == null) { form = _orderGroupFactory.CreateOrderForm(cart); form.Name = cart.Name; cart.Forms.Add(form); } var shipment = form.Shipments.FirstOrDefault(x => x.ShipmentId == shipmentId); if (shipment == null) { shipment = _orderGroupFactory.CreateShipment(cart); shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = new Guid(deliveryMethodId); shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); cart.GetFirstForm().Shipments.Add(shipment); } var lineItem = shipment.LineItems.FirstOrDefault(x => x.Code == entryContent.Code); decimal originalLineItemQuantity = 0; if (lineItem == null) { lineItem = cart.CreateLineItem(entryContent.Code, _orderGroupFactory); lineItem.DisplayName = entryContent.DisplayName; lineItem.Quantity = quantity; cart.AddLineItem(shipment, lineItem); } else { originalLineItemQuantity = lineItem.Quantity; cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } var validationIssues = ValidateCart(cart); var newLineItem = shipment.LineItems.FirstOrDefault(x => x.Code == entryContent.Code); var isAdded = (newLineItem != null ? newLineItem.Quantity : 0) - originalLineItemQuantity > 0; AddValidationMessagesToResult(result, lineItem, validationIssues, isAdded); return(result); }
public AddToCartResult AddToCart(ICart cart, EntryContentBase entryContent, decimal quantity, string deliveryMethod, string warehouseCode, List <string> dynamicVariantOptionCodes) { var result = new AddToCartResult(); var contact = PrincipalInfo.CurrentPrincipal.GetCustomerContact(); if (contact?.OwnerId != null) { var org = cart.GetString("OwnerOrg"); if (string.IsNullOrEmpty(org)) { cart.Properties["OwnerOrg"] = contact.OwnerId.Value.ToString().ToLower(); } } IWarehouse warehouse = null; if (deliveryMethod.Equals("instore") && !string.IsNullOrEmpty(warehouseCode)) { warehouse = _warehouseRepository.Get(warehouseCode); } if (entryContent is BundleContent) { foreach (var relation in _relationRepository.GetChildren <BundleEntry>(entryContent.ContentLink)) { var entry = _contentLoader.Get <EntryContentBase>(relation.Child); var recursiveResult = AddToCart(cart, entry, (relation.Quantity ?? 1) * quantity, deliveryMethod, warehouseCode, dynamicVariantOptionCodes); if (recursiveResult.EntriesAddedToCart) { result.EntriesAddedToCart = true; } foreach (var message in recursiveResult.ValidationMessages) { result.ValidationMessages.Add(message); } } return(result); } var form = cart.GetFirstForm(); if (form == null) { form = _orderGroupFactory.CreateOrderForm(cart); form.Name = cart.Name; cart.Forms.Add(form); } var shipment = cart.GetFirstForm().Shipments.FirstOrDefault(x => string.IsNullOrEmpty(warehouseCode) || (x.WarehouseCode == warehouseCode && x.ShippingMethodId == InStorePickupInfoModel.MethodId)); if (warehouse != null) { if (shipment != null && !shipment.LineItems.Any()) { shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = InStorePickupInfoModel.MethodId; shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); } else { shipment = form.Shipments.FirstOrDefault(x => !string.IsNullOrEmpty(x.WarehouseCode) && x.WarehouseCode.Equals(warehouse.Code)); if (shipment == null) { if (cart.GetFirstShipment().LineItems.Count > 0) { shipment = _orderGroupFactory.CreateShipment(cart); } else { shipment = cart.GetFirstShipment(); } shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = InStorePickupInfoModel.MethodId; shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); if (cart.GetFirstShipment().LineItems.Count > 0) { cart.GetFirstForm().Shipments.Add(shipment); } } } } if (shipment == null) { var cartFirstShipment = cart.GetFirstShipment(); if (cartFirstShipment == null) { shipment = _orderGroupFactory.CreateShipment(cart); cart.GetFirstForm().Shipments.Add(shipment); } else { if (cartFirstShipment.LineItems.Count > 0) { shipment = _orderGroupFactory.CreateShipment(cart); cart.GetFirstForm().Shipments.Add(shipment); } else { shipment = cartFirstShipment; } } } var lineItem = shipment.LineItems.FirstOrDefault(x => x.Code == entryContent.Code); decimal originalLineItemQuantity = 0; if (lineItem == null) { lineItem = cart.CreateLineItem(entryContent.Code, _orderGroupFactory); var lineDisplayName = entryContent.DisplayName; if (dynamicVariantOptionCodes?.Count > 0) { lineItem.Properties[VariantOptionCodesProperty] = string.Join(",", dynamicVariantOptionCodes.OrderBy(x => x)); lineDisplayName += " - " + lineItem.Properties[VariantOptionCodesProperty]; } lineItem.DisplayName = lineDisplayName; lineItem.Quantity = quantity; cart.AddLineItem(shipment, lineItem); } else { if (lineItem.Properties[VariantOptionCodesProperty] != null) { var variantOptionCodesLineItem = lineItem.Properties[VariantOptionCodesProperty].ToString().Split(','); var intersectCodes = variantOptionCodesLineItem.Intersect(dynamicVariantOptionCodes); if (intersectCodes != null && intersectCodes.Any() && intersectCodes.Count() == variantOptionCodesLineItem.Length && intersectCodes.Count() == dynamicVariantOptionCodes.Count) { originalLineItemQuantity = lineItem.Quantity; cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } else { lineItem = cart.CreateLineItem(entryContent.Code, _orderGroupFactory); lineItem.Properties[VariantOptionCodesProperty] = string.Join(",", dynamicVariantOptionCodes.OrderBy(x => x)); lineItem.DisplayName = entryContent.DisplayName + " - " + lineItem.Properties[VariantOptionCodesProperty]; lineItem.Quantity = quantity; cart.AddLineItem(shipment, lineItem); } } else { originalLineItemQuantity = lineItem.Quantity; cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } } var validationIssues = ValidateCart(cart); var newLineItem = shipment.LineItems.FirstOrDefault(x => x.Code == entryContent.Code); var isAdded = (newLineItem != null ? newLineItem.Quantity : 0) - originalLineItemQuantity > 0; AddValidationMessagesToResult(result, lineItem, validationIssues, isAdded); return(result); }
public IActionResult AddToCart(AddToCartItem item) { AddToCartResult result = cartservice.AddToCart(item); return(Ok(result.SessionId)); }
public AddToCartResult AddToCart(ICart cart, EntryContentBase entryContent, decimal quantity, string deliveryMethod, string warehouseCode) { var result = new AddToCartResult(); var contact = PrincipalInfo.CurrentPrincipal.GetCustomerContact(); if (contact?.OwnerId != null) { var org = cart.GetString("OwnerOrg"); if (string.IsNullOrEmpty(org)) { cart.Properties["OwnerOrg"] = contact.OwnerId.Value.ToString().ToLower(); } } IWarehouse warehouse = null; if (deliveryMethod.Equals("instore") && !string.IsNullOrEmpty(warehouseCode)) { warehouse = _warehouseRepository.Get(warehouseCode); } if (entryContent is BundleContent) { foreach (var relation in _relationRepository.GetChildren <BundleEntry>(entryContent.ContentLink)) { var entry = _contentLoader.Get <EntryContentBase>(relation.Child); var recursiveResult = AddToCart(cart, entry, relation.Quantity ?? 1, deliveryMethod, warehouseCode); if (recursiveResult.EntriesAddedToCart) { result.EntriesAddedToCart = true; } foreach (var message in recursiveResult.ValidationMessages) { result.ValidationMessages.Add(message); } } return(result); } var form = cart.GetFirstForm(); if (form == null) { form = _orderGroupFactory.CreateOrderForm(cart); form.Name = cart.Name; cart.Forms.Add(form); } var shipment = cart.GetFirstShipment(); if (warehouse != null) { if (shipment != null && !shipment.LineItems.Any()) { shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = InStorePickupInfoModel.MethodId; shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); } else { shipment = form.Shipments.FirstOrDefault(x => !string.IsNullOrEmpty(x.WarehouseCode) && x.WarehouseCode.Equals(warehouse.Code)); if (shipment == null) { shipment = _orderGroupFactory.CreateShipment(cart); shipment.WarehouseCode = warehouseCode; shipment.ShippingMethodId = InStorePickupInfoModel.MethodId; cart.GetFirstForm().Shipments.Add(shipment); shipment.ShippingAddress = GetOrderAddressFromWarehosue(cart, warehouse); } } } if (shipment == null) { shipment = _orderGroupFactory.CreateShipment(cart); cart.GetFirstForm().Shipments.Add(shipment); } var lineItem = cart.GetAllLineItems().FirstOrDefault(x => x.Code == entryContent.Code); if (lineItem == null) { lineItem = cart.CreateLineItem(entryContent.Code, _orderGroupFactory); lineItem.DisplayName = entryContent.DisplayName; lineItem.Quantity = quantity; cart.AddLineItem(shipment, lineItem); } else { cart.UpdateLineItemQuantity(shipment, lineItem, lineItem.Quantity + quantity); } var validationIssues = ValidateCart(cart); AddValidationMessagesToResult(result, lineItem, validationIssues); return(result); }