public async Task <IActionResult> MoveToBottom(int id, string scoring, string playerPosition)
        {
            PlayerRanking playerToMove = await _rankingRepository.GetByIdAsync(id);

            IEnumerable <PlayerRanking> allPlayerRanks = await _rankingRepository.ListAllAsync();

            IEnumerable <Player> allPlayers = await _playerRepository.ListAllAsync();

            List <PlayerRanking> playersOfPosition = _rankingRepository.CreateListOfPlayersOfPosition(playerToMove, allPlayerRanks, allPlayers);
            await _rankingRepository.MoveToBottom(playerPosition, scoring, allPlayerRanks, playersOfPosition, playerToMove);

            if (playerPosition == "All Players")
            {
                return(RedirectToAction(scoring));
            }
            if (playerPosition != "All Players")
            {
                return(RedirectToAction(scoring, new
                {
                    playerPosition
                }));
            }
            else
            {
                return(RedirectToAction("Standard"));
            }
        }
        public async Task <IActionResult> MovePlayers(int id, string scoring, string playerPosition, int direction)
        {
            try
            {
                PlayerRanking playerRankingToChange = await _rankingRepository.GetByIdAsync(id);

                List <PlayerRanking> playerRankingList = await _rankingRepository.SwapPlayerRanks(playerRankingToChange, direction, scoring, playerPosition);

                Player playerToChange = await _playerRepository.GetByIdAsync(playerRankingList[0].PlayerId);

                Player otherPlayer = await _playerRepository.GetByIdAsync(playerRankingList[1].PlayerId);

                if (playerToChange.PlayerPos == otherPlayer.PlayerPos)
                {
                    await _rankingRepository.UpdatePosRanks(playerRankingList[0], playerRankingList[1], scoring, direction);
                }
                if (playerPosition == "All Players")
                {
                    return(RedirectToAction(scoring));
                }
                else
                {
                    return(RedirectToAction(scoring, new
                    {
                        playerPosition
                    }));
                }
            }
            catch
            {
                //todo log exception
            }
            return(RedirectToAction(scoring));
        }
示例#3
0
        /// <summary>
        /// Updates the provided rankings based on the points and the category
        /// </summary>
        private void UpdateRankingsFromRow(PlayerRanking pr, int points, Category category)
        {
            switch (category)
            {
            case Category.Level:
                pr.LevelPoints = points;
                break;

            case Category.MS:
            case Category.WS:
                pr.SinglesPoints = points;
                break;

            case Category.MD:
            case Category.WD:
                pr.DoublesPoints = points;
                break;

            case Category.MXD:
            case Category.WXD:
                pr.MixPoints = points;
                break;

            default:
                throw new ArgumentException($"Category could not be recognised. Category is: {category}");
            }
        }
示例#4
0
        public async Task <List <PlayerRankingModel> > CreatePlayerViewModel(IRankingRepository rankingRepository, IPlayerRepository playerRepository)
        {
            IEnumerable <Player> allPlayers = await playerRepository.ListAllAsync();

            List <PlayerRankingModel> playerRankingModelList = new List <PlayerRankingModel>();

            foreach (Player player in allPlayers)
            {
                PlayerRankingModel playerRankingModelToAdd = new PlayerRankingModel();
                try
                {
                    PlayerRanking PR = await rankingRepository.GetByPlayerIdAsync(player.PlayerId);

                    playerRankingModelToAdd.playerRanking = PR;
                }
                catch
                {
                    PlayerRanking PR = new PlayerRanking
                    {
                        PlayerId = player.PlayerId
                    };
                    playerRankingModelToAdd.playerRanking = PR;
                }
                finally
                {
                    playerRankingModelToAdd.playerToRank = player;
                    playerRankingModelList.Add(playerRankingModelToAdd);
                }
            }
            return(playerRankingModelList);
        }
