Example #1
0
        public static void MergePlayers(int skaterToKeepId, int skaterToJoinId)
        {
            using (var db = new BojoBoxContext())
            {
                var skaterKeep = db.Skaters.First(a => a.Id == skaterToKeepId);
                var skaterJoin = db.Skaters.First(a => a.Id == skaterToJoinId);

                var skaterKeepSeasons = db.SkaterSeasons.Where(a => a.SkaterId == skaterKeep.Id).ToList();
                var skaterJoinSeasons = db.SkaterSeasons.Where(a => a.SkaterId == skaterJoin.Id).ToList();

                var mergeSeasons = new List <SkaterSeason>();
                mergeSeasons.AddRange(skaterKeepSeasons);
                mergeSeasons.AddRange(skaterJoinSeasons);

                foreach (var season in mergeSeasons)
                {
                    season.Skater   = skaterKeep;
                    season.SkaterId = skaterKeep.Id;
                }

                db.SaveChanges();

                db.Skaters.Remove(skaterJoin);
                db.SaveChanges();
            }
        }
Example #2
0
        private static void DeleteData(BojoBoxContext db)
        {
            db.SkaterSeasons.RemoveRange(db.SkaterSeasons);
            db.GoalieSeasons.RemoveRange(db.GoalieSeasons);
            db.Goalies.RemoveRange(db.Goalies);
            db.Skaters.RemoveRange(db.Skaters);
            db.Teams.RemoveRange(db.Teams);
            db.SaveChanges();

            db.Franchises.RemoveRange(db.Franchises);
            db.Leagues.RemoveRange(db.Leagues);
            db.SaveChanges();

            string[] tableNames = { "SkaterSeasons", "GoalieSeasons", "Goalies", "Skaters", "Teams", "Franchises", "Leagues" };
            foreach (var table in tableNames)
            {
                string sql = "DBCC CHECKIDENT('" + table + "', RESEED, 0)";

#pragma warning disable EF1000 // Possible SQL injection vulnerability.
                db.Database.ExecuteSqlCommand(sql);
#pragma warning restore EF1000 // Possible SQL injection vulnerability.

                db.SaveChanges();
            }
        }
Example #3
0
        private static void AddTeamsAndFranchises(BojoBoxContext db, string[] teamNames, string[] teamAcronyms, int leagueId)
        {
            for (int i = 0; i < teamNames.Length; i++)
            {
                var name    = teamNames[i];
                var acronym = teamAcronyms[i];
                var team    = new Team()
                {
                    Acronym = acronym,
                    Name    = name,
                };
                db.Teams.Add(team);
            }
            db.SaveChanges();

            for (int i = 0; i < teamAcronyms.Length; i++)
            {
                var acronym   = teamAcronyms[i];
                var team      = db.Teams.First(a => a.Acronym == acronym);
                var franchise = new Franchise()
                {
                    LeagueId      = leagueId,
                    CurrentTeamId = team.Id
                };
                franchise.Teams = new Team[] { team };
                db.Franchises.Add(franchise);
            }

            db.SaveChanges();
        }
Example #4
0
        public static void AddFranchise(int currentTeamId, int leagueId)
        {
            using (var db = new BojoBoxContext())
            {
                var team = db.Teams.FirstOrDefault(a => a.Id == currentTeamId);

                if (team == null)
                {
                    throw new Exception("No team found");
                }

                Franchise franchise = new Franchise()
                {
                    CurrentTeam   = team,
                    CurrentTeamId = currentTeamId,
                    LeagueId      = leagueId
                };

                var teams = new List <Team>();
                teams.Add(team);
                franchise.Teams = teams;

                db.Franchises.Add(franchise);
                db.SaveChanges();
            }
        }
