public void SetHasPhotoFlag(IList <CcgAppUserViewModel> memberList) { foreach (var member in memberList) { member.HasPhoto = _photoService.DoesMemberHavePhoto(null, member.Id); } }
public void FilterMembers(ref List <CCGMember> members, MemberFilter filter, CCGAppUser user = null) { if (members == null) { return; } var timespan = TimeSpan.Zero; switch (filter) { case MemberFilter.NoPhoto: { members.RemoveAll(m => _photoService.DoesMemberHavePhoto(m.Id)); return; } case MemberFilter.ActiveMember: { members.RemoveAll(m => !m.IsMemberActive); return; } case MemberFilter.InactiveMember: { members.RemoveAll(m => m.IsMemberActive); return; } case MemberFilter.NeedsCommunion: { // Get all needs communion records var needsCommunionService = new NeedsCommunionService(unitOfWork); var records = unitOfWork.NeedsCommunionRepository .FindAll(r => r.Member.CcgId == user.CcgId) .OrderByDescending(r => r.Timestamp) .ToList(); // Filter by last 30 days needsCommunionService.FilterByDateRange(records, CommunionDateRange.Last30Days); // Filtering existing list is convoluted. Easier to wipe out list and re-populate. members.Clear(); if (user == null) { return; } members.AddRange(records.Select(record => unitOfWork.MemberRepository.FindMemberById((record.MemberId)))); // nix duplicates var recordsHashSet = new HashSet <CCGMember>(members, new CCGMemberEqComparer()); members = recordsHashSet.ToList(); return; } case MemberFilter.NoContactForOneMonth: { timespan = TimeSpan.FromDays(30); break; } case MemberFilter.NoContactForTwoMonths: { timespan = TimeSpan.FromDays(60); break; } case MemberFilter.NoContactForThreeMonths: { timespan = TimeSpan.FromDays(90); break; } case MemberFilter.NoContactForSixMonths: { timespan = TimeSpan.FromDays(180); break; } case MemberFilter.None: { return; } default: { throw new ArgumentOutOfRangeException(nameof(filter), filter, null); } } if (timespan != TimeSpan.Zero) { var dateTimeOffset = DateTime.Now.Subtract(timespan); // Remove all that are older than the offset date // '>' means more recent. Eg, if the 'last contact date' // is 15 days ago and the offset date is 30 days ago, // the contact will be removed. 3/15/17 > 3/15/16 members.RemoveAll(cr => cr.LastDateContacted >= dateTimeOffset); } }