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