public async Task<IActionResult> RemoveFromCart( int id, CancellationToken requestAborted) { // Retrieve the current user's shopping cart var cart = ShoppingCart.GetCart(_db, HttpContext); // Get the name of the album to display confirmation var cartItem = await _db.CartItems .Where(item => item.CartItemId == id) .Include(c => c.Product) .SingleOrDefaultAsync(); string message; int itemCount; if (cartItem != null) { // Remove from cart itemCount = cart.RemoveFromCart(id); await _db.SaveChangesAsync(requestAborted); string removed = (itemCount > 0) ? " 1 copy of " : string.Empty; message = removed + cartItem.Product.Title + " has been removed from your shopping cart."; } else { itemCount = 0; message = "Could not find this item, nothing has been removed from your shopping cart."; } // Display the confirmation message var results = new ShoppingCartRemoveViewModel { Message = message, CartTotal = cart.GetTotal().ToString(), CartCount = cart.GetCount(), ItemCount = itemCount, DeleteId = id }; return Json(results); }
public async Task<IActionResult> RemoveFromCart(int id) { var formParameters = await Context.Request.ReadFormAsync(); var requestVerification = formParameters["RequestVerificationToken"]; string cookieToken = null; string formToken = null; if (!string.IsNullOrWhiteSpace(requestVerification)) { var tokens = requestVerification.Split(':'); if (tokens != null && tokens.Length == 2) { cookieToken = tokens[0]; formToken = tokens[1]; } } var antiForgery = Context.RequestServices.GetService<AntiForgery>(); antiForgery.Validate(Context, new AntiForgeryTokenSet(formToken, cookieToken)); // Start timer for save process telemetry var startTime = System.DateTime.Now; // Retrieve the current user's shopping cart var cart = ShoppingCart.GetCart(_db, Context); // Get the name of the product to display confirmation // TODO [EF] Turn into one query once query of related data is enabled int productId = _db.CartItems.Single(item => item.CartItemId == id).ProductId; string productName = _db.Products.Single(a => a.ProductId == productId).Title; // Remove from cart int itemCount = cart.RemoveFromCart(id); await _db.SaveChangesAsync(Context.RequestAborted); string removed = (itemCount > 0) ? " 1 copy of " : string.Empty; // Trace remove process var measurements = new Dictionary<string, double>() { {"ElapsedMilliseconds", System.DateTime.Now.Subtract(startTime).TotalMilliseconds } }; _telemetry.TrackEvent("Cart/Server/Remove", null, measurements); // Display the confirmation message var items = cart.GetCartItems(); var itemsCount = items.Sum(x => x.Count); var subTotal = items.Sum(x => x.Count * x.Product.Price); var shipping = itemsCount * (decimal)5.00; var tax = (subTotal + shipping) * (decimal)0.05; var total = subTotal + shipping + tax; var results = new ShoppingCartRemoveViewModel { Message = removed + productName + " has been removed from your shopping cart.", CartSubTotal = subTotal.ToString("C"), CartShipping = shipping.ToString("C"), CartTax = tax.ToString("C"), CartTotal = total.ToString("C"), CartCount = itemsCount, ItemCount = itemCount, DeleteId = id }; return Json(results); }
public async Task<ActionResult> RemoveFromCart([FromUri] int id) { // Start timer for save process telemetry var startTime = DateTime.Now; // Retrieve the current user's shopping cart var cart = ShoppingCart.GetCart(db, HttpContext); // Get the name of the product to display confirmation var cartItem = db.CartItems.Include("Product").Single(item => item.CartItemId == id); string productName = cartItem.Product.Title; // Remove from cart int itemCount = cart.RemoveFromCart(id); await db.SaveChangesAsync(CancellationToken.None); string removed = (itemCount > 0) ? " 1 copy of " : string.Empty; // Trace remove process var measurements = new Dictionary<string, double>() { {"ElapsedMilliseconds", DateTime.Now.Subtract(startTime).TotalMilliseconds } }; telemetry.TrackEvent("Cart/Server/Remove", null, measurements); // Display the confirmation message var items = cart.GetCartItems(); var itemsCount = items.Sum(x => x.Count); var subTotal = items.Sum(x => x.Count * x.Product.Price); var shipping = itemsCount * (decimal)5.00; var tax = (subTotal + shipping) * (decimal)0.05; var total = subTotal + shipping + tax; var results = new ShoppingCartRemoveViewModel { Message = removed + productName + " has been removed from your shopping cart.", CartSubTotal = subTotal.ToString("C"), CartShipping = shipping.ToString("C"), CartTax = tax.ToString("C"), CartTotal = total.ToString("C"), CartCount = itemsCount, ItemCount = itemCount, DeleteId = id }; return Json(results); }