Example #1
0
        private void SetNomineeIdentifiers(AwardType awardType)
        {
            var nominationsByNominee = Nominations
                                       .Where(n => n.AwardType == awardType)
                                       .Select((n, i) => new { Index = i, Nomination = n })
                                       .GroupBy(x => x.Nomination.Nominee);

            foreach (var group in nominationsByNominee)
            {
                var nomineeIndexes   = group.Select(x => x.Index).ToList();
                var votingIdentifier = NomineeVotingIdentifier.Create(nomineeIndexes);

                foreach (var item in group)
                {
                    var nomination = item.Nomination;

                    if (nomination.VotingIdentifier == votingIdentifier)
                    {
                        continue;
                    }

                    nomination.SetVotingIdentifier(votingIdentifier);
                }
            }
        }
Example #2
0
        public IReadOnlyList <Nomination> GetNominationsForNominee(AwardType awardType, Person nominee)
        {
            if (awardType == null)
            {
                throw new ArgumentNullException(nameof(awardType));
            }
            if (nominee == null)
            {
                throw new ArgumentNullException(nameof(nominee));
            }

            return(Nominations.Where(n => n.Nominee == nominee && n.AwardType == awardType).ToList());
        }
Example #3
0
        public IReadOnlyList <Person> GetNomineesForAward(AwardType awardType, bool excludeWinners)
        {
            if (awardType == null)
            {
                throw new ArgumentNullException(nameof(awardType));
            }

            var winners = excludeWinners
                ? GetWinnersForAwardType(awardType).Select(w => w.Person)
                : Enumerable.Empty <Person>();

            return(Nominations
                   .Where(n => n.AwardType == awardType)
                   .Select(n => n.Nominee)
                   .Except(winners)
                   .ToList());
        }
Example #4
0
        public void UpdateNomineeEmailAddress(Person nominee, EmailAddress newEmailAddress)
        {
            if (nominee == null)
            {
                throw new ArgumentNullException(nameof(nominee));
            }
            if (newEmailAddress == null)
            {
                throw new ArgumentNullException(nameof(newEmailAddress));
            }
            if (!newEmailAddress.IsValid)
            {
                throw new ArgumentException(nameof(newEmailAddress));
            }

            if (nominee.EmailAddress == newEmailAddress)
            {
                return;
            }

            var nominations = Nominations.Where(n => n.Nominee == nominee);
            var updated     = false;

            foreach (var nomination in nominations)
            {
                nomination.UpdateNomineeEmailAddress(newEmailAddress);
                updated = true;
            }

            if (!updated)
            {
                return;
            }

            SetNomineeIdentifiers();

            var awardWinner = AwardWinners.FirstOrDefault(w => w.Person == nominee);

            if (awardWinner != null)
            {
                awardWinner.UpdateAwardWinnerEmailAddress(newEmailAddress);
            }

            MarkAsDirty($@"Updated nominee email address from {nominee.EmailAddress.Value} to {newEmailAddress.Value}");
        }
Example #5
0
        public void UpdateNomineeName(Person nominee, PersonName newNomineeName)
        {
            if (nominee == null)
            {
                throw new ArgumentNullException(nameof(nominee));
            }
            if (newNomineeName == null)
            {
                throw new ArgumentNullException(nameof(newNomineeName));
            }
            if (!newNomineeName.IsValid)
            {
                throw new ArgumentException(nameof(newNomineeName));
            }

            if (nominee.Name == newNomineeName)
            {
                return;
            }

            var nominations = Nominations.Where(n => n.Nominee == nominee);
            var updated     = false;

            foreach (var nomination in nominations)
            {
                nomination.UpdateNomineeName(newNomineeName);
                updated = true;
            }

            if (!updated)
            {
                return;
            }

            SetNomineeIdentifiers();

            var awardWinner = AwardWinners.FirstOrDefault(w => w.Person == nominee);

            if (awardWinner != null)
            {
                awardWinner.UpdateAwardWinnerName(newNomineeName);
            }

            MarkAsDirty($@"Updated nominee name from {nominee.Name.FullName} to {newNomineeName.FullName}");
        }
Example #6
0
        public void UpdateNomineeOfficeLocation(Person nominee, OfficeLocation newOfficeLocation)
        {
            if (nominee == null)
            {
                throw new ArgumentNullException(nameof(nominee));
            }
            if (newOfficeLocation == null)
            {
                throw new ArgumentNullException(nameof(newOfficeLocation));
            }
            if (!OfficeLocation.ValidEmployeeOfficeLocations.Contains(newOfficeLocation))
            {
                throw new ArgumentException(nameof(newOfficeLocation));
            }

            var nominations = Nominations.Where(n => n.Nominee == nominee);
            var updated     = false;

            foreach (var nomination in nominations)
            {
                nomination.UpdateNomineeOfficeLocation(newOfficeLocation);
                updated = true;
            }

            if (!updated)
            {
                return;
            }

            SetNomineeIdentifiers();

            var awardWinner = AwardWinners.FirstOrDefault(w => w.Person == nominee);

            if (awardWinner != null)
            {
                awardWinner.UpdateAwardWinnerOfficeLocation(newOfficeLocation);
            }

            MarkAsDirty(
                $@"Updated nominee {nominee.Name.FullName}'s office location from {nominee.OfficeLocation.Name} to {
                        newOfficeLocation.Name
                    }");
        }
Example #7
0
 private IEnumerable <Nomination> GetNominationsByAwardType(AwardType awardType)
 {
     return(Nominations.Where(n => n.AwardType == awardType));
 }