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)); }
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)); }