public CartsController(ApplicationDbContext db, UserManager <ApplicationUser> userManager)
        {
            _db          = db;
            _userManager = userManager;

            _makeOrderVm = new MakeOrderVm();
        }
 private async Task <List <ShoppingCartItem> > GetAllShoppingitems(MakeOrderVm makeOrderVm)
 {
     // get all shoppingcartitems for user
     return(await _db.ShoppingCartItems
            .Include(s => s.MenuItem)
            .Where(s => s.ApplicationUserId == makeOrderVm.ApplicationuserId).ToListAsync());
 }
        public async Task <IActionResult> IndexPost(MakeOrderVm makeOrderVm)
        {
            //if (!ModelState.IsValid)
            //    return View(_makeOrderVm);

            Order order = new Order()
            {
                ApplicationUserId = makeOrderVm.ApplicationuserId,
                Orderdate         = DateTime.Now,
                PickUpTime        = makeOrderVm.Order.PickUpTime,
                CouponCode        = makeOrderVm.Order.CouponCode,
                Comments          = makeOrderVm.Order.Comments,
                OrderStatus       = StaticDetails.StatusSubmitted,
                TotalPrice        = makeOrderVm.Order.TotalPrice
            };

            await _db.Orders.AddAsync(order);

            await _db.SaveChangesAsync();

            List <ShoppingCartItem> allShoppingCartItemsForUser = await GetAllShoppingitems(makeOrderVm);

            List <PurchasedOrderItem> purchasedOrderItems = await MappShopItemToPurchasedItem(order, allShoppingCartItemsForUser);

            try
            {
                await _db.PurchasedOrderItems.AddRangeAsync(purchasedOrderItems);

                _db.ShoppingCartItems.RemoveRange(allShoppingCartItemsForUser);

                await _db.SaveChangesAsync();

                HttpContext.Session.SetInt32("CartCount", 0);

                //return RedirectToAction("Index", "Home");

                return(RedirectToAction("Confirm", "Orders", new { orderId = order.Id }));
            }
            catch (Exception ex)
            {
                return(View(_makeOrderVm));

                throw;
            }
        }