Example #5
0
        public static void DeleteExistingSeason(BojoBoxContext db, int seasonNumber, bool isPlayoffs, int leagueId)
        {
            var skaterSeasons = db.SkaterSeasons.Where(a => a.Season == seasonNumber).Where(a => a.isPlayoffs == isPlayoffs).Where(a => a.LeagueId == leagueId);
            var goalieSeasons = db.GoalieSeasons.Where(a => a.Season == seasonNumber).Where(a => a.isPlayoffs == isPlayoffs).Where(a => a.LeagueId == leagueId);

            db.SkaterSeasons.RemoveRange(skaterSeasons);
            db.GoalieSeasons.RemoveRange(goalieSeasons);
        }
Example #6
0
 public static void ResetDatabase()
 {
     using (var db = new BojoBoxContext())
     {
         DeleteData(db);
         InitializeData(db);
     }
 }
Example #7
0
 public static void RemoveExtraPlayers()
 {
     using (var db = new BojoBoxContext())
     {
         var skatersToRemove = db.Skaters.Include(a => a.Seasons).Where(a => !a.Seasons.Any()).ToList();
         db.Skaters.RemoveRange(skatersToRemove);
         db.SaveChanges();
     }
 }
Example #8
0
 public static void RenamePlayer(int skaterId, string name)
 {
     using (var db = new BojoBoxContext())
     {
         var skaterA = db.Skaters.First(a => a.Id == skaterId);
         skaterA.Name = name;
         db.SaveChanges();
     }
 }
Example #9
0
        public void Upload()
        {
            using (db = new BojoBoxContext())
            {
                GetLeague();
                DeleteExistingSeason();
                db.SaveChanges();

                AddTeams();
                AddSkaters();
                AddGoalies();
                db.SaveChanges();
            }
        }
Example #10
0
        public static IEnumerable <string> GetTeamsFromFranchise(int franchiseId)
        {
            using (var db = new BojoBoxContext())
            {
                var franchise = db.Franchises
                                .Include(a => a.Teams)
                                .FirstOrDefault(a => a.Id == franchiseId);

                if (franchise == null)
                {
                    return(null);
                }

                return(franchise.Teams.Select(a => a.Name));
            }
        }
Example #11
0
        public static void MergeTeams(int idKeep, int[] idsjoin)
        {
            using (var db = new BojoBoxContext())
            {
                var teamKeep  = db.Teams.First(a => a.Id == idKeep);
                var teamsJoin = db.Teams.Where(a => idsjoin.Contains(a.Id));

                if (teamKeep == null || teamsJoin.Count() != idsjoin.Count())
                {
                    throw new Exception("Team not found");
                }

                var teamKeepSeasons        = db.SkaterSeasons.Where(a => a.TeamId == teamKeep.Id).ToList();
                var teamJoinSeasons        = db.SkaterSeasons.Where(a => a.TeamId.HasValue && idsjoin.Contains(a.TeamId.Value)).ToList();
                var teamKeepSeasonsGoalies = db.GoalieSeasons.Where(a => a.TeamId == teamKeep.Id).ToList();
                var teamJoinSeasonsGoalies = db.GoalieSeasons.Where(a => a.TeamId.HasValue && idsjoin.Contains(a.TeamId.Value)).ToList();

                var mergeSeasons = new List <SkaterSeason>();
                mergeSeasons.AddRange(teamKeepSeasons);
                mergeSeasons.AddRange(teamJoinSeasons);
                foreach (var season in mergeSeasons)
                {
                    season.Team   = teamKeep;
                    season.TeamId = teamKeep.Id;
                }

                var mergeSeasonsGoalies = new List <GoalieSeason>();
                mergeSeasonsGoalies.AddRange(teamKeepSeasonsGoalies);
                mergeSeasonsGoalies.AddRange(teamJoinSeasonsGoalies);
                foreach (var season in mergeSeasonsGoalies)
                {
                    season.Team   = teamKeep;
                    season.TeamId = teamKeep.Id;
                }

                db.SaveChanges();

                foreach (var team in teamsJoin)
                {
                    db.Teams.Remove(team);
                }

                db.SaveChanges();
            }
        }
