Exemplo n.º 1
0
        public static void EditPlayer(int playerID)
        {
            using (ClubManagement cm = new ClubManagement())
            {
                var temp = cm.Players.LoadWith(PlayerFetchStrategy).Where(i => i.PlayerID == playerID).First();
                _Player = cm.CreateDetachedCopy<Player>(temp, PlayerFetchStrategy);
                _Player.Person.EditToken = Guid.NewGuid();

                foreach (Guardian guardian in _Player.Guardians)
                {
                    guardian.EditToken = Guid.NewGuid();
                    guardian.Person.EditToken = Guid.NewGuid();

                    foreach (EmailAddress emailAddress in guardian.Person.EmailAddresses)
                    {
                        emailAddress.EditToken = Guid.NewGuid();
                    }

                    foreach (PhoneNumber phoneNumber in guardian.Person.PhoneNumbers)
                    {
                        phoneNumber.EditToken = Guid.NewGuid();
                    }

                    foreach (Address address in guardian.Person.Addresses)
                    {
                        address.EditToken = Guid.NewGuid();
                    }
                }

                foreach (EmailAddress emailAddress in _Player.Person.EmailAddresses)
                {
                    emailAddress.EditToken = Guid.NewGuid();
                }

                foreach (PhoneNumber phoneNumber in _Player.Person.PhoneNumbers)
                {
                    phoneNumber.EditToken = Guid.NewGuid();
                }

                foreach (Address address in _Player.Person.Addresses)
                {
                    address.EditToken = Guid.NewGuid();
                }

                foreach (TeamPlayer teamPlayer in _Player.TeamPlayers)
                {
                    teamPlayer.EditToken = Guid.NewGuid();
                }

                foreach (PlayerPass playerPass in _Player.PlayerPasses)
                {
                    playerPass.EditToken = Guid.NewGuid();

                    foreach (TeamPlayer teamPlayer in playerPass.TeamPlayers)
                    {
                        teamPlayer.EditToken = Guid.NewGuid();
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static void EditTeam(int teamID)
        {
            using (ClubManagement cm = new ClubManagement())
            {
                var temp = cm.Teams.LoadWith(TeamFetchStrategy).Where(i => i.TeamID == teamID).First();
                _Team = cm.CreateDetachedCopy<Team>(temp, TeamFetchStrategy);

                var temp2 = cm.RegistrationRules.LoadWith(TeamFetchStrategy).Where(i => i.NewTeamID == teamID);
                _RegistrationRules = cm.CreateDetachedCopy<RegistrationRule>(temp2, TeamFetchStrategy).ToList()
                    .Select(i => Serializer.DeepClone<RegistrationRule>(i)).ToList();
            }

            foreach (RegistrationRule registrationRule in _RegistrationRules)
            {
                registrationRule.EditToken = Guid.NewGuid();
            }
        }
Exemplo n.º 3
0
        public IQueryable gvAllNonUsers_GetData()
        {
            using(ClubManagement cm = new  ClubManagement())
            {
                var guardians = cm.Guardians.Where(i => i.Active && !i.Person.UserID.HasValue).Select(i => new
                {
                    PersonID = i.PersonID,
                    Player = i.Player.Person.FName + " " + i.Player.Person.LName,
                    PlayerID = i.PlayerID
                })
                .GroupBy(i => i.PersonID)
                .Select(i => new
                {
                    PersonID = i.Key,
                    PlayerNames = i.Select(j => j.Player).ToList(),
                    PlayerIDs = i.Select(j=>j.PlayerID).Distinct().ToList()
                })
                .ToDictionary(i => i.PersonID);

                List<int> peopleIDs = guardians.Keys.ToList();

                List<NonUserGuardianResult> nonUsers = cm.People.Where(i => peopleIDs.Contains(i.PersonID)).Select(i => new NonUserGuardianResult()
                {
                     FirstName = i.FName,
                     LastName = i.LName,
                     PersonID = i.PersonID,
                     EmailAddresses = i.EmailAddresses.Where(j=>j.Active).Select(j=>j.Email.Trim()).Distinct().ToList(),
                     Players = guardians[i.PersonID].PlayerNames,
                     PlayerIDs = guardians[i.PersonID].PlayerIDs
                }).ToList();

                NonUserGuardianResults = nonUsers;

                return nonUsers.OrderBy(i => i.LastName).ThenBy(i => i.FirstName).AsQueryable<NonUserGuardianResult>();
            }
        }
Exemplo n.º 4
0
        private static void UpdateScopingForGuardians(int playerID)
        {
            // make sure all guardians have parent scope to this player, and remove old ones if not explicit
            // since we are deleting and re-adding we will use a transaction

            using (ClubManagement cm = new ClubManagement())
            using (TrackrModels.UserManagement um = new TrackrModels.UserManagement())
            {
                try
                {
                    List<int> userIDs = cm.Guardians.Where(i => i.PlayerID == playerID && i.Person.UserID.HasValue && i.Active).Select(i => i.Person.UserID.Value).Distinct().ToList();

                    // delete assignments for this player
                    IQueryable<ScopeAssignment> assignmentsToDelete = um.ScopeAssignments.Where(i => i.ResourceID == playerID && i.ScopeID == 4 && i.RoleID == 6 && !i.IsExplicit);
                    um.Delete(assignmentsToDelete);

                    // add assignments back in
                    foreach (int userID in userIDs)
                    {
                        ScopeAssignment assignment = new ScopeAssignment()
                        {
                            IsDeny = false,
                            ResourceID = playerID,
                            RoleID = 6,
                            ScopeID = 4,
                            UserID = userID,
                            IsExplicit = false
                        };

                        um.Add(assignment);
                    }

                    // commit
                    um.SaveChanges();
                }
                catch (Exception ex)
                {
                    um.ClearChanges();
                    ex.HandleException();
                }
            }
        }
Exemplo n.º 5
0
        public static int SaveData(int modifiedByUser, bool updateTeamPasses)
        {
            //returns player id
            using (ClubManagement cm = new ClubManagement())
            {
                try
                {
                    Player freshCopy = _Player.PlayerID > 0 ? cm.Players.LoadWith(PlayerFetchStrategy).Where(i => i.PlayerID == _Player.PlayerID).First() : new Player() { Person = new Person() };

                    //check if any persons are outdated
                    List<int> personIDs = _Player.Guardians.Where(i => i.Person.PersonID > 0).Select(i => i.PersonID).Distinct().ToList();
                    var people = cm.People.Where(i => personIDs.Contains(i.PersonID)).Select(i => new { PersonID = i.PersonID, LastModifiedAt = i.LastModifiedAt }).ToDictionary(i => i.PersonID);

                    if (freshCopy.PersonID > 0)
                    {
                        people.Add(freshCopy.PersonID, new { PersonID = freshCopy.PersonID, LastModifiedAt = freshCopy.Person.LastModifiedAt });
                    }

                    List<Person> persons = _Player.Guardians.Select(i => i.Person).ToList();
                    persons.Add(freshCopy.Person);
                    foreach (Person person in persons)
                    {
                        if (people.ContainsKey(person.PersonID) && people[person.PersonID].LastModifiedAt > person.LastModifiedAt)
                        {
                            throw new PlayerModifiedByAnotherProcessException("A person of this player was modified by another process.");
                        }
                    }

                    //check if any guardians are outdated
                    List<int> guardianIDs = _Player.Guardians.Where(i => i.GuardianID > 0).Select(i => i.GuardianID).Distinct().ToList();
                    var guardians = cm.Guardians.Where(i => guardianIDs.Contains(i.GuardianID)).Select(i => new { GuardianID = i.GuardianID, LastModifiedAt = i.LastModifiedAt }).ToDictionary(i => i.GuardianID);
                    foreach (Guardian guardian in _Player.Guardians)
                    {
                        if (guardians.ContainsKey(guardian.GuardianID) && guardians[guardian.GuardianID].LastModifiedAt > guardian.LastModifiedAt)
                        {
                            throw new PlayerModifiedByAnotherProcessException("A guardian of this player was modified by another process.");
                        }
                    }

                    //check if any email addresses are outdated
                    List<int> emailAddressIDs = _Player.Person.EmailAddresses.Union(_Player.Guardians.Select(i => i.Person).SelectMany(i => i.EmailAddresses)).Where(i => i.EmailAddressID > 0).Select(i => i.EmailAddressID).Distinct().ToList();
                    var emails = cm.EmailAddresses.Where(i => emailAddressIDs.Contains(i.EmailAddressID)).Select(i => new { EmailAddressID = i.EmailAddressID, LastModifiedAt = i.LastModifiedAt }).ToDictionary(i => i.EmailAddressID);
                    foreach (EmailAddress emailAddress in _Player.Person.EmailAddresses.Union(_Player.Guardians.Select(i => i.Person).SelectMany(i => i.EmailAddresses)))
                    {
                        if (emails.ContainsKey(emailAddress.EmailAddressID) && emails[emailAddress.EmailAddressID].LastModifiedAt > emailAddress.LastModifiedAt)
                        {
                            throw new PlayerModifiedByAnotherProcessException("An email address of this player or their guardian(s) was modified by another process.");
                        }
                    }

                    //check if any phone numbers are outdated
                    List<int> phoneNumberIDs = _Player.Person.PhoneNumbers.Union(_Player.Guardians.Select(i => i.Person).SelectMany(i => i.PhoneNumbers)).Where(i => i.PhoneNumberID > 0).Select(i => i.PhoneNumberID).Distinct().ToList();
                    var phoneNumbers = cm.PhoneNumbers.Where(i => phoneNumberIDs.Contains(i.PhoneNumberID)).Select(i => new { PhoneNumberID = i.PhoneNumberID, LastModifiedAt = i.LastModifiedAt }).ToDictionary(i => i.PhoneNumberID);
                    foreach (PhoneNumber phoneNumber in _Player.Person.PhoneNumbers.Union(_Player.Guardians.Select(i => i.Person).SelectMany(i => i.PhoneNumbers)))
                    {
                        if (phoneNumbers.ContainsKey(phoneNumber.PhoneNumberID) && phoneNumbers[phoneNumber.PhoneNumberID].LastModifiedAt > phoneNumber.LastModifiedAt)
                        {
                            throw new PlayerModifiedByAnotherProcessException("A phone number of this player or their guardian(s) was modified by another process.");
                        }
                    }

                    //check if any addresses are outdated
                    List<int> addressIDs = _Player.Person.Addresses.Union(_Player.Guardians.Select(i => i.Person).SelectMany(i => i.Addresses)).Where(i => i.AddressID > 0).Select(i => i.AddressID).Distinct().ToList();
                    var addresses = cm.Addresses.Where(i => addressIDs.Contains(i.AddressID)).Select(i => new { AddressID = i.AddressID, LastModifiedAt = i.LastModifiedAt }).ToDictionary(i => i.AddressID);
                    foreach (Address address in _Player.Person.Addresses.Union(_Player.Guardians.Select(i => i.Person).SelectMany(i => i.Addresses)))
                    {
                        if (addresses.ContainsKey(address.AddressID) && addresses[address.AddressID].LastModifiedAt > address.LastModifiedAt)
                        {
                            throw new PlayerModifiedByAnotherProcessException("An address of this player or their guardian(s) was modified by another process.");
                        }
                    }

                    // check if any playerpasses are outdated
                    List<int> playerPassIDs = _Player.PlayerPasses.Where(i => i.PlayerPassID > 0).Select(i => i.PlayerPassID).Distinct().ToList();
                    var playerPasses = cm.PlayerPasses.Where(i => playerPassIDs.Contains(i.PlayerPassID)).Select(i => new { PlayerPassID = i.PlayerPassID, LastModifiedAt = i.LastModifiedAt }).ToDictionary(i => i.PlayerPassID);
                    foreach (PlayerPass playerPass in _Player.PlayerPasses)
                    {
                        if (playerPasses.ContainsKey(playerPass.PlayerPassID) && playerPasses[playerPass.PlayerPassID].LastModifiedAt > playerPass.LastModifiedAt)
                        {
                            throw new PlayerModifiedByAnotherProcessException("A player pass of this player was modified by another process.");
                        }
                    }

                    // check if any teamplayers are outdated
                    List<int> teamPlayerIDs = _Player.TeamPlayers.Union(_Player.PlayerPasses.SelectMany(i => i.TeamPlayers)).Where(i => i.TeamPlayerID > 0).Select(i => i.TeamPlayerID).Distinct().ToList();
                    var teamPlayers = cm.TeamPlayers.Where(i => teamPlayerIDs.Contains(i.TeamPlayerID)).Select(i => new { TeamPlayerID = i.TeamPlayerID, LastModifiedAt = i.LastModifiedAt }).ToDictionary(i => i.TeamPlayerID);
                    foreach (TeamPlayer teamPlayer in _Player.TeamPlayers.Union(_Player.PlayerPasses.SelectMany(i => i.TeamPlayers)))
                    {
                        if (teamPlayers.ContainsKey(teamPlayer.TeamPlayerID) && teamPlayers[teamPlayer.TeamPlayerID].LastModifiedAt > teamPlayer.LastModifiedAt)
                        {
                            throw new PlayerModifiedByAnotherProcessException("A team player of this player was modified by another process.");
                        }
                    }

                    DateTime modifiedAt = DateTime.Now.ToUniversalTime();

                    // everything up to this point is fresh
                    if (_Player.PersonID == 0 || (_Player.PersonID > 0 && _Player.Person.WasModified))
                    {
                        freshCopy.Person.ClubID = _Player.Person.ClubID;
                        freshCopy.Person.DateOfBirth = _Player.Person.DateOfBirth;
                        freshCopy.Person.FName = _Player.Person.FName;
                        freshCopy.Person.Gender = _Player.Person.Gender;
                        freshCopy.Person.LName = _Player.Person.LName;
                        freshCopy.Person.UserID = _Player.Person.UserID;
                    }

                    IList<EmailAddress> _freshPlayerEmails = freshCopy.Person.EmailAddresses;
                    Copy(_freshPlayerEmails, _Player.Person.EmailAddresses);

                    IList<PhoneNumber> _freshPlayerPhones = freshCopy.Person.PhoneNumbers;
                    Copy(_freshPlayerPhones, _Player.Person.PhoneNumbers);

                    IList<Address> _freshPlayerAddresses = freshCopy.Person.Addresses;
                    Copy(_freshPlayerAddresses, _Player.Person.Addresses);

                    foreach (Guardian guardian in _Player.Guardians)
                    {
                        Guardian _freshCopy;

                        if (guardian.GuardianID == 0)
                        {
                            _freshCopy = new Guardian();
                            if (guardian.Person.PersonID == 0)
                            {
                                _freshCopy.Person = new Person();
                            }
                            else
                            {
                                _freshCopy.Person = cm.People.LoadWith(PlayerFetchStrategy).Where(i => i.PersonID == guardian.Person.PersonID).First();
                            }
                        }
                        else
                        {
                            _freshCopy = freshCopy.Guardians.First(i => i.GuardianID == guardian.GuardianID);
                        }

                        if (guardian.Person.PersonID == 0 || (guardian.Person.PersonID > 0 && guardian.Person.WasModified))
                        {
                            _freshCopy.Person.ClubID = guardian.Person.ClubID;
                            _freshCopy.Person.DateOfBirth = guardian.Person.DateOfBirth;
                            _freshCopy.Person.FName = guardian.Person.FName;
                            _freshCopy.Person.Gender = guardian.Person.Gender;
                            _freshCopy.Person.LName = guardian.Person.LName;
                            _freshCopy.Person.MInitial = guardian.Person.MInitial;
                            _freshCopy.Person.UserID = guardian.Person.UserID;
                        }

                        if (guardian.GuardianID == 0 || (guardian.GuardianID > 0 && guardian.WasModified))
                        {
                            _freshCopy.SortOrder = guardian.SortOrder;
                            _freshCopy.Active = guardian.Active;
                        }

                        IList<EmailAddress> _freshCopyGuardianEmails = _freshCopy.Person.EmailAddresses;
                        Copy(_freshCopyGuardianEmails, guardian.Person.EmailAddresses);

                        IList<Address> _freshCopyGuardianAddresses = _freshCopy.Person.Addresses;
                        Copy(_freshCopyGuardianAddresses, guardian.Person.Addresses);

                        IList<PhoneNumber> _freshCopyGuardianPhones = _freshCopy.Person.PhoneNumbers;
                        Copy(_freshCopyGuardianPhones, guardian.Person.PhoneNumbers);

                        if (_freshCopy.GuardianID == 0)
                        {
                            freshCopy.Guardians.Add(_freshCopy);
                        }

                        SetPersonObjectModified(_freshCopy.Person, modifiedAt, modifiedByUser);
                        _freshCopy.LastModifiedAt = modifiedAt;
                        _freshCopy.LastModifiedBy = modifiedByUser;
                    }

                    if (updateTeamPasses)
                    {
                        IEnumerable<TeamPlayer> _allUnionedFreshTeamPlayers = freshCopy.TeamPlayers.Union(freshCopy.PlayerPasses.SelectMany(i => i.TeamPlayers)).ToList(); // get duplicate via to list

                        IList<TeamPlayer> _freshTeamPlayers = freshCopy.TeamPlayers;
                        Copy(_freshTeamPlayers, _Player.TeamPlayers, _allUnionedFreshTeamPlayers);

                        foreach (PlayerPass playerPass in _Player.PlayerPasses)
                        {
                            PlayerPass _freshCopy = playerPass.PlayerPassID == 0 ? new PlayerPass() : freshCopy.PlayerPasses.First(i => i.PlayerPassID == playerPass.PlayerPassID);

                            if (playerPass.PlayerPassID == 0 || playerPass.WasModified)
                            {
                                _freshCopy.Active = playerPass.Active;
                                _freshCopy.Expires = playerPass.Expires;
                                _freshCopy.PassNumber = playerPass.PassNumber;
                                _freshCopy.Photo = playerPass.Photo;
                            }

                            IList<TeamPlayer> _freshPlayerPassTeamPlayers = _freshCopy.TeamPlayers;
                            Copy(_freshPlayerPassTeamPlayers, playerPass.TeamPlayers, _allUnionedFreshTeamPlayers);

                            if (_freshCopy.PlayerPassID == 0)
                            {
                                freshCopy.PlayerPasses.Add(_freshCopy);
                            }
                        }
                    }

                    SetPersonObjectModified(freshCopy.Person, modifiedAt, modifiedByUser);

                    if (updateTeamPasses)
                    {
                        freshCopy.PlayerPasses.ToList().ForEach(i => { i.LastModifiedAt = modifiedAt; i.LastModifiedBy = modifiedByUser; });
                        freshCopy.TeamPlayers.Union(freshCopy.PlayerPasses.SelectMany(i => i.TeamPlayers)).ToList().ForEach(i => { i.LastModifiedAt = modifiedAt; i.LastModifiedBy = modifiedByUser; });
                    }

                    if (freshCopy.PlayerID == 0)
                    {
                        cm.Add(freshCopy);

                        cm.SaveChanges();

                        int playerID = freshCopy.PlayerID;
                        UpdateScopingForGuardians(playerID);
                        return playerID;
                    }
                    else
                    {
                        cm.SaveChanges();
                        UpdateScopingForGuardians(freshCopy.PlayerID);
                        return freshCopy.PlayerID;
                    }
                }
                catch (Exception ex)
                {
                    cm.ClearChanges();
                    throw ex;
                }
            }
        }
Exemplo n.º 6
0
        public static void AddGuardians(List<int> personIDs)
        {
            using (ClubManagement cm = new ClubManagement())
            {
                var people = cm.People.Where(i => personIDs.Contains(i.PersonID)).ToList();
                people.ForEach(i => i.EditToken = Guid.NewGuid());

                foreach (Person person in people)
                {
                    Person clone = Serializer.DeepClone<Person>(person);

                    Guardian obj = new Guardian() { EditToken = Guid.NewGuid() };

                    obj.Person = clone;
                    obj.WasModified = true;
                    obj.Active = true;

                    _Player.Guardians.Add(obj);
                }
            }
        }
Exemplo n.º 7
0
        public static void SaveRegistrationRules(int teamID)
        {
            //returns team id
            using (ClubManagement cm = new ClubManagement())
            {
                try
                {
                    foreach (RegistrationRule rule in _RegistrationRules)
                    {
                        RegistrationRule freshCopy = rule.RegistrationRuleID > 0 ? cm.RegistrationRules.Where(i => i.RegistrationRuleID == rule.RegistrationRuleID).First() : new RegistrationRule();

                        freshCopy.DateOfBirthCutoff = rule.DateOfBirthCutoff;
                        freshCopy.NewTeamID = teamID;
                        freshCopy.OldTeamID = rule.OldTeamID;
                        freshCopy.RegistrationCloses = rule.RegistrationCloses;
                        freshCopy.RegistrationOpens = rule.RegistrationOpens;
                        freshCopy.Active = rule.Active;

                        if (freshCopy.RegistrationRuleID == 0)
                        {
                            cm.Add(freshCopy);
                        }
                    }

                    cm.SaveChanges();
                }
                catch (Exception ex)
                {
                    cm.ClearChanges();
                    throw ex;
                }
            }
        }
Exemplo n.º 8
0
        public static int SaveData(int modifiedByUser)
        {
            //returns team id
            using (ClubManagement cm = new ClubManagement())
            {
                try
                {
                    Team freshCopy = _Team.TeamID > 0 ? cm.Teams.LoadWith(TeamFetchStrategy).Where(i => i.TeamID == _Team.TeamID).First() : new Team();

                    DateTime modifiedAt = DateTime.Now.ToUniversalTime();

                    freshCopy.ProgramID = Team.ProgramID;
                    freshCopy.TeamName = Team.TeamName;
                    freshCopy.StartYear = Team.StartYear;
                    freshCopy.EndYear = Team.EndYear;
                    freshCopy.MinRosterSize = Team.MinRosterSize;
                    freshCopy.MaxRosterSize = Team.MaxRosterSize;
                    freshCopy.AgeCutoff = Team.AgeCutoff;


                    // everything up to this point is fresh
                    if (freshCopy.TeamID == 0)
                    {
                        cm.Add(freshCopy);
                        cm.SaveChanges();

                        int teamID = freshCopy.TeamID;
                        return teamID;
                    }
                    else
                    {
                        cm.SaveChanges();
                        return freshCopy.TeamID;
                    }
                }
                catch (Exception ex)
                {
                    cm.ClearChanges();
                    throw ex;
                }
            }
        }
Exemplo n.º 9
0
        public static void UpdateRegistrationRule(Guid registrationRuleEditToken, int? oldTeamID, DateTime registrationOpens, DateTime registrationCloses, DateTime? ageCutoff)
        {
            RegistrationRule obj = _RegistrationRules.First(i => i.EditToken == registrationRuleEditToken);

            if (oldTeamID.HasValue)
            {
                using (ClubManagement cm = new ClubManagement())
                {
                    obj.OldTeam = cm.Teams.First(i => i.TeamID == oldTeamID.Value);
                }
            }

            obj.WasModified = true;
            obj.OldTeamID = oldTeamID;
            obj.RegistrationOpens = registrationOpens;
            obj.RegistrationCloses = registrationCloses;
            obj.DateOfBirthCutoff = ageCutoff;
        }
Exemplo n.º 10
0
        protected void btnCreateUserAccounts_Click(object sender, EventArgs e)
        {
            int personID = int.Parse(hdnPersonID.Value);
            string email = radioList.SelectedValue.Trim();
            string password = txtPassword.Text.Trim();

            List<int> playerIDs = NonUserGuardianResults.First(i=>i.PersonID == personID).PlayerIDs.Distinct().ToList();

            using(TrackrModels.UserManagement um = new TrackrModels.UserManagement())
            using (ClubManagement cm = new ClubManagement())
            using (NewUserMappingsController numc = new NewUserMappingsController())
            {
                MembershipCreateStatus status;
                MembershipUser user = Membership.CreateUser(email, password, email, null, null, true, out status);

                switch (status)
                {
                    case MembershipCreateStatus.Success:
                        int userID = (int)user.ProviderUserKey;

                        um.WebUsers.First(i => i.UserID == userID).ClubID = CurrentUser.ClubID;
                        um.SaveChanges();

                        var roleIDs = numc.GetWhere(i => i.ClubID == CurrentUser.ClubID).Select(i => i.RoleID).Distinct().ToList();

                        foreach (int roleID in roleIDs)
                        {
                            ScopeAssignment assignment = new ScopeAssignment()
                            {
                                IsDeny = false,
                                ScopeID = 5,
                                UserID = userID,
                                ResourceID = userID,
                                RoleID = roleID
                            };
                            um.Add(assignment);
                        }

                        foreach (int playerID in playerIDs)
                        {
                            ScopeAssignment assignment = new ScopeAssignment()
                            {
                                IsDeny = false,
                                ScopeID = 4, //player scope
                                UserID = userID,
                                ResourceID = playerID,
                                RoleID = 6 //parent role
                            };
                            um.Add(assignment);
                        }

                        cm.Add(new WebUserInfo()
                        {
                            FName = "",
                            LName = "",
                            UserID = userID
                        });

                        try
                        {
                            // try to save scoep assignments, if it fails then rollback user. i.e. delete user
                            um.SaveChanges();
                            cm.SaveChanges();

                            Person person =cm.People.First(i => i.PersonID == personID);
                            person.UserID = userID;

                            cm.SaveChanges();

                            try
                            {
                                List<Trackr.Utils.Messenger.EmailRecipient> recipients = new List<Trackr.Utils.Messenger.EmailRecipient>();
                                recipients.Add(new Trackr.Utils.Messenger.EmailRecipient()
                                {
                                    Email = email,
                                    Name = person.FName + " " + person.LName,
                                    RecipientType = Trackr.Utils.Messenger.EmailRecipientType.TO
                                });

                                List<Trackr.Utils.Messenger.TemplateVariable> variables = new List<Trackr.Utils.Messenger.TemplateVariable>();
                                variables.Add(new Trackr.Utils.Messenger.TemplateVariable()
                                {
                                    VariableName = "PersonName",
                                    VariableContent = person.FName + " " + person.LName
                                });
                                variables.Add(new Trackr.Utils.Messenger.TemplateVariable()
                                {
                                    VariableName = "LoginEmail",
                                    VariableContent = email
                                });
                                variables.Add(new Trackr.Utils.Messenger.TemplateVariable()
                                {
                                    VariableName = "LoginPassword",
                                    VariableContent = password
                                });

                                Trackr.Utils.Messenger.SendEmail("user-account-created", null, variables, recipients, false, false);

                                AlertBox.AddAlert(string.Format("Successfully created user account for {0} and emailed them their login information.", email));
                            }
                            catch (Exception ex)
                            {
                                Guid guid = ex.HandleException();
                                AlertBox.AddAlert(string.Format("Successfully created user account for {0} but failed to email them their login information. Reference #: " + guid, email), false, UI.AlertBoxType.Error);
                            }
                            finally
                            {
                                ScriptManager.RegisterStartupScript(this, this.GetType(), "modal", "$('.modal-backdrop').remove()", true);
                                gvAllNonUsers.DataBind();

                                uP_Main.Update();
                            }
                        }
                        catch (Exception ex)
                        {
                            Guid guid = ex.HandleException();
                            CreateAlertBox.AddAlert("An error occurred while trying to create new user from guardian. Please try again. Reference #: " + guid, false, UI.AlertBoxType.Error);
                            um.ClearChanges();
                            cm.ClearChanges();

                            // remove any assignments
                            um.Delete(um.ScopeAssignments.Where(i => i.UserID == userID).ToList());
                            um.Delete(um.WebUsers.First(i => i.UserID == userID));
                            um.SaveChanges();
                        }
                        break;

                    default:
                        CreateAlertBox.AddAlert("Unable to create new user from guardian for the following reason: " + status.ToString(), false, UI.AlertBoxType.Error);
                        break;
                }
            }
        }