示例#1
0
        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));
        }
示例#2
0
        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"));
        }
示例#3
0
        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());
        }