public ActionResult FilterAttempts(AttemptFilterView view) { view.Filters.Quiz = cx.Quizzes.Find(view.Filters.Quiz?.Id); view.Filters.Group = cx.Groups.Find(view.Filters.Group?.Id); view.Filters.User = cx.Users.Find(view.Filters.User?.Id); if (view.Command == "Reset") { Session["filters"] = null; return(PartialView(new AttemptFilters() { Page = 1 }.Filter ( cx, cx.Users.Find(UserManager.FindByName(User.Identity.Name).Id) ))); } if (view.Navigation != null || view.Navigation == "") { if (view.Navigation == "Back") { view.Filters.Page--; } else if (view.Navigation == "Next") { view.Filters.Page++; } else if (Int32.TryParse(view.Navigation, out int page)) { view.Filters.Page = page; } else { throw new Exception("Navigation is initialized wrong"); } } else { view.Filters.Page = 1; } Session["filters"] = view.Filters; //my attempts окрема (checkbox) ModelState.Clear(); return(PartialView( view.Filters.Filter( cx, cx.Users.Find(UserManager.FindByName(User.Identity.Name).Id) ))); }
public AttemptFilterView Filter(QuizContext cx, ApplicationUser user) { CurrentUser = user; var users = new HashSet <ApplicationUser>(); foreach (var group in cx.Groups.Where(x => x.Creator.Id == user.Id).ToList()) { foreach (var applicationUser in group.ApplicationUsers) { users.Add(applicationUser); } } var userIds = users.Select(x => x.Id).ToList(); var filteringData = cx.QuizAttempts. Where(x => x.User.Id == user.Id || userIds.Contains(user.Id) || x.Quiz.User.Id == user.Id).ToList(); filteringData = filteringData. Where(x => _Filter(x)). ToList(); int pagesCount = 0; int lastPagePushSize = filteringData.Count % PageSize; //last has all size OR Count == 0 if (lastPagePushSize == 0) { pagesCount = filteringData.Count / PageSize; //Count == 0 if (pagesCount == 0) { pagesCount = 1; } else { lastPagePushSize = PageSize; } } else { pagesCount = filteringData.Count / PageSize + 1; } if (Page > pagesCount) { //bag Page = 1; } var data = filteringData.GetRange((Page - 1) * PageSize, Page == pagesCount ? lastPagePushSize : PageSize); //quizzes - my + which i passed var attempts = cx.QuizAttempts.Where(x => x.User.Id == CurrentUser.Id).ToList(); var quizIds = attempts.Select(x => x.Quiz.Id).ToList(); //groups - my + opened!!!!!!!!!!!!!!!!!!!!!!!!!!! var openedIds = user.Groups.Select(x => x.Id).ToList(); var result = new AttemptFilterView() { Filters = this, Data = data, Quizzes = cx.Quizzes.Where(x => x.User.Id == user.Id || quizIds.Contains(x.Id)).ToList(), Groups = cx.Groups.Where(x => x.Creator.Id == user.Id || openedIds.Contains(x.Id)), Users = users, PagesCount = pagesCount }; return(result); }