public async Task <IActionResult> SingleSummary(int id, int count) { if (id == null) { return(NotFound()); } else { SingleSummaryViewModel vm = new SingleSummaryViewModel() { MenuItem = await _db.MenuItem.Where(m => m.Id == id).FirstOrDefaultAsync(), Count = count, Order = new Models.Order() }; var claimsIdentity = (ClaimsIdentity)User.Identity; var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); ApplicationUser applicationUser = await _db.ApplicationUser.Where(c => c.Id == claim.Value).FirstOrDefaultAsync(); vm.Order.OrderTotalOriginal = vm.MenuItem.Price; vm.Order.PickupName = applicationUser.Name; vm.Order.PickupLastName = applicationUser.LastName; vm.Order.PhoneNumber = applicationUser.PhoneNumber; vm.Order.PickUpTime = DateTime.Now; vm.Order.OrderTotal = vm.Order.OrderTotalOriginal * count; return(View(vm)); } }
public async Task <IActionResult> SingleSummary(string stripeToken, SingleSummaryViewModel model) { var claimsIdentity = (ClaimsIdentity)User.Identity; var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier); model.Order.PaymentStatus = SD.PaymentStatusPending; model.Order.OrderDate = DateTime.Now; model.Order.UserId = claim.Value; model.Order.Status = SD.PaymentStatusPending; model.Order.PickUpTime = Convert.ToDateTime(detailCart.Order.PickUpDate.ToShortDateString() + " " + detailCart.Order.PickUpTime.ToShortTimeString()); _db.Order.Add(model.Order); await _db.SaveChangesAsync(); var menuItem = await _db.MenuItem.Where(m => m.Id == model.MenuItem.Id).FirstOrDefaultAsync(); OrderDetails orderDetails = new OrderDetails { MenuItemId = menuItem.Id, OrderId = model.Order.Id, Description = menuItem.Description, Name = menuItem.Name, Price = menuItem.Price, Count = model.Count }; model.Order.OrderTotalOriginal += orderDetails.Count * orderDetails.Price; _db.OrderDetails.Add(orderDetails); await _db.SaveChangesAsync(); var options = new ChargeCreateOptions { Amount = Convert.ToInt32(model.Order.OrderTotal * 100), Currency = "eur", Description = "Order ID : " + model.Order.Id, Source = stripeToken }; var service = new ChargeService(); Charge charge = service.Create(options); if (charge.BalanceTransactionId == null) { model.Order.PaymentStatus = SD.PaymentStatusRejected; } else { model.Order.TransactionId = charge.BalanceTransactionId; } if (charge.Status.ToLower() == "succeeded") { await _emailSender.SendEmailAsync(_db.Users.Where(u => u.Id == claim.Value).FirstOrDefault().Email, "Ogani - Order Created " + model.Order.Id.ToString(), "Order has been submitted successfully."); model.Order.PaymentStatus = SD.PaymentStatusApproved; model.Order.Status = SD.StatusSubmitted; } else { model.Order.PaymentStatus = SD.PaymentStatusRejected; } await _db.SaveChangesAsync(); return(RedirectToAction("Confirm", "Order", new { id = model.Order.Id })); }