public ActionResult Index(PaymentRequestSearchModel model) { const int RecordsPerPage = 20; var pageIndex = model.Page ?? 1; var currentUser = manager.FindById(User.Identity.GetUserId()); var results = (from x in db.PaymentRequests select x); bool isDirOrAdmin = manager.IsInRole(currentUser.Id, SalaryRoles.Directors) || manager.IsInRole(currentUser.Id, SalaryRoles.Administrators); if (manager.IsInRole(currentUser.Id, SalaryRoles.Managers) && !isDirOrAdmin) { results = results.Where(x => currentUser.Id == (x.Project.Department.Boss != null ? x.Project.Department.Boss.Id : "nouser")); } else if (manager.IsInRole(currentUser.Id, SalaryRoles.Assistant) && !isDirOrAdmin) { results = results.Where(x => currentUser.Id == (x.Project.Department.Assistant != null ? x.Project.Department.Assistant.Id : "nouser")); } else if (manager.IsInRole(currentUser.Id, SalaryRoles.Managers) && manager.IsInRole(currentUser.Id, SalaryRoles.Assistant) && !isDirOrAdmin) { var r1 = results.Where(x => currentUser.Id == (x.Project.Department.Boss != null ? x.Project.Department.Boss.Id : "nouser")); var r2 = results.Where(x => currentUser.Id == (x.Project.Department.Assistant != null ? x.Project.Department.Assistant.Id : "nouser")); results = r1.Concat(r2); } if (model.SelectedStates == null) { if (Request.Cookies["SelectedStates"] == null) { if (manager.IsInRole(currentUser.Id, "Administrators")) { model.SelectedStates = new PaymentRequestState[1] { PaymentRequestState.Confirmed } } ; if (manager.IsInRole(currentUser.Id, "Directors")) { model.SelectedStates = new PaymentRequestState[1] { PaymentRequestState.WaitConfirm } } ; } else { Object obj = JsonConvert.DeserializeObject(Request.Cookies["SelectedStates"].Value); model.SelectedStates = ((IEnumerable)obj).Cast <object>().Select(x => PaymentRequest.FromString(x.ToString())).ToArray(); } } if (model.SelectedStates != null) { Response.Cookies.Add(new HttpCookie("SelectedStates", JsonConvert.SerializeObject(model.SelectedStates))); } if (model.SelectedStates != null) { results = results.Where(x => model.SelectedStates.Contains(x.RequestState)); } if (model.Project != null) { results = results.Where(x => x.Project.ProjectId == model.Project); } if (model.DateTo != null) { results = results.Where(x => x.WhenCreated <= model.DateTo); } if (model.DateFrom != null) { results = results.Where(x => x.WhenCreated >= model.DateFrom); } ViewBag.Projects = results.Select(x => x.Project).Distinct().ToList(); model.SearchResults = results.ToList().ToPagedList(pageIndex, RecordsPerPage); model.Comments.Clear(); foreach (var it in model.SearchResults) { int cnt = db.RequestHistories.Where(x => x.Request.PaymentRequestId == it.PaymentRequestId).ToList().Count; if (cnt > 0) { model.Comments.Add(it.PaymentRequestId, null); } } return(View(model)); }