Exemple #1
0
 private static void _AddNewPaxtonUser(PaxtonUserRepository userRepository, MembershipDetails details)
 {
     // Assuming the ID's won't change
     const int currentMembersAccess = 4;
     userRepository.CreateUser(currentMembersAccess,
         details.FirstName, details.LastName, details.BecNumber);
 }
Exemple #2
0
        private static void _SyncMembers(IEnumerable<MembershipDetails> membershipDetails)
        {
            using (var net2Client = new PaxtonClient())
            {
                var userRepository = new PaxtonUserRepository(net2Client, _trialRunOnly);

                var paxtonUsers = userRepository.GetAllUsers();

                foreach (var details in membershipDetails)
                    _SyncMember(details, paxtonUsers, userRepository);
            }
        }
Exemple #3
0
        private static void _UpdateExistingPaxtonUser(PaxtonUserRepository userRepository, MembershipDetails details, PaxtonUser paxtonUser)
        {
            if (paxtonUser.BecNumber == null)
            {
                Logger.WriteLine("No BEC number on Paxton DB - adding it.");

                paxtonUser.BecNumber = details.BecNumber;
                userRepository.UpdateUser(paxtonUser);
            }

            const int noAccess = 0; //Hopefully safe to hard code this - matches a value from a lookup table in the Paxton DB.

            if (details.MembershipStatus.ShouldHaveNoAccess())
            {
                if (paxtonUser.AccessLevelId != noAccess)
                {
                    Logger.WriteLine("User's membership status is {0} setting access level to 'No Access'", details.MembershipStatus);

                    paxtonUser.AccessLevelId = noAccess;
                    userRepository.UpdateUser(paxtonUser);
                }
                else
                {
                    Logger.WriteLine("User's access level is already set to 'No Access'", details.MembershipStatus);
                }

                return;
            }

            Logger.WriteLine("Current users access level is {0}.", details.MembershipStatus);
        }
Exemple #4
0
        private static void _SyncMember(MembershipDetails details, IReadOnlyCollection<PaxtonUser> paxtonUsers, PaxtonUserRepository userRepository)
        {
            Logger.WriteLine("Looking up user: {0} {1} {2}", details.BecNumber, details.FirstName, details.LastName);

            IReadOnlyCollection<PaxtonUser> matchingUsers = paxtonUsers
                .Where(u => u.BecNumber == details.BecNumber)
                    //u.Surname.Equals(details.LastName, StringComparison.OrdinalIgnoreCase)
                    //	&& u.FirstName.Equals(details.FirstName, StringComparison.OrdinalIgnoreCase))
                .ToArray();

            var matches = matchingUsers.Count();
            if (matches == 0)
            {
                Logger.WriteLine("No matching user found.");
                _AddNewPaxtonUser(userRepository, details);
            }
            else if (matches == 1)
            {
                Logger.WriteLine("Single matching user found - good times.");
                _UpdateExistingPaxtonUser(userRepository, details, matchingUsers.Single());
            }
            else
            {
                var matchingActiveUsers = matchingUsers.Where(u => u.Active).ToArray();
                var activeMatches = matchingActiveUsers.Count();
                if (activeMatches == 0)
                {
                    Logger.WriteLine("No matching active user found.");
                    _AddNewPaxtonUser(userRepository, details);
                }
                else if (activeMatches == 1)
                {
                    Logger.WriteLine("Single matching active user found - good times.");
                    _UpdateExistingPaxtonUser(userRepository, details, matchingActiveUsers.Single());
                }
                else
                {
                    Logger.WriteLine("Multiple matching users found - bad times." + String.Join(", ", matchingActiveUsers.Select(u => u.UserId)));
                    foreach (var duplicate in matchingActiveUsers.OrderBy(u => u.UserId).Skip(1))
                    {
                        Logger.WriteLine("Deleting duplicate user - good riddance.");
                        userRepository.DeleteUser(duplicate);
                    }
                }
            }
        }