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