Пример #1
0
        public ActionResult PlayerStats(int playerID)
        {
            Setup();
            List <Player> allPlayers = _playerManager.GetAllPlayers().OrderBy(p => p.Name).ToList();

            var playerList = allPlayers.Select(p => new SelectListItem {
                Text = p.Name, Value = p.ID.ToString()
            });                                                                                                                 // CHANGED THIS to ID FROM Name
            var currentPlayer = allPlayers.FirstOrDefault(p => p.Email == User.Identity.Name);

            if (playerID <= 0 && currentPlayer?.ID > 0)
            {
                playerID = currentPlayer.ID;
            }
            else if (playerID <= 0 && currentPlayer?.ID <= 0)
            {
                playerID = allPlayers.FirstOrDefault()?.ID ?? 0;
            }

            PlayerScoreSummary playerStatistics = _matchManager.GetPlayerStatistics(playerID);

            ViewBag.playerID    = playerList;
            ViewBag.CurrentUser = allPlayers.First(p => p.ID == playerID).Name;

            return(View("PlayerStats", playerStatistics));
        }
Пример #2
0
        public PlayerScoreSummary GetPlayerStatistics(int playerID)
        {
            var matches = _matchRepository.GetAllMatches(playerID);

            List <PlayerScoreItem> playerScores = matches.GroupBy(m => m.Player2ID).Select(lm =>
                                                                                           new PlayerScoreItem {
                PlayerID    = lm.Key,
                Name        = _playerRepository.GetPlayerName(lm.Key),
                GameWins    = lm.Sum(m => m.Player1Wins),
                GameDraws   = lm.Sum(m => m.Draws),
                GameLosses  = lm.Sum(m => m.Player2Wins),
                MatchWins   = lm.Count(m => ParseMatchResult(m) == MatchResult.Win),
                MatchLosses = lm.Count(m => ParseMatchResult(m) == MatchResult.Loss),
                MatchDraws  = lm.Count(m => ParseMatchResult(m) == MatchResult.Draw)
            }
                                                                                           ).ToList();

            var totalScores = new PlayerScoreItem
            {
                PlayerID    = 0,
                Name        = "Total",
                GameWins    = matches.Sum(m => m.Player1Wins),
                GameDraws   = matches.Sum(m => m.Draws),
                GameLosses  = matches.Sum(m => m.Player2Wins),
                MatchWins   = matches.Count(m => ParseMatchResult(m) == MatchResult.Win),
                MatchLosses = matches.Count(m => ParseMatchResult(m) == MatchResult.Loss),
                MatchDraws  = matches.Count(m => ParseMatchResult(m) == MatchResult.Draw)
            };

            var topEightGroups = matches.Where(m => m.Round == 4).GroupBy(m => m.Event);
            var wins           = 0;

            foreach (var group in topEightGroups)
            {
                if (group.All(m => m.HasWon(playerID)))
                {
                    wins++;
                }
            }

            var leaguesUndefeatedSwissMatches = 0;
            var events       = _eventRepository.LoadAllDBEvents();
            var leagueGroups = matches.Where(m => ((m.Round == 1 || m.Round == 2 | m.Round == 3) && (m.Player1ID == playerID || m.Player2ID == playerID))).GroupBy(m => m.Event);

            foreach (var group in leagueGroups)
            {
                if (!group.All(m => m.Event == group.First().Event))
                {
                    throw new Exception("Group matches don't all meet expectations");
                }

                var thisEvent   = events.Single(e => e.Name == group.First().Event);
                var swissRounds = thisEvent.RoundMatches * thisEvent.Rounds;

                if (group.All(m => m.HasWon(playerID)))
                {
                    leaguesUndefeatedSwissMatches += 1;
                }
            }

            var summary = new PlayerScoreSummary
            {
                OpponentScoreItems         = playerScores,
                Totals                     = totalScores,
                LeagueTopEights            = topEightGroups.Count(),
                LeagueWins                 = wins,
                LeaguesUndefeatedInMatches = leaguesUndefeatedSwissMatches
            };

            return(summary);
        }