示例#5
0
        public async Task <List <PlayerRankingModel> > CreatePlayerViewModel(IRankingRepository rankingRepository, IPlayerRepository playerRepository, int profileID)
        {
            int defaultProfileID            = 2025;
            IEnumerable <Player> allPlayers = await playerRepository.ListAllAsync();

            IEnumerable <PlayerRanking> allRanksofProfile = await rankingRepository.GetAllRanksByProfileId(profileID);

            List <PlayerRankingModel> playerRankingModelList = new List <PlayerRankingModel>();

            foreach (Player player in allPlayers)
            {
                PlayerRankingModel playerRankingModelToAdd = new PlayerRankingModel();
                PlayerRanking      PR = allRanksofProfile.FirstOrDefault(x => x.PlayerId == player.PlayerId);
                playerRankingModelToAdd.playerRanking = PR;
                playerRankingModelToAdd.playerToRank  = player;
                playerRankingModelToAdd.playerRanking.TestUserProfileId = profileID;
                playerRankingModelList.Add(playerRankingModelToAdd);
            }

            if (playerRankingModelList.Count > 0)
            {
                return(playerRankingModelList);
            }


            else
            {
                foreach (Player player in allPlayers)
                {
                    PlayerRankingModel playerRankingModelToAdd = new PlayerRankingModel();
                    try
                    {
                        PlayerRanking PR = await rankingRepository.GetByPlayerIdAsync(player.PlayerId);

                        if (PR.TestUserProfileId == defaultProfileID)
                        {
                            PR.TestUserProfileId = profileID;
                            playerRankingModelToAdd.playerRanking = PR;
                            await _rankingRepository.AddAsync(PR);
                        }
                    }
                    catch
                    {
                        PlayerRanking PR = new PlayerRanking
                        {
                            PlayerId = player.PlayerId
                        };
                        playerRankingModelToAdd.playerRanking = PR;
                    }
                    finally
                    {
                        playerRankingModelToAdd.playerToRank = player;
                        playerRankingModelList.Add(playerRankingModelToAdd);
                    }
                }
                return(playerRankingModelList);
            }
        }
示例#6
0
 public PlayerRankingControl(PlayerRanking item, int steps, FrameworkElement container)
     : base(item, steps, v => System.Convert.ToInt32(v), container)
 {
     InitializeComponent();
     RankLabel  = PlayerRankLabel;
     MainPanel  = PlayerMainCanvas;
     ValueLabel = PointsLabel;
     ArrangeControl(false);
 }
示例#7
0
        private static List <RankingSnapshot> ScrapeRankingForTeam(int teamId, List <WeekEntry> weeks)
        {
            Console.WriteLine($"Scraping for team {teamId}");
            List <RankingSnapshot> rankings = new List <RankingSnapshot>();

            foreach (var week in weeks)
            {
                var rankingSnapshot = new RankingSnapshot();
                rankingSnapshot.Week = week;

                Console.WriteLine($"Scraping week {week}");
                var html = "http://sb.tournamentsoftware.com/ranking/category.aspx"
                           .AddQueryParam("id", week.Id)
                           .AddQueryParam("category", 2338)
                           .AddQueryParam("C2338FOG", teamId)
                           .GetStringFromUrl();

                var doc = new HtmlDocument();
                doc.LoadHtml(html);

                var rows = doc.QuerySelectorAll("tr");

                for (int i = 2; i < rows.Count; ++i)
                {
                    var row = rows[i].ChildNodes.Select(cn => cn.InnerText).ToList();

                    if (row.Count < 11)
                    {
                        continue;                 // first, 2nd alnd last has different row.Count...
                    }
                    var playerLink = rows[i].ChildNodes[4].ChildNodes[0].GetAttributeValue("href", string.Empty);

                    var playerIdStartPos = playerLink.LastIndexOf("player=");

                    var ranking = new PlayerRanking()
                    {
                        Id              = int.Parse(playerLink.Substring(playerIdStartPos + 7 + 1)), // TODO int.Parse(System.Web.HttpUtility.ParseQueryString(rows[i].ChildNodes[4].ChildNodes[0].GetAttributeValue("href")).Get("player")),
                        FullName        = row[4],
                        Points          = int.Parse(row[6]),
                        InterclubPoints = int.Parse(row[7]),
                        TotalPoints     = int.Parse(row[9]),
                        Level           = row[11],
                        TournamentCount = int.Parse(row[10])
                    };

                    rankingSnapshot.PlayerRankings.Add(ranking);
                }

                rankings.Add(rankingSnapshot);
            }

            return(rankings);
        }
示例#8
0
        private void CalculateAndSortPlayersScores()
        {
            _playersRankings = new List <PlayerRanking>(_players.Count);
            foreach (DBPlayer player in _players)
            {
                string teamName = string.Empty;
                if (_tournament.IsTeams)
                {
                    teamName = _teams.Find(x => x.TeamId == player.PlayerTeamId).TeamName;
                }
                string        countryImageUrl = _db.GetCountryImageUrl(player.PlayerCountryName);
                PlayerRanking playerRanking   = new PlayerRanking(player.PlayerId, player.PlayerName,
                                                                  player.PlayerTeamId, teamName, player.PlayerCountryName, countryImageUrl,
                                                                  CountryFlags.GetFlagImage(player.PlayerCountryName));

                List <DBTable> playerTables = _tables.FindAll(x =>
                                                              player.PlayerId == x.Player1Id || player.PlayerId == x.Player2Id ||
                                                              player.PlayerId == x.Player3Id || player.PlayerId == x.Player4Id);

                foreach (DBTable table in playerTables)
                {
                    if (player.PlayerId.ToString().Equals(table.PlayerEastId))
                    {
                        playerRanking.PlayerPoints += table.PlayerEastPoints.Equals(string.Empty) ? 0 : float.Parse(table.PlayerEastPoints);
                        playerRanking.PlayerScore  += table.PlayerEastScore.Equals(string.Empty) ? 0 : int.Parse(table.PlayerEastScore);
                    }
                    else if (player.PlayerId.ToString().Equals(table.PlayerSouthId))
                    {
                        playerRanking.PlayerPoints += table.PlayerSouthPoints.Equals(string.Empty) ? 0 : float.Parse(table.PlayerSouthPoints);
                        playerRanking.PlayerScore  += table.PlayerSouthScore.Equals(string.Empty) ? 0 : int.Parse(table.PlayerSouthScore);
                    }
                    else if (player.PlayerId.ToString().Equals(table.PlayerWestId))
                    {
                        playerRanking.PlayerPoints += table.PlayerWestPoints.Equals(string.Empty) ? 0 : float.Parse(table.PlayerWestPoints);
                        playerRanking.PlayerScore  += table.PlayerWestScore.Equals(string.Empty) ? 0 : int.Parse(table.PlayerWestScore);
                    }
                    else
                    {
                        playerRanking.PlayerPoints += table.PlayerNorthPoints.Equals(string.Empty) ? 0 : float.Parse(table.PlayerNorthPoints);
                        playerRanking.PlayerScore  += table.PlayerNorthScore.Equals(string.Empty) ? 0 : int.Parse(table.PlayerNorthScore);
                    }
                }
                _playersRankings.Add(playerRanking);
            }
            _playersRankings = _playersRankings.OrderByDescending(x => x.PlayerPoints).ThenByDescending(x => x.PlayerScore).ToList();
            for (int i = 0; i < _playersRankings.Count; i++)
            {
                _playersRankings[i].Order = i + 1;
            }
        }
示例#9
0
    public void AdicionaPontos()
    {
        PlayerRanking a = new PlayerRanking();
        Ranking       r = new Ranking();
        string        m_XmlTextAssetPath = Application.dataPath.ToString() + @"/Resources/" + strFileXML.Trim() + ".xml";

        if (File.Exists(m_XmlTextAssetPath))
        {
            r = XmlSupport.Deserialize <Ranking>(strFileXML);
        }
        a.nome  = nomeSave.text;
        a.ponto = Convert.ToInt32(pontosSave.text);
        r.players.Add(a);
        XmlSupport.Serialize <Ranking>(strFileXML, r);
        View();
    }
示例#10
0
        public void UpdateFromPlayerInfo(DetailedPlayerInfo playerInfo)
        {
            UpdateFromPlayerInfo((PlayerInfoBase)playerInfo);
            IsReferee    = playerInfo.IsReferee;
            IPAddress    = Regex.Replace(playerInfo.IPAddress, @":\d+", string.Empty, RegexOptions.Compiled);
            OnlineRights = playerInfo.OnlineRights;
            Language     = playerInfo.Language;

            PlayerRanking worldRanking = playerInfo.LadderStats.PlayerRankings.Find(ranking => ranking.Path == "World");

            if (worldRanking != null)
            {
                LadderRanking = worldRanking.Ranking;
            }

            DetailMode |= PlayerSettingsDetailMode.DetailedPlayerInfo;
        }
示例#11
0
        private void Callbacks_PlayerConnect(object sender, PlayerConnectEventArgs e)
        {
            RunCatchLog(() =>
            {
                DetailedPlayerInfo detailedPlayerInfo = GetDetailedPlayerInfo(e.Login);

                if (detailedPlayerInfo == null)
                {
                    e.Handled = true;
                    Context.RPCClient.Methods.Kick(e.Login, "TMSPS couldn't determine your player information, try reconnecting!");
                    return;
                }

                NicknameResolverFactory.Instance.Set(e.Login, detailedPlayerInfo.NickName);

                if (detailedPlayerInfo.NickName.IsNullOrTimmedEmpty())
                {
                    Context.RPCClient.Methods.Kick(e.Login, "Please provide a nickname!");
                    e.Handled = true;
                    return;
                }

                if (Settings.EnableJoinMessage)
                {
                    string nation           = "Unknown";
                    List <string> pathParts = new List <string>(detailedPlayerInfo.Path.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries));

                    if (pathParts.Count > 1)
                    {
                        nation = string.Join(" > ", pathParts.ToArray(), 1, pathParts.Count - 1);
                    }

                    int ladderRank = -1;

                    PlayerRanking worldRanking = detailedPlayerInfo.LadderStats.PlayerRankings.Find(ranking => ranking.Path == "World");

                    if (worldRanking != null)
                    {
                        ladderRank = worldRanking.Ranking;
                    }

                    SendFormattedMessage(Settings.JoinMessage, "Nickname", StripTMColorsAndFormatting(detailedPlayerInfo.NickName), "Nation", nation, "Ladder", ladderRank.ToString(Context.Culture));
                }
            }, "Error in Callbacks_PlayerConnect Method.", true);
        }
示例#12
0
        public static async Task AddPlayerRanking(Player returnedPlayer, IRankingRepository rankingRepository, IPlayerRepository playerRepository)
        {
            if (await rankingRepository.GetByPlayerIdAsync(returnedPlayer.PlayerId) != null)
            {
                PlayerRanking playerRankingToDelete = await rankingRepository.GetByPlayerIdAsync(returnedPlayer.PlayerId);

                await rankingRepository.DeleteAsync(playerRankingToDelete);

                Console.Write("Previous Ranking Deleted");
            }

            PlayerRanking playerRankingToAdd = new PlayerRanking();

            playerRankingToAdd.PlayerId = returnedPlayer.PlayerId;
            IEnumerable <PlayerRanking> allPlayerRanks = await rankingRepository.ListAllAsync();

            IEnumerable <Player> allPlayers = await playerRepository.ListAllAsync();

            if (allPlayerRanks.Count() > 0)
            {
                var highestRankedPlayer  = allPlayerRanks.Max(x => x.PlayerRank);
                var highestPprPlayer     = allPlayerRanks.Max(x => x.PprRank);
                var highestDynastyPlayer = allPlayerRanks.Max(x => x.DynastyRank);
                playerRankingToAdd.PlayerRank  = highestRankedPlayer + 1;
                playerRankingToAdd.PprRank     = highestPprPlayer + 1;
                playerRankingToAdd.DynastyRank = highestDynastyPlayer + 1;
                CalculatePlayerRanking(returnedPlayer, allPlayerRanks, allPlayers, playerRankingToAdd);
            }
            else
            {
                playerRankingToAdd.PlayerRank     = 1;
                playerRankingToAdd.PosRank        = 1;
                playerRankingToAdd.PprRank        = 1;
                playerRankingToAdd.PprPosRank     = 1;
                playerRankingToAdd.DynastyRank    = 1;
                playerRankingToAdd.DynastyPosRank = 1;
            }

            playerRankingToAdd.TestUserProfileId = 2025;
            playerRankingToAdd.isDefault         = true;
            await rankingRepository.AddAsync(playerRankingToAdd);
        }
示例#13
0
文件: UI.cs 项目: tomual/penguin-game
    void LoadRanking()
    {
        if (File.Exists(Application.persistentDataPath + "/playerRanking.txt"))
        {
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            FileStream      file            = File.Open(Application.persistentDataPath + "/playerRanking.txt", FileMode.Open);
            PlayerRanking   playerData      = (PlayerRanking)binaryFormatter.Deserialize(file);
            file.Close();

            rankaroo = playerData;
        }
        else
        {
            rankaroo               = new PlayerRanking();
            rankaroo.names         = new List <string>();
            rankaroo.weaponNames   = new List <string>();
            rankaroo.weaponAttacks = new List <int>();
            rankaroo.timeCompletes = new List <float>();
        }
    }
        public IActionResult Leaderboard()
        {
            var leaderBoardViewModel = new LeaderBoardViewModel();
            //List<int?> profiles = _prestigeScoreRepository.FindAll().Select(p => p.ProfileId).Distinct().ToList();
            var innerJoin = _prestigeScoreRepository.FindAll()
                            .Join(_profileRepository.FindAll(),
                                  playerScore => playerScore.ProfileId,
                                  playerProfile => playerProfile.Id,
                                  (playerScore, playerProfile) => new
            {
                profileName  = playerProfile.ProfileName,
                pointsEarned = playerScore.PointsEarned,
                totalScore   = playerScore.Score,
                source       = playerScore.Source,
                createDate   = playerScore.CreatedDate
            }).GroupBy(p => new { p.profileName, p.source }).Select(group => new
            {
                group.Key.profileName,
                score = group.Max(d => d.totalScore)
            }).OrderByDescending(s => s.score).Select(s => new
            {
                s.profileName,
                s.score
            }).GroupBy(p => p.profileName).Select(s => new
            {
                profileName = s.Key,
                score       = s.Max(m => m.score)
            }).OrderByDescending(o => o.score).ToList();

            List <PlayerRanking> playerRankings = new List <PlayerRanking>();

            foreach (var item in innerJoin)
            {
                PlayerRanking ranking = new PlayerRanking();
                ranking.ProfileName = item.profileName;
                ranking.Score       = item.score;
                playerRankings.Add(ranking);
            }

            return(View(playerRankings));
        }
示例#15
0
文件: UI.cs 项目: tomual/penguin-game
    public void SaveRanking()
    {
        Debug.Log("SaveRanking");
        LoadRanking();

        //int length = rankaroo.timeCompletes.Count;
        //bool worthSaving = false;
        //if (length >= 3)
        //{
        //    for (int i = 0; i < length; i++)
        //    {
        //        Debug.Log(rankaroo.weaponAttacks[i]);
        //        if (rankaroo.weaponAttacks[i] < player.Weapon.Attack)
        //        {
        //            worthSaving = true;
        //        }
        //    }
        //}
        //else
        //{
        //    worthSaving = true;
        //}

        Debug.Log("Yeah we save this");
        rankaroo.test = "";
        rankaroo.names.Add(player.Name);
        rankaroo.weaponNames.Add(player.Weapon.Name + " of " + player.Weapon.Modifier);
        rankaroo.weaponAttacks.Add(player.Weapon.Attack);
        rankaroo.timeCompletes.Add(Time.time - player.TimeStart);

        BinaryFormatter binaryFormatter = new BinaryFormatter();
        FileStream      file            = File.Open(Application.persistentDataPath + "/playerRanking.txt", FileMode.OpenOrCreate);

        PlayerRanking playerData = rankaroo;

        binaryFormatter.Serialize(file, playerData);
        file.Close();
    }
示例#16
0
        private IEnumerable <PlayerRanking> DeterminePlayerRankings()
        {
            var calculators = new List <IPlayerRankingCalculator>()
            {
                new PlayerTrueSkillCalculator(),
                new TimMahyFoosballCalculator(),
                new WinsPercentageCalculator(),
                new PlayerDuelEloFideCalculator(),
                new PlayerDuelEloGaussianCalculator(),
                new LongestWinningStreakCalculator(),
                new GlickoCalculator()
            };

            foreach (var calculator in calculators)
            {
                var ranking = new PlayerRanking()
                {
                    Name    = calculator.Name,
                    Ranking = GetRankingResults(calculator)
                };
                yield return(ranking);
            }
        }
示例#17
0
 public void Delete(PlayerRanking entityToDelete)
 {
     _repository.Delete(entityToDelete);
 }
示例#18
0
 public void Update(PlayerRanking entityToUpdate)
 {
     _repository.Update(entityToUpdate);
 }
示例#19
0
        private void Callbacks_PlayerConnect(object sender, PlayerConnectEventArgs e)
        {
            if (e.Handled)
            {
                Logger.Debug(string.Format("Callbacks_PlayerConnect method skipped for login: {0}. Eventargs stated: Already handled", e.Login));
                return;
            }

            RunCatchLog(() =>
            {
                PlayerSettings playerSettings = GetPlayerSettings(e.Login);

                if (playerSettings == null)
                {
                    Logger.Debug(string.Format("Could not get PlayerSettings for login: {0}", e.Login));
                    return;
                }

                int ladderRanking;

                if (!playerSettings.DetailMode.HasDetailedPlayerInfo())
                {
                    DetailedPlayerInfo detailedPlayerInfo = GetDetailedPlayerInfo(e.Login);

                    if (detailedPlayerInfo == null)
                    {
                        Logger.Debug(string.Format("Could not get DetailedPlayerInfo for login: {0}", e.Login));
                        return;
                    }

                    PlayerRanking worldRanking = detailedPlayerInfo.LadderStats.PlayerRankings.Find(ranking => ranking.Path == "World");

                    if (worldRanking == null)
                    {
                        Logger.Debug(string.Format("Could not find World-Ranking for login: {0}", e.Login));
                        return;
                    }

                    ladderRanking = worldRanking.Ranking;
                }
                else
                {
                    ladderRanking = playerSettings.LadderRanking;
                }


                if (ladderRanking != -1)
                {
                    return;
                }

                GenericResponse <bool> kickResponse = Context.RPCClient.Methods.Kick(e.Login, Settings.PersonalKickMessage);

                if (kickResponse.Erroneous)
                {
                    Logger.Debug(string.Format("Could not kick login: {0}. Reason: {1}({2})", e.Login, kickResponse.Fault.FaultMessage, kickResponse.Fault.FaultCode));
                    return;
                }

                SendFormattedMessage(Settings.PublicKickMessage, "Nickname", StripTMColorsAndFormatting(playerSettings.NickName));
                e.Handled = true;
            }, "Error in Callbacks_PlayerConnect Method.", true);
        }
示例#20
0
        private static void CalculatePlayerRanking(Player returnedPlayer, IEnumerable <PlayerRanking> allPlayerRankings, IEnumerable <Player> allPlayers, PlayerRanking playerRankingToAdd)
        {
            List <PlayerRanking> allPosRanks = new List <PlayerRanking>();

            foreach (PlayerRanking p in allPlayerRankings)
            {
                var    idToCheck     = p.PlayerId;
                Player playerToCheck = allPlayers.First(x => x.PlayerId == idToCheck);
                if (playerToCheck.PlayerPos == returnedPlayer.PlayerPos)
                {
                    allPosRanks.Add(p);
                }
            }
            if (allPosRanks.Count() > 0)
            {
                var highestPosRank        = allPosRanks.Max(x => x.PosRank);
                var highestPprPosRank     = allPosRanks.Max(x => x.PprPosRank);
                var highestDynastyPosRank = allPosRanks.Max(x => x.DynastyPosRank);
                playerRankingToAdd.PosRank        = highestPosRank + 1;
                playerRankingToAdd.PprPosRank     = highestPprPosRank + 1;
                playerRankingToAdd.DynastyPosRank = highestDynastyPosRank + 1;
            }
            else
            {
                playerRankingToAdd.PosRank        = 1;
                playerRankingToAdd.PprPosRank     = 1;
                playerRankingToAdd.DynastyPosRank = 1;
            }
        }
示例#21
0
        //public PlayerRanking GetByName(string PlayerRankingName)
        //{
        //Pass in WHERE clause as a lambda here
        //    List<PlayerRanking> _PlayerRankingsWithName = _repository.Get( e => e.Name == PlayerRankingName).ToList();
        //    return
        //}

        public void Insert(PlayerRanking entity)
        {
            _repository.Insert(entity);
        }
示例#22
0
 private static int SortPlayerRankings(PlayerRanking player1, PlayerRanking player2)
 {
     return(player2.score.CompareTo(player1.score));
 }
示例#23
0
        public void UpdateRankings(FixtureMatchVM fixtureMatch)
        {
            int nPositions = _context.Divisions.FirstOrDefault(d => d.ID == fixtureMatch.Fixture.DivisionID).PositionNo;

            Fixture fixture = fixtureMatch.Fixture;

            TeamRanking teamRankingHome         = new TeamRanking();
            var         teamRankingHomeToUpdate = _context.TeamRankings.FirstOrDefault(d => d.TeamID == fixture.HomeTeamID && d.SeasonID == fixture.SeasonID && d.DivisionID == fixture.DivisionID);

            TeamRanking teamRankingAway         = new TeamRanking();
            var         teamRankingAwayToUpdate = _context.TeamRankings.FirstOrDefault(d => d.TeamID == fixture.AwayTeamID && d.SeasonID == fixture.SeasonID && d.DivisionID == fixture.DivisionID);

            if (teamRankingHomeToUpdate == null)
            {
                teamRankingHome.TeamID     = fixture.HomeTeamID;
                teamRankingHome.DivisionID = fixture.DivisionID;
                teamRankingHome.SeasonID   = fixture.SeasonID;
                teamRankingHome.Points     = (double)(fixture.HomeTeamScore + fixture.HomeTeamBonus);
                teamRankingHome.Won        = (fixture.HomeTeamScore > fixture.AwayTeamScore) ? 1 : 0;
                teamRankingHome.Lost       = (fixture.HomeTeamScore < fixture.AwayTeamScore) ? 1 : 0;
                teamRankingHome.Played     = 1;

                _context.Add(teamRankingHome);
                _context.SaveChanges();
            }
            else
            {
                teamRankingHome         = teamRankingHomeToUpdate;
                teamRankingHome.Points += (double)(fixture.HomeTeamScore + fixture.HomeTeamBonus);
                teamRankingHome.Won    += (fixture.HomeTeamScore > fixture.AwayTeamScore) ? 1 : 0;
                teamRankingHome.Lost   += (fixture.HomeTeamScore < fixture.AwayTeamScore) ? 1 : 0;
                teamRankingHome.Played += 1;
                _context.Update(teamRankingHome);
                _context.SaveChanges();
            }

            if (teamRankingAwayToUpdate == null)
            {
                teamRankingAway.TeamID     = fixture.AwayTeamID;
                teamRankingAway.DivisionID = fixture.DivisionID;
                teamRankingAway.SeasonID   = fixture.SeasonID;
                teamRankingAway.Points     = (double)(fixture.AwayTeamScore + fixture.AwayTeamBonus);
                teamRankingAway.Won        = (fixture.HomeTeamScore < fixture.AwayTeamScore) ? 1 : 0;
                teamRankingAway.Lost       = (fixture.HomeTeamScore > fixture.AwayTeamScore) ? 1 : 0;
                teamRankingAway.Played     = 1;

                _context.Add(teamRankingAway);
                _context.SaveChanges();
            }
            else
            {
                teamRankingAway         = teamRankingAwayToUpdate;
                teamRankingAway.Points += (double)(fixture.AwayTeamScore + fixture.AwayTeamBonus);
                teamRankingAway.Won    += (fixture.HomeTeamScore < fixture.AwayTeamScore) ? 1 : 0;
                teamRankingAway.Lost   += (fixture.HomeTeamScore > fixture.AwayTeamScore) ? 1 : 0;
                teamRankingAway.Played += 1;
                _context.Update(teamRankingAway);
                _context.SaveChanges();
            }

            //Loop trough the matches to update the rankings
            foreach (Match match in fixtureMatch.Matches)
            {
                if (match.HomePlayerID != 1)
                {
                    //Add statistics for home player
                    PlayerRanking playerRankingHome         = new PlayerRanking();
                    var           playerRankingHomeToUpdate = _context.PlayerRankings.FirstOrDefault(d => d.PlayerID == match.HomePlayerID && d.SeasonID == fixture.SeasonID && d.DivisionID == fixture.DivisionID);

                    if (playerRankingHomeToUpdate == null)
                    {
                        playerRankingHome.TotalPositions = (int)match.PositionID;
                        playerRankingHome.PlayerID       = match.HomePlayerID;
                        playerRankingHome.SeasonID       = fixture.SeasonID;
                        playerRankingHome.DivisionID     = fixture.DivisionID;
                        playerRankingHome.Played         = 1;
                        if (match.HomePlayerScore > match.AwayPlayerScore)
                        {
                            playerRankingHome.WonMatches  = 1;
                            playerRankingHome.LostMatches = 0;
                        }
                        else
                        {
                            playerRankingHome.WonMatches  = 0;
                            playerRankingHome.LostMatches = 1;
                        }

                        playerRankingHome.WonGames  = (short)match.HomePlayerScore;
                        playerRankingHome.LostGames = (short)match.AwayPlayerScore;
                        playerRankingHome.Points    = RankPlayer.CalcPoints(match.Position.Name, (short)match.HomePlayerScore, (short)match.AwayPlayerScore, ResultFor.Home);
                        playerRankingHome.Average   = playerRankingHome.Points / playerRankingHome.Played;
                        _context.Add(playerRankingHome);
                    }
                    else
                    {
                        playerRankingHome                 = playerRankingHomeToUpdate;
                        playerRankingHome.Played         += 1;
                        playerRankingHome.TotalPositions += (int)match.PositionID;
                        if (match.HomePlayerScore > match.AwayPlayerScore)
                        {
                            playerRankingHome.WonMatches += 1;
                        }
                        else
                        {
                            playerRankingHome.LostMatches += 1;
                        }


                        playerRankingHome.WonGames  += (short)match.HomePlayerScore;
                        playerRankingHome.LostGames += (short)match.AwayPlayerScore;
                        playerRankingHome.Points    += RankPlayer.CalcPoints(match.Position.Name, (short)match.HomePlayerScore, (short)match.AwayPlayerScore, ResultFor.Home);
                        playerRankingHome.Average    = playerRankingHome.Points / playerRankingHome.Played;
                        _context.Update(playerRankingHome);
                    }
                }


                if (match.AwayPlayerID != 1)
                {
                    //Add statistics for away player
                    PlayerRanking playerRankingAway         = new PlayerRanking();
                    var           playerRankingAwayToUpdate = _context.PlayerRankings.FirstOrDefault(d => d.PlayerID == match.AwayPlayerID && d.SeasonID == fixture.SeasonID && d.DivisionID == fixture.DivisionID);

                    if (playerRankingAwayToUpdate == null)
                    {
                        playerRankingAway.PlayerID       = match.AwayPlayerID;
                        playerRankingAway.SeasonID       = fixture.SeasonID;
                        playerRankingAway.DivisionID     = fixture.DivisionID;
                        playerRankingAway.Played         = 1;
                        playerRankingAway.TotalPositions = (int)match.PositionID;
                        if (match.HomePlayerScore < match.AwayPlayerScore)
                        {
                            playerRankingAway.WonMatches  = 1;
                            playerRankingAway.LostMatches = 0;
                        }
                        else
                        {
                            playerRankingAway.WonMatches  = 0;
                            playerRankingAway.LostMatches = 1;
                        }


                        playerRankingAway.WonGames  = (short)match.AwayPlayerScore;
                        playerRankingAway.LostGames = (short)match.HomePlayerScore;
                        playerRankingAway.Points    = RankPlayer.CalcPoints(match.Position.Name, (short)match.HomePlayerScore, (short)match.AwayPlayerScore, ResultFor.Away);
                        playerRankingAway.Average   = playerRankingAway.Points / playerRankingAway.Played;
                        _context.Add(playerRankingAway);
                    }
                    else
                    {
                        playerRankingAway                 = playerRankingAwayToUpdate;
                        playerRankingAway.Played         += 1;
                        playerRankingAway.TotalPositions += (int)match.PositionID;
                        if (match.HomePlayerScore < match.AwayPlayerScore)
                        {
                            playerRankingAway.WonMatches += 1;
                        }
                        else
                        {
                            playerRankingAway.LostMatches += 1;
                        }

                        playerRankingAway.WonGames  += (short)match.AwayPlayerScore;
                        playerRankingAway.LostGames += (short)match.HomePlayerScore;
                        playerRankingAway.Points    += RankPlayer.CalcPoints(match.Position.Name, (short)match.HomePlayerScore, (short)match.AwayPlayerScore, ResultFor.Away);
                        playerRankingAway.Average    = playerRankingAway.Points / playerRankingAway.Played;
                        _context.Update(playerRankingAway);
                    }
                }
            }
            _context.SaveChanges();
        }