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());
        }
Example #2
0
        /// <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);
            }
        }