public IActionResult Index() { FlowerCart cart = null; if (User.Identity.IsAuthenticated) { var currentUser = _userManager.GetUserAsync(User).Result; cart = _context.FlowerCarts.Include(x => x.FlowerCartProducts).ThenInclude(x => x.FlowerProduct).Single(x => x.ApplicationUserID == currentUser.Id); } else if (Request.Cookies.ContainsKey("cart_id")) { int existingCartID = int.Parse(Request.Cookies["cart_id"]); cart = _context.FlowerCarts.Include(x => x.FlowerCartProducts).ThenInclude(x => x.FlowerProduct).FirstOrDefault(x => x.ID == existingCartID); } else { cart = new FlowerCart(); } return(View(cart)); }
public async Task <IActionResult> Remove(int id, int quantity) { FlowerCart cart = null; if (User.Identity.IsAuthenticated) { var currentUser = await _userManager.GetUserAsync(User); cart = await _context.FlowerCarts.Include(x => x.FlowerCartProducts).FirstOrDefaultAsync(x => x.ApplicationUserID == currentUser.Id); } else { if (Request.Cookies.ContainsKey("cart_id")) { int existingCartID = int.Parse(Request.Cookies["cart_id"]); cart = await _context.FlowerCarts.Include(x => x.FlowerCartProducts).FirstOrDefaultAsync(x => x.ID == existingCartID); cart.DateLastModified = DateTime.Now; } } FlowerCartProduct product = cart.FlowerCartProducts.FirstOrDefault(x => x.ID == id); _context.Remove(product); product.Quantity -= quantity; product.DateLastModified = DateTime.Now; await _context.SaveChangesAsync(); if (!User.Identity.IsAuthenticated) { //At the end of this page, always set the cookie. This might just overwrite the old cookie! Response.Cookies.Append("cart_id", cart.ID.ToString(), new CookieOptions { Expires = DateTime.Now.AddYears(1) }); } return(RedirectToAction("Index", "Cart")); }
public async Task <IActionResult> Index(CheckoutModel model, string nonce) { if (ModelState.IsValid) { FlowerOrder order = new FlowerOrder { City = model.City, State = model.State, Email = model.Email, StreetAddress = model.StreetAddress, ZipCode = model.ZipCode, DateCreated = DateTime.Now, DateLastModified = DateTime.Now }; FlowerCart cart = null; if (User.Identity.IsAuthenticated) { var currentUser = _userManager.GetUserAsync(User).Result; cart = _context.FlowerCarts.Include(x => x.FlowerCartProducts).ThenInclude(x => x.FlowerProduct).Single(x => x.ApplicationUserID == currentUser.Id); } else if (Request.Cookies.ContainsKey("cart_id")) { int existingCartID = int.Parse(Request.Cookies["cart_id"]); cart = _context.FlowerCarts.Include(x => x.FlowerCartProducts).ThenInclude(x => x.FlowerProduct).FirstOrDefault(x => x.ID == existingCartID); } foreach (var cartItem in cart.FlowerCartProducts) { order.FlowerOrderProducts.Add(new FlowerOrderProduct { DateCreated = DateTime.Now, DateLastModified = DateTime.Now, Quantity = cartItem.Quantity ?? 1, ProductID = cartItem.ID, ProductDescription = cartItem.FlowerProduct.Description, ProductName = cartItem.FlowerProduct.Name, ProductPrice = cartItem.FlowerProduct.Price ?? 0 }); } _context.FlowerCartProducts.RemoveRange(cart.FlowerCartProducts); _context.FlowerCarts.Remove(cart); if (Request.Cookies.ContainsKey("cart_id")) { Response.Cookies.Delete("cart_id"); } _context.FlowerOrders.Add(order); _context.SaveChanges(); //await _braintreeGateway.Transaction.SaleAsync(new TransactionRequest //{ // Amount = (decimal)order.FlowerOrderProducts.Sum(x => x.Quantity * x.ProductPrice), //You can also do 1m here // CreditCard = new TransactionCreditCardRequest // { // CardholderName = "Test Cardholder", // CVV = "123", // ExpirationMonth = DateTime.Now.AddMonths(1).ToString("MM"), // ExpirationYear = DateTime.Now.AddMonths(1).ToString("yyyy"), // Number = "4111111111111111" // } //}); Customer c = null; var csr = new CustomerSearchRequest(); csr.Email.Is(model.Email); var customerSearchResult = await _braintreeGateway.Customer.SearchAsync(csr); if (customerSearchResult.Ids.Any()) { c = customerSearchResult.FirstItem; } else { var cusResult = await _braintreeGateway.Customer.CreateAsync(new CustomerRequest { Email = model.Email }); c = cusResult.Target; } var card = await _braintreeGateway.PaymentMethod.CreateAsync(new PaymentMethodRequest { PaymentMethodNonce = nonce, CustomerId = c.Id }); if (card.IsSuccess()) { var result = await _braintreeGateway.Transaction.SaleAsync(new TransactionRequest { Amount = (decimal)order.FlowerOrderProducts.Sum(x => x.Quantity *x.ProductPrice), PaymentMethodToken = card.Target.Token }); await _emailSender.SendEmailAsync(model.Email, "Your order " + order.ID, "Thanks for ordering! You bought : " + String.Join(",", order.FlowerOrderProducts.Select(x => x.ProductName))); //TODO: Save this information to the database so we can ship the order return(RedirectToAction("Index", "Receipt", new { id = order.ID })); } else { ModelState.AddModelError("CreditCard", "Problem with credit card"); } } //TODO: we have an error! Redisplay the form! return(View()); }