public List <ContactRecord> PrayerRequests(int?memberId, int?ccgId, DateRangeFilter dateRange, ContactsSort contactsSort, bool getAll = false, string query = null, CCGAppUser appuser = null) { // Get principal user obj var user = unitOfWork.AppUserRepository.FindUserByEmail(appuser.UserName); DateTime dateTimeOffset; GetOffsetDate(dateRange, 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(appuser.UserName, roles); // not leadership so only get prayer requests within ccg if (!getAll && ccgId == null) { ccgId = user.CcgId; } prayerRequests = GetPrayerRequests(memberId, dateTimeOffset, ccgId, getAll, user, query).ToList(); // Sort prayer requests return(SortContactRecords(contactsSort, prayerRequests).ToList()); }
/// <summary> /// Sort contact records. /// </summary> /// <param name="sortOption"></param> /// <param name="contactRecords"></param> /// <returns></returns> public IEnumerable <ContactRecord> SortContactRecords(ContactsSort sortOption, IEnumerable <ContactRecord> contactRecords) { var contactRecordsList = contactRecords as List <ContactRecord>; if (contactRecordsList == null) { return(contactRecords); } switch (sortOption) { case ContactsSort.GroupByMember: return(contactRecordsList.GroupBy(c => c.CCGMemberId) .SelectMany(@group => @group) .OrderBy(r => r.CCGMember.LastName) .ThenByDescending(r => r.ContactDate)); case ContactsSort.GroupByDeacon: return(contactRecordsList.GroupBy(c => c.AppUserId) .SelectMany(@group => @group) .OrderBy(r => r.AppUser.LastName) .ThenByDescending(r => r.ContactDate)); case ContactsSort.GroupByContactType: return(contactRecordsList.GroupBy(c => c.ContactTypeId) .SelectMany(@group => @group)); case ContactsSort.DateAscending: return(contactRecordsList.OrderBy(c => c.ContactDate)); case ContactsSort.DateDescending: case ContactsSort.None: return(contactRecordsList.OrderByDescending(c => c.ContactDate)); default: throw new ArgumentOutOfRangeException(nameof(sortOption), sortOption, null); } }