Esempio n. 1
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;
                }
            }
        }
Esempio n. 2
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;
                }
            }
        }
Esempio n. 3
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;
                }
            }
        }
Esempio n. 4
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;
                }
            }
        }