Beispiel #1
0
 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);
            }
        }