public ActionResult Index(string SearchString)
        {
            string currentUser = User.Identity.GetUserId();

            string currentUserEmail = User.Identity.GetUserName();

            var owned  = db.Inventories.Where(s => s.UserId == currentUser).Select(InventoryViewModel.GetInstantiator(currentUser, currentUserEmail));
            var shared = db.Inventories.Where(inv => inv.SharedUsers.Where(e => e.Email == currentUserEmail).Any()).Select(InventoryViewModel.GetInstantiator(currentUser, currentUserEmail));

            if (!String.IsNullOrEmpty(SearchString))
            {
                owned = owned.Where(s => s.Name.ToLower().Contains(SearchString.ToLower()));

                shared = shared.Where(s => s.Name.ToLower().Contains(SearchString.ToLower()));
            }

            return(View(new InventoryListViewModel {
                Owned = owned.ToList(), Shared = shared.ToList()
            }));
        }
        public ActionResult Edit(int?id)
        {
            string currentUser = User.Identity.GetUserId();

            string currentUserEmail = User.Identity.GetUserName();

            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            InventoryViewModel inventory = db.Inventories.Where(e => e.Id == id).Select(InventoryViewModel.GetInstantiator(currentUser, currentUserEmail)).SingleOrDefault();

            if (inventory == null)
            {
                return(HttpNotFound());
            }
            return(View(inventory));
        }
        public ActionResult Open(int id, string searchString, string itemCategory, string itemType, string itemSize)
        {
            string currentUser = User.Identity.GetUserId();

            string currentUserEmail = User.Identity.GetUserName();

            InventoryViewModel inventory = db.Inventories.Include(inv => inv.Items).Where(inv => inv.Id == id && (inv.UserId == currentUser || inv.SharedUsers.Any(s => s.Email == currentUserEmail))).Select(InventoryViewModel.GetInstantiator(currentUser, currentUserEmail)).SingleOrDefault();

            var categories = inventory.Items.Select(e => e.Category).Distinct().OrderBy(e => e);

            ViewBag.itemCategory = new SelectList(categories);

            var types = inventory.Items.Select(e => e.Type).Distinct().OrderBy(e => e);

            ViewBag.itemType = new SelectList(types);

            var size = inventory.Items.Select(e => e.Size == null ? "N/A" : e.Size).Distinct().OrderBy(e => e);

            ViewBag.itemSize = new SelectList(size);

            if (inventory == null || inventory.Permission == null)
            {
                return(HttpNotFound());
            }

            if (!String.IsNullOrEmpty(searchString))
            {
                inventory.Items = inventory.Items.Where(s => s.Name.ToLower().Contains(searchString.ToLower())).ToList();
            }

            if (!string.IsNullOrEmpty(itemCategory))
            {
                inventory.Items = inventory.Items.Where(s => s.Category.Trim().Equals(itemCategory.Trim(), StringComparison.InvariantCultureIgnoreCase)).ToList();
            }
            if (!string.IsNullOrEmpty(itemType))
            {
                inventory.Items = inventory.Items.Where(s => s.Type.Trim().Equals(itemType.Trim(), StringComparison.InvariantCultureIgnoreCase)).ToList();
            }
            if (!string.IsNullOrWhiteSpace(itemSize))
            {
                inventory.Items = inventory.Items.Where(s => itemSize == "N/A" && s.Size == null || s.Size.Trim().Equals(itemSize.Trim(), StringComparison.InvariantCultureIgnoreCase)).ToList();
            }
            return(View(inventory));
        }