// GET: public ActionResult Index(int?memberId, int?ccgId, int?dateRangeFilter = (int)DateRangeFilter.TwoWeeks, int?sortOption = (int)ContactsSort.DateDescending, int?page = 1, int?itemsPerPage = 10, bool getAll = false, string query = null) { // Cast int passed by route to an enum var dateFilter = dateRangeFilter != null ? (DateRangeFilter)dateRangeFilter : DateRangeFilter.TwoWeeks; var contactsSort = sortOption == null ? ContactsSort.DateDescending : (ContactsSort)sortOption; #region Set params to pass to view var prayerRequestsList = new PrayerRequestListViewModel { Params = new ActionMethodParams { MemberId = memberId, CCGId = ccgId, ItemsPerPage = itemsPerPage, Page = page, GetAll = getAll, DateRangeFilter = dateFilter, Query = query, ContactsSort = contactsSort } }; #endregion // Get principal user obj var user = unitOfWork.AppUserRepository.FindUserByEmail(User.Identity.Name); if (memberId != null) { var member = unitOfWork.MemberRepository.FindMemberById(memberId); ViewBag.MemberName = $"{member.FirstName} {member.LastName}"; } DateTime dateTimeOffset; _service.GetOffsetDate(dateFilter, out dateTimeOffset); List <ContactRecord> prayerRequests; // determine if user is leadership, pastor or admin AppUserRole[] roles = new AppUserRole[] { AppUserRole.Admin, AppUserRole.DeaconLeadership, AppUserRole.Pastor }; // get all if user is admin, leadership, or pastor getAll = AuthHelper.IsInRole(User.Identity.Name, roles); // not leadership so only get prayer requests within ccg if (!getAll && ccgId == null) { ccgId = user.CcgId; } prayerRequests = _service.GetPrayerRequests(memberId, dateTimeOffset, ccgId, getAll, user, query).ToList(); // Sort prayer requests prayerRequests = _service.SortContactRecords(contactsSort, prayerRequests).ToList(); // Used to check permission to edit in the view prayerRequestsList.Params.UserId = user.Id; var prayerRequestsVM = Mapper.Map <IList <PrayerRequestViewModel> >(prayerRequests); prayerRequestsList.PrayerRequests = prayerRequestsVM.ToPagedList(page ?? 1, itemsPerPage ?? 10); // Truncates the subject and comments // Keeps comments private if marked as such _service.TruncateTextAndKeepPrivate(prayerRequestsList.PrayerRequests, user.Id); // Get CCGs for filter menu var ccgs = unitOfWork.CCGRepository.FindAll().ToList(); // Add 'All CCGs' option to menu _ccgService.SetCCGViewName(ccgs); ccgs.Insert(0, new CCG { Id = -1, CCGName = "All CCGs" }); prayerRequestsList.CCGs = new SelectList(ccgs, "Id", "CcgName"); if (ccgId != null && ccgId != -1) { var ccg = unitOfWork.CCGRepository.Find(g => g.Id == ccgId); prayerRequestsList.CcgName = ccg.CCGName; } return(View(prayerRequestsList)); }