public async Task <IActionResult> GetOrderHistory(int id)
        {
            var orderDetail = new DetailAndOrderHeaderViewModel {
                OrderHeader = await _dbContext.OrderHeaders.Include(o => o.ApplicationUser)
                              .FirstOrDefaultAsync(o => o.Id == id),
                OrderDetails = await _dbContext.OrderDetails.Include(o => o.MenuItem).Where(o => o.OrderId == id).ToListAsync()
            };

            return(PartialView("_OrderDetailPartialView", orderDetail));
        }
        public async Task <IActionResult> Confirm(int id)
        {
            var claimIdentity = (ClaimsIdentity)User.Identity;
            var userId        = claimIdentity.FindFirst(ClaimTypes.NameIdentifier).Value;
            var viewModel     = new DetailAndOrderHeaderViewModel {
                OrderHeader = await _dbContext.OrderHeaders.Include(o => o.ApplicationUser)
                              .FirstOrDefaultAsync(o => o.Id == id && o.UserId == userId),
                OrderDetails = await _dbContext.OrderDetails.Include(o => o.MenuItem)
                               .Where(o => o.OrderId == id).ToListAsync()
            };
            await _emailSender.SendEmailAsync(viewModel.OrderHeader.ApplicationUser.Email, "Confirm Order",
                                              $"Your order #{viewModel.OrderHeader.Id} has been confirm");

            return(View(viewModel));
        }
        public async Task <IActionResult> OrderHistory(OrderHistoryQueryString queryString)
        {
            var claimIdentity = (ClaimsIdentity)User.Identity;
            var userId        = claimIdentity.FindFirst(ClaimTypes.NameIdentifier).Value;

            var ordersHistory = new List <DetailAndOrderHeaderViewModel>();
            var orders        = await _dbContext.OrderHeaders.Include(o => o.ApplicationUser)
                                .Where(o => o.UserId == userId).ApplySort(queryString.OrderBy).ToListAsync();

            foreach (var order in orders)
            {
                var orderHistory = new DetailAndOrderHeaderViewModel {
                    OrderHeader  = order,
                    OrderDetails = await _dbContext.OrderDetails.Where(o => o.OrderId == order.Id).ToListAsync()
                };
                ordersHistory.Add(orderHistory);
            }


            return(View(PagedList <DetailAndOrderHeaderViewModel> .Paging(ordersHistory,
                                                                          queryString.PageNum, queryString.PageSize)));
        }