Example #12
0
        public static void SetFranchiseTeam(int franchiseId, int currentTeamId)
        {
            using (var db = new BojoBoxContext())
            {
                var team      = db.Teams.FirstOrDefault(a => a.Id == currentTeamId);
                var franchise = db.Franchises.FirstOrDefault(a => a.Id == franchiseId);

                if (team == null || franchise == null)
                {
                    throw new Exception("No team/franchise found");
                }

                franchise.CurrentTeamId = team.Id;
                db.SaveChanges();

                AddTeamToFranchise(currentTeamId, franchiseId);
            }
        }
Example #13
0
        public static void AddTeamToFranchise(int teamId, int franchiseId)
        {
            using (var db = new BojoBoxContext())
            {
                var team      = db.Teams.FirstOrDefault(a => a.Id == teamId);
                var franchise = db.Franchises.Include(a => a.Teams).FirstOrDefault(a => a.Id == franchiseId);

                if (franchise == null || team == null)
                {
                    return;
                }

                var teams = franchise.Teams.ToList();
                teams.Add(team);
                franchise.Teams = teams;

                db.SaveChanges();
            }
        }
Example #14
0
        public SearchResults GetSearchResults(string rawSearchInput)
        {
            string        search  = rawSearchInput.ToLowerInvariant().Trim();
            SearchResults results = new SearchResults()
            {
                SearchInput = search, Results = null
            };

            using (db = new BojoBoxContext())
            {
                List <PlayerDto> playerDtos = new List <PlayerDto>();

                var skaterNulls = db.Skaters.Where(a => a.Name == null).ToList();
                db.Skaters.RemoveRange(skaterNulls);

                var skaters = db.Skaters
                              .Where(a => a.Name != null && a.Name.ToLowerInvariant().Contains(search))
                              .Select(a => PlayerDto.Create(a))
                              .ToArray();

                var goalies = db.Goalies
                              .Where(a => a.Name != null && a.Name.ToLowerInvariant().Contains(search))
                              .Select(a => PlayerDto.Create(a))
                              .ToArray();

                foreach (var skater in skaters)
                {
                    skater.Acronym = "skater";
                }

                foreach (var goalie in goalies)
                {
                    goalie.Acronym = "goalie";
                }

                playerDtos.AddRange(skaters);
                playerDtos.AddRange(goalies);

                results.Results = playerDtos.OrderBy(a => a.Name).ToArray();
            }

            return(results);
        }
Example #15
0
        public static void SplitPlayer(int skaterId, int firstPlayerLasstSeason, string suffixA, string suffixB)
        {
            using (var db = new BojoBoxContext())
            {
                var skaterA    = db.Skaters.First(a => a.Id == skaterId);
                var skaterName = skaterA.Name;

                var skaterSeasonsA = db.SkaterSeasons.Where(a => a.SkaterId == skaterA.Id && a.Season <= firstPlayerLasstSeason).ToList();
                var skaterSeasonsB = db.SkaterSeasons.Where(a => a.SkaterId == skaterA.Id && a.Season > firstPlayerLasstSeason).ToList();

                skaterA.Name    = skaterName + " " + suffixA;
                skaterA.Seasons = skaterSeasonsA;

                var skaterB = new Skater();
                skaterB.Name     = skaterName + " " + suffixB;
                skaterB.Seasons  = skaterSeasonsB;
                skaterB.LeagueId = skaterA.LeagueId;
                db.Skaters.Add(skaterB);

                db.SaveChanges();
            }
        }
Example #16
0
        public StatTableDto GetSeasonGoalieTable(StatParametersDto paramDto)
        {
            StatTableDto      statTableDto    = new StatTableDto();
            StatParametersDto cleanParameters = CleanSeasonParameters(paramDto);

            cleanParameters.Col = cleanParameters.Col ?? 1;

            using (db = new BojoBoxContext())
            {
                LeagueDto leagueDto = GetLeague(cleanParameters.League.Value);
                TeamDto   teamDto   = GetTeam(cleanParameters.Team.Value);

                statTableDto.Teams      = GetTeamParameters(leagueDto.Id);
                statTableDto.Seasons    = GetSeasonParameters(leagueDto.Id, cleanParameters.SeasonType == 2);
                statTableDto.HeaderText = leagueDto.Acronym + " - Season Stats";

                var goalieSeasonQuery = db.GoalieSeasons
                                        .Where(a => a.LeagueId == leagueDto.Id);

                if (teamDto != null)
                {
                    goalieSeasonQuery = goalieSeasonQuery.Where(a => a.TeamId == teamDto.Id);
                }
                else
                {
                    goalieSeasonQuery = goalieSeasonQuery.Where(a => a.SubtotalForId == null);
                }

                switch (cleanParameters.SeasonType)
                {
                case 1: goalieSeasonQuery = goalieSeasonQuery.Where(a => !a.isPlayoffs); break;

                case 2: goalieSeasonQuery = goalieSeasonQuery.Where(a => a.isPlayoffs); break;
                }

                if (cleanParameters.Era > 0)
                {
                    switch (cleanParameters.Era)
                    {
                    case 1: goalieSeasonQuery = goalieSeasonQuery.Where(a => a.Season >= 12); break;

                    case 2: goalieSeasonQuery = goalieSeasonQuery.Where(a => a.Season <= 11 && a.Season >= 9); break;

                    case 3: goalieSeasonQuery = goalieSeasonQuery.Where(a => a.Season <= 8); break;
                    }
                }

                if (cleanParameters.Season > 0)
                {
                    goalieSeasonQuery = goalieSeasonQuery.Where(a => a.Season == cleanParameters.Season);
                }

                var idStatPairs = GetIdStatPairs(cleanParameters.Col, goalieSeasonQuery);

                idStatPairs = idStatPairs.OrderByDescending(a => a.Stat);
                // TODO: Check if to sort ascending

                int pageSize = 20;
                statTableDto.PageCount = GetPageCount(cleanParameters, idStatPairs);
                int[] selectedIds = idStatPairs.Select(b => b.Id).Skip(cleanParameters.Page.Value * pageSize).Take(pageSize).ToArray();

                var goalieSeasonDtos = db.GoalieSeasons
                                       .Include(a => a.Team)
                                       .Include(a => a.Goalie)
                                       .Where(a => selectedIds.Contains(a.Id))
                                       .Select(a => GoalieSeasonFullDto.Create(a))
                                       .ToList();

                List <PlayerTableRow> rows = new List <PlayerTableRow>();
                foreach (var dto in goalieSeasonDtos)
                {
                    PlayerTableRow row = new PlayerTableRow();
                    row.Player = dto.Goalie;
                    row.Season = dto.Season;
                    row.Team   = dto.Team;
                    row.Stats  = GetGoalieStats(dto);
                    rows.Add(row);
                }
                statTableDto.PlayerRows = rows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(4));
                AddRanks(statTableDto.PlayerRows, 1 + (cleanParameters.Page.Value * pageSize));
            }

            statTableDto.DisplayType    = "season";
            statTableDto.PlayerType     = "goalie";
            statTableDto.StatParameters = cleanParameters;
            return(statTableDto);
        }
Example #17
0
        public StatTableDto GetCareerGoalieTable(StatParametersDto paramDto)
        {
            StatTableDto      statTableDto    = new StatTableDto();
            StatParametersDto cleanParameters = CleanCareerParameters(paramDto);

            cleanParameters.Col = cleanParameters.Col ?? 1;

            using (db = new BojoBoxContext())
            {
                LeagueDto  leagueDto = GetLeague(cleanParameters.League.Value);
                TeamDto    teamDto   = GetTeam(cleanParameters.Team.Value);
                List <int> teamIds   = null;
                if (teamDto != null)
                {
                    teamIds = GetFranchiseTeamIds(teamDto.Id);
                }

                statTableDto.Teams = GetTeamParameters(leagueDto.Id);

                statTableDto.HeaderText = leagueDto.Acronym + " - Career Stats";

                var goalieCareerQuery = db.GoalieSeasons.Where(a => a.LeagueId == leagueDto.Id);

                if (teamDto != null)
                {
                    goalieCareerQuery = goalieCareerQuery.Where(a => a.TeamId.HasValue && teamIds.Contains(a.TeamId.Value));
                }
                else
                {
                    goalieCareerQuery = goalieCareerQuery.Where(a => a.TeamId.HasValue);
                }

                bool isPlayoffs = CheckIfPlayoffs(cleanParameters.SeasonType.Value);
                goalieCareerQuery = goalieCareerQuery.Where(a => a.isPlayoffs == isPlayoffs);

                var idStatPairs = GetIdStatPairsCareer(cleanParameters.Col, goalieCareerQuery);
                idStatPairs = idStatPairs.GroupBy(a => a.Id, b => b.Stat, (x, y) => new IdStatPair(x, y.Sum()));

                idStatPairs = idStatPairs.OrderByDescending(a => a.Stat);
                // TODO: Check if to sort ascending

                int pageSize = 20;
                statTableDto.PageCount = GetPageCount(cleanParameters, idStatPairs);
                var selectedGoalieIds = idStatPairs.Select(b => b.Id).Skip(cleanParameters.Page.Value * pageSize).Take(pageSize).ToArray();

                var goalieRows = db.GoalieSeasons
                                 .Include(a => a.Goalie)
                                 .Where(a => selectedGoalieIds.Contains(a.GoalieId))
                                 .Where(a => a.TeamId.HasValue)
                                 .Where(a => a.LeagueId == leagueDto.Id)
                                 .Where(a => a.isPlayoffs == isPlayoffs);

                if (teamDto != null)
                {
                    goalieRows = goalieRows.Where(a => a.TeamId.HasValue && teamIds.Contains(a.TeamId.Value));
                }

                statTableDto.PlayerRows = goalieRows.GroupBy(a => a.Goalie, b => b, (skater, rows) => new PlayerTableRow()
                {
                    Player      = PlayerDto.Create(skater),
                    Season      = null,
                    Team        = null,
                    SeasonCount = rows.Select(a => a.Season).Distinct().Count(),
                    TeamCount   = rows.Where(x => x.GoalieId == skater.Id).Select(x => x.TeamId).Distinct().Count(),
                    Stats       = new int[]
                    {
                        rows.Sum(x => x.GamesPlayed),
                        rows.Sum(x => x.Wins),
                        rows.Sum(x => x.Losses),
                        rows.Sum(x => x.OvertimeLosses),
                        rows.Sum(x => x.Minutes),
                        rows.Sum(x => x.PenaltyMinutes),
                        rows.Sum(x => x.Shutouts),
                        rows.Sum(x => x.GoalsAgainst),
                        rows.Sum(x => x.ShotsAgainst),
                        rows.Sum(x => x.Assists),
                        rows.Sum(x => x.EmptyGoalAgainst),
                        rows.Sum(x => x.PenaltyShotSaves),
                        rows.Sum(x => x.PenaltyShotAttempts),
                        rows.Sum(x => x.Starts),
                        rows.Sum(x => x.Backups),
                    }
                })
                                          .ToList();

                statTableDto.PlayerRows = statTableDto.PlayerRows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(4));
                AddRanks(statTableDto.PlayerRows, 1 + (cleanParameters.Page.Value * pageSize));
            }

            statTableDto.DisplayType    = "career";
            statTableDto.PlayerType     = "goalie";
            statTableDto.StatParameters = cleanParameters;
            return(statTableDto);
        }
Example #18
0
        public StatTableDto GetPlayerGoalieTable(int goalieId, StatParametersDto paramDto)
        {
            StatTableDto      statTableDto    = new StatTableDto();
            StatParametersDto cleanParameters = CleanPlayerParameters(paramDto);

            using (db = new BojoBoxContext())
            {
                LeagueDto leagueDto = GetLeague(cleanParameters.League.Value);
                TeamDto   teamDto   = GetTeam(cleanParameters.Team.Value);
                PlayerDto goalieDto = GetGoalie(goalieId);

                statTableDto.HeaderText = goalieDto.Name;

                var goalieSeasonsQuery = db.GoalieSeasons
                                         .Include(a => a.Goalie)
                                         .Include(a => a.Team)
                                         .Include(a => a.League)
                                         .Where(a => a.GoalieId == goalieDto.Id);

                bool isPlayoffs = CheckIfPlayoffs(cleanParameters.SeasonType.Value);
                goalieSeasonsQuery = goalieSeasonsQuery.Where(a => a.isPlayoffs == isPlayoffs);

                if (cleanParameters.League > 0)
                {
                    goalieSeasonsQuery = goalieSeasonsQuery.Where(a => a.LeagueId == leagueDto.Id);
                }

                int teamCount = goalieSeasonsQuery.Where(a => a.Team != null).Select(a => a.Team.Id).Distinct().Count();

                statTableDto.Teams = goalieSeasonsQuery.Select(a => a.Team).Where(a => a != null).DistinctBy(a => a.Id).Select(a => TeamDto.Create(a)).ToList();

                if (cleanParameters.Team > 0)
                {
                    goalieSeasonsQuery = goalieSeasonsQuery.Where(a => a.TeamId == cleanParameters.Team);
                }
                else
                {
                    goalieSeasonsQuery = goalieSeasonsQuery.Where(a => a.SubtotalForId == null);
                }

                List <GoalieSeasonFullDto> goalieSeasonDtos = goalieSeasonsQuery.Select(a => GoalieSeasonFullDto.Create(a)).ToList();

                int i = 1;
                List <PlayerTableRow> rows = new List <PlayerTableRow>();
                foreach (var dto in goalieSeasonDtos)
                {
                    PlayerTableRow row = new PlayerTableRow();
                    row.Player = dto.Goalie;
                    row.Rank   = i++;
                    row.Season = dto.Season;
                    row.Team   = dto.Team;
                    row.Stats  = GetGoalieStats(dto);
                    rows.Add(row);
                }

                if (cleanParameters.Col == null)
                {
                    rows = rows.OrderByDescending(a => a.Season).ToList();
                }
                else
                {
                    rows = rows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(13)).ToList();
                }

                statTableDto.PlayerRows = rows;

                List <int> totals = new List <int>();
                if (rows.Any())
                {
                    totals = GetTotals(rows);
                    totals.Insert(0, teamCount);
                    totals.Insert(0, rows.Count());
                }
                statTableDto.Totals = totals;
            }

            statTableDto.DisplayType    = "player";
            statTableDto.PlayerType     = "goalie";
            statTableDto.StatParameters = cleanParameters;
            return(statTableDto);
        }
Example #19
0
        private static void InitializeData(BojoBoxContext db)
        {
            db.Leagues.Add(new League()
            {
                Acronym = "SHL", Name = "Simulated Hockey League"
            });
            db.SaveChanges();
            db.Leagues.Add(new League()
            {
                Acronym = "SMJHL", Name = "Simulated Major Junior Hockey League"
            });
            db.SaveChanges();
            db.Leagues.Add(new League()
            {
                Acronym = "IIHF", Name = "International Ice Hockey Federation"
            });
            db.SaveChanges();

            string[] shlNames =
            {
                "Winnipeg Jets",
                "Buffalo Stampede",
                "New England Wolfpack",
                "Los Angeles Panthers",
                "Toronto North Stars",
                "Calgary Dragons",
                "San Francisco Pride",
                "Hamilton Steelhawks",
                "West Kendall Platoon",
                "Seattle Riot",
                "Manhattan Rage",
                "Edmonton Blizzard",
                "Minnesota Chiefs",
                "Texas Renegades",
            };
            string[] shlAcronyms =
            {
                "WIN",
                "BUF",
                "NEW",
                "LAP",
                "TOR",
                "CAL",
                "SFP",
                "HAM",
                "WKP",
                "SEA",
                "MAN",
                "EDM",
                "MIN",
                "TEX",
            };

            string[] smjhlNames =
            {
                "Anchorage Armada",
                "Colorado Raptors",
                "Vancouver Whalers",
                "Halifax Raiders",
                "Detroit Falcons",
                "St.Louis Scarecrows",
                "Kelowna Knights",
                "Montreal Militia",
                "Lethbridge Lions",
                "Anaheim Outlaws",
            };
            string[] smjhlAcronyms =
            {
                "ANC",
                "COL",
                "VAN",
                "HAL",
                "DET",
                "STL",
                "KEL",
                "MTL",
                "LBL",
                "ANA",
            };

            string[] iihfNames =
            {
                "Sweden",
                "USA",
                "United Kingdom",
                "Ireland",
                "Norway",
                "Latvia",
                "Germany",
                "Finland",
                "Czechoslovakia",
                "Canada",
                "Russia",
                "Austria",
            };
            string[] iihfAcronyms =
            {
                "SWE",
                "USA",
                "GBR",
                "IRL",
                "NOR",
                "LAT",
                "GER",
                "FIN",
                "CZE",
                "CAN",
                "RUS",
                "AUS",
            };

            AddTeamsAndFranchises(db, shlNames, shlAcronyms, 1);
            AddTeamsAndFranchises(db, smjhlNames, smjhlAcronyms, 2);
            AddTeamsAndFranchises(db, iihfNames, iihfAcronyms, 3);

            db.SaveChanges();
        }
Example #20
0
        public StatTableDto GetCareerSkaterTable(StatParametersDto paramDto)
        {
            StatTableDto      statTableDto    = new StatTableDto();
            StatParametersDto cleanParameters = CleanCareerParameters(paramDto);

            cleanParameters.Col = cleanParameters.Col ?? 3;

            using (db = new BojoBoxContext())
            {
                LeagueDto  leagueDto = GetLeague(cleanParameters.League.Value);
                TeamDto    teamDto   = GetTeam(cleanParameters.Team.Value);
                List <int> teamIds   = null;
                if (teamDto != null)
                {
                    teamIds = GetFranchiseTeamIds(teamDto.Id);
                }

                statTableDto.Teams = GetTeamParameters(leagueDto.Id);

                statTableDto.HeaderText = leagueDto.Acronym + " - Career Stats";

                var skaterCareerQuery = db.SkaterSeasons.Where(a => a.LeagueId == leagueDto.Id);

                if (teamDto != null)
                {
                    skaterCareerQuery = skaterCareerQuery.Where(a => a.TeamId.HasValue && teamIds.Contains(a.TeamId.Value));
                }
                else
                {
                    skaterCareerQuery = skaterCareerQuery.Where(a => a.TeamId.HasValue);
                }

                bool isPlayoffs = CheckIfPlayoffs(cleanParameters.SeasonType.Value);
                skaterCareerQuery = skaterCareerQuery.Where(a => a.isPlayoffs == isPlayoffs);

                var idStatPairs = GetIdStatPairsCareer(cleanParameters.Col, skaterCareerQuery);

                idStatPairs = idStatPairs.GroupBy(a => a.Id, b => b.Stat, (x, y) => new IdStatPair(x, y.Sum()));

                idStatPairs = idStatPairs.OrderByDescending(a => a.Stat);
                // TODO: Check if to sort ascending

                int pageSize = 20;
                statTableDto.PageCount = GetPageCount(cleanParameters, idStatPairs);
                var selectedSkaterIds = idStatPairs.Select(b => b.Id).Skip(cleanParameters.Page.Value * pageSize).Take(pageSize).ToArray();

                var skaterRows = db.SkaterSeasons
                                 .Include(a => a.Skater)
                                 .Where(a => selectedSkaterIds.Contains(a.SkaterId))
                                 .Where(a => a.TeamId.HasValue)
                                 .Where(a => a.LeagueId == leagueDto.Id)
                                 .Where(a => a.isPlayoffs == isPlayoffs);

                if (teamDto != null)
                {
                    skaterRows = skaterRows.Where(a => a.TeamId.HasValue && teamIds.Contains(a.TeamId.Value));
                }

                statTableDto.PlayerRows = skaterRows.GroupBy(a => a.Skater, b => b, (skater, rows) => new PlayerTableRow()
                {
                    Player      = PlayerDto.Create(skater),
                    Season      = null,
                    Team        = null,
                    SeasonCount = rows.Select(a => a.Season).Distinct().Count(),
                    TeamCount   = rows.Where(x => x.SkaterId == skater.Id).Select(x => x.TeamId).Distinct().Count(),
                    Stats       = new int[]
                    {
                        rows.Sum(x => x.GamesPlayed),
                        rows.Sum(x => x.Goals),
                        rows.Sum(x => x.Assists),
                        rows.Sum(x => x.Points),
                        rows.Sum(x => x.PlusMinus),
                        rows.Sum(x => x.PenaltyMinutes),
                        rows.Sum(x => x.PenaltyMajors),
                        rows.Sum(x => x.Hits),
                        rows.Sum(x => x.HitsTaken),
                        rows.Sum(x => x.Shots),
                        rows.Sum(x => x.OwnShotsBlocked),
                        rows.Sum(x => x.OwnShotsMissed),
                        rows.Sum(x => x.ShotsBlocked),
                        rows.Sum(x => x.MinutesPlayed),
                        rows.Sum(x => x.PPGoals),
                        rows.Sum(x => x.PPAssists),
                        rows.Sum(x => x.PPPoints),
                        rows.Sum(x => x.PPShots),
                        rows.Sum(x => x.PPMinutes),
                        rows.Sum(x => x.PKGoals),
                        rows.Sum(x => x.PKAssists),
                        rows.Sum(x => x.PKPoints),
                        rows.Sum(x => x.PKShots),
                        rows.Sum(x => x.PKMinutes),
                        rows.Sum(x => x.GameWinningGoals),
                        rows.Sum(x => x.GameTyingGoals),
                        rows.Sum(x => x.FaceoffWins),
                        rows.Sum(x => x.FaceoffsTotal),
                        rows.Sum(x => x.EmptyNetGoals),
                        rows.Sum(x => x.HatTricks),
                        rows.Sum(x => x.PenaltyShotGoals),
                        rows.Sum(x => x.PenaltyShotAttempts),
                        rows.Sum(x => x.FightsWon),
                        rows.Sum(x => x.FightsLost),
                        rows.Sum(x => x.FightsDraw)
                    }
                })
                                          .ToList();

                statTableDto.PlayerRows = statTableDto.PlayerRows.OrderByDescending(a => a.Stats.ElementAt(cleanParameters.Col.Value)).ThenByDescending(a => a.Stats.ElementAt(13));
                AddRanks(statTableDto.PlayerRows, 1 + (cleanParameters.Page.Value * pageSize));
            }

            statTableDto.DisplayType    = "career";
            statTableDto.PlayerType     = "skater";
            statTableDto.StatParameters = cleanParameters;
            return(statTableDto);
        }