public async Task <IActionResult> Create([Bind("ID,Name,Description,Price,Image")] Product product)
        {
            if (ModelState.IsValid)
            {
                _context.Add(product);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(product));
        }
Esempio n. 2
0
        public async Task <IActionResult> Index(CheckoutViewModel model)
        {
            await GetCurrentCart(model);

            if (ModelState.IsValid)
            {
                Order newOrder = new Order
                {
                    TrackingNumber = Guid.NewGuid().ToString(),
                    OrderDate      = DateTime.Now,
                    OrderItems     = model.Cart.CartItems.Select(x => new OrderItem
                    {
                        ProductID    = x.Product.ID,
                        ProductName  = x.Product.Name,
                        ProductPrice = (x.Product.Price ?? 0),
                        Quantity     = x.Quantity
                    }).ToArray(),
                    ShippingAddress    = model.ShippingAddressLine1,
                    ShippingCountry    = model.ShippingCountry,
                    ContactEmail       = model.ContactEmail,
                    ContactPhoneNumber = model.ContactPhoneNumber,
                    ShippingLocale     = model.ShippingLocale,
                    ShippingPostalCode = model.ShippingPostalCode,
                    ShippingRegion     = model.ShippingRegion
                };

                TransactionRequest transaction = new TransactionRequest
                {
                    //Amount = 1,
                    Amount     = model.Cart.CartItems.Sum(x => x.Quantity * (x.Product.Price ?? 0)),
                    CreditCard = new TransactionCreditCardRequest
                    {
                        Number          = model.BillingCardNumber,
                        CardholderName  = model.BillingNameOnCard,
                        CVV             = model.BillingCardVerificationValue,
                        ExpirationMonth = model.BillingCardExpirationMonth.ToString().PadLeft(2, '0'),
                        ExpirationYear  = model.BillingCardExpirationYear.ToString()
                    }
                };
                var transactionResult = await _brainTreeGateway.Transaction.SaleAsync(transaction);

                if (transactionResult.IsSuccess())
                {
                    _donutStoreDbContext.Orders.Add(newOrder);
                    _donutStoreDbContext.CartItems.RemoveRange(model.Cart.CartItems);
                    _donutStoreDbContext.Carts.Remove(model.Cart);
                    await _donutStoreDbContext.SaveChangesAsync();

                    //Try to checkout
                    Response.Cookies.Delete("cartId");
                    return(RedirectToAction("Index", "Receipt", new { id = newOrder.TrackingNumber }));
                }
                for (int i = 0; i < transactionResult.Errors.Count; i++)
                {
                    ModelState.AddModelError("BillingCardNumber" + i, transactionResult.Errors.All()[i].Message);
                }
            }


            return(View(model));
        }