/// <summary>
        /// Show order items in cart order
        /// </summary>
        /// <param name="id">member id</param>
        /// <returns>Cart view</returns>
        public ActionResult Cart(int? id)
        {
            //validate user role
            string userId = CurrentUser.Id;
            var member = db.Members.FirstOrDefault(m => m.User.Id == userId);
            if (member == null)
            {
                return RedirectToAction("Index", "Home");
            }

            //validate that the member has a cart
            var exists = db.Orders.Where(m => m.Member.Id == member.Id).Where(d => d.OrderPlacementDate == null).Any();

            TempData["hasAddress"] = db.Addresses.Where(a => a.Member.Id == member.Id).FirstOrDefault();

            if (!exists)
            {
                //empty cart
                TempData["message"] = "Cart is empty";
                return View(Enumerable.Empty<CartViewModel>().ToList());
            }

            //This gets the cart order id
            int orderId = db.Orders.Where(m => m.Member.Id == member.Id).Where(d => d.OrderPlacementDate == null).First().Id;

            //get all gameIds for order Id
            IEnumerable<OrderItem> orderItems = db.OrderItems.Where(o => o.OrderId == orderId);

            List<CartViewModel> cartItems = new List<CartViewModel>();

            foreach (var orderItem in orderItems)
            {
                CartViewModel cvm = new CartViewModel(orderItem, false);
                cartItems.Add(cvm);
            }

            return View(cartItems);
        }
        /// <summary>
        /// Checks the checkboxes (represented in the CartViewModel object as download and hardcopy booleans,
        /// deletes the items, and then checks to see if the cart has any items left, if it does not it deletes
        /// cart (which is an order with no order items at that point)
        /// </summary>
        /// <param name="cart">CartViewModel object</param>
        public void Delete(CartViewModel[] cart)
        {
            //get original order count
            Order originalOrder = db.Orders.Find(cart.First().item.OrderId);

            //check number of items removes
            int itemsRemoved = 0;
            int originalNumberOfItems = originalOrder.OrderItems.Count();

            foreach (var cvm in cart)
            {
                //remove selected items
                if (cvm.remove)
                {
                    itemsRemoved++;
                    OrderItem orderItem = db.OrderItems.Where(g => g.GameId == cvm.item.GameId && g.OrderId == cvm.item.OrderId).First();
                    db.OrderItems.Remove(orderItem);
                    db.SaveChanges();
                }
            }

            db.SaveChanges();

            //if order is now empty
            if (originalNumberOfItems == itemsRemoved)
            {
                //delete the now empty order
                db.Orders.Remove(originalOrder);
                db.SaveChanges();
            }
        }
        public ActionResult AlterCart(CartViewModel[] cart, string submit)
        {
            //validate user role
            string userId = CurrentUser.Id;
            var member = db.Members.FirstOrDefault(m => m.User.Id == userId);
            if (member == null)
            {
                return RedirectToAction("Index", "Home");
            }

            if (cart == null)
            {
                return RedirectToAction("Cart");
            }

            if (submit == "Remove Selected")
            {
                Delete(cart);
            }

            return RedirectToAction("Cart");
        }