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); }
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); } }
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); }
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); } } } }