private Tuple <int, int, int> GetSuccessRateOfPrediction(TeamsInfoModel model) { int successScorePredictions = 0; int successResultPredictions = 0; int allMatches = 0; var teamName = model.Team1; var actualSeason = SeasonHelper.GetCurrentSeason(DateTime.Today); using (var ctx = new FootballEntities()) { var actualRound = MatchweekHelper.GetCurrentMatchweek(); var teamId = ctx.Teams.FirstOrDefault(e => e.FullName.Equals(teamName)).Id; foreach (var match in ctx.Matches.Where(e => (e.HomeId == teamId || e.AwayId == teamId) && DateTime.Compare(e.Date, DateTime.Today) < 0)) { var scoreOfMatch = match.Scores.FirstOrDefault(); if (scoreOfMatch == null) { continue; } if (!SeasonsComapare(model.SeasonSince, model.SeasonTo, match.Season)) { continue; } if (match.AwayGoalsPredicted == null || match.HomeGoalsPredicted == null) { continue; } if ((scoreOfMatch.HomeGoals > scoreOfMatch.AwayGoals && match.HomeGoalsPredicted > match.AwayGoalsPredicted) || (scoreOfMatch.HomeGoals < scoreOfMatch.AwayGoals && match.HomeGoalsPredicted < match.AwayGoalsPredicted) || (scoreOfMatch.HomeGoals == scoreOfMatch.AwayGoals && match.HomeGoalsPredicted == match.AwayGoalsPredicted)) { successResultPredictions++; } if (scoreOfMatch.HomeGoals == match.HomeGoalsPredicted && scoreOfMatch.AwayGoals == match.AwayGoalsPredicted) { successScorePredictions++; } allMatches++; } } return(Tuple.Create(allMatches, successResultPredictions, successScorePredictions)); }
public ActionResult H2H(TeamsInfoModel model) { using (var ctx = new FootballEntities()) { var teams = ctx.Teams.Select(x => x.FullName).ToList(); ViewBag.Teams = teams; ViewBag.allSeasons = GetListOfAvailablesSeasons(ctx); if (model.Team1 == null || model.Team2 == null || model.Team1.Equals(model.Team2)) { return(View()); } var team1Id = ctx.Teams.FirstOrDefault(e => e.FullName.Equals(model.Team1)).Id; var team2Id = ctx.Teams.FirstOrDefault(e => e.FullName.Equals(model.Team2)).Id; var singleMatchStats = new List <MatchStatisticsModel>(); var today = DateTime.UtcNow.Date; var actualSeason = GetCurrentSeason(today); var seasonTwoYearsAgo = GetCurrentSeason(DateTime.Today.AddYears(-2)); if (model.SeasonTo == null) { model.SeasonTo = actualSeason; } if (model.SeasonSince == null) { model.SeasonSince = seasonTwoYearsAgo; } var iFrom = Int32.Parse(model.SeasonSince.Remove(4)); var iTo = Int32.Parse(model.SeasonTo.Remove(4)); if (iFrom > iTo) { var tmp = model.SeasonSince; model.SeasonSince = model.SeasonTo; model.SeasonTo = tmp; } foreach (var match in ctx.Matches.Where(e => ((e.HomeId == team1Id && e.AwayId == team2Id) || e.HomeId == team2Id && e.AwayId == team1Id) && DateTime.Compare(e.Date, today) < 0) .OrderByDescending(d => d.Date)) { if (!SeasonsComapare(model.SeasonSince, model.SeasonTo, match.Season)) { continue; } var homeTeam = ctx.Teams.First(q => q.Id == match.HomeId).FullName; var awayTeam = ctx.Teams.First(q => q.Id == match.AwayId).FullName; var actualRound = ctx.Scores.Count(e => e.Date > new DateTime(2017, 06, 30)) / 10; //!!!!zmienic pozniej (z tego sezonu ilosc meczów z wynikiem / 10) var stats = ctx.Scores.FirstOrDefault(q => q.MatchId == match.Id); if (stats == null) { continue; } var season = GetCurrentSeason(match.Date); singleMatchStats.Add(new MatchStatisticsModel(homeTeam, awayTeam, match.Date, match.HomeGoalsPredicted, match.AwayGoalsPredicted, match.Matchweek, stats.HomeGoals, stats.AwayGoals, stats.HomeShots, stats.AwayShots, stats.HomeShotsOnTarget, stats.AwayShotsOnTarget, stats.HomeCorners, stats.AwayCorners, stats.HomeFouls, stats.AwayFouls, stats.HomeYellowCards, stats.AwayYellowCards, stats.HomeRedCards, stats.AwayRedCards, stats.HalfTimeHomeGoals, stats.HalfTimeAwayGoals, stats.Referee, season)); } ViewBag.Matches = singleMatchStats; return(View()); } }
public ActionResult TeamStatistics(TeamsInfoModel model) { if (model.Team1 == null) { model.Team1 = ""; } using (var ctx = new FootballEntities()) { var seasonStatsOfTeam = new List <TeamModel>(); var teams = ctx.Teams.Select(x => x.FullName).ToList(); ViewBag.teams = teams; ViewBag.allSeasons = GetListOfAvailablesSeasons(ctx); if (model.Team1.Equals("")) { return(View()); } var today = DateTime.UtcNow.Date; var season = GetCurrentSeason(today); var seasonTwoYearsAgo = GetCurrentSeason(DateTime.Today.AddYears(-2)); if (model.SeasonTo == null) { model.SeasonTo = season; } if (model.SeasonSince == null) { model.SeasonSince = seasonTwoYearsAgo; } var iFrom = Int32.Parse(model.SeasonSince.Remove(4)); var iTo = Int32.Parse(model.SeasonTo.Remove(4)); if (iFrom > iTo) { var tmp = model.SeasonSince; model.SeasonSince = model.SeasonTo; model.SeasonTo = tmp; } var statsOfPrediction = GetSuccessRateOfPrediction(model); ViewBag.matchesPredicted = statsOfPrediction.Item1; ViewBag.rightResultPrediction = statsOfPrediction.Item2; ViewBag.rightScoresPrediction = statsOfPrediction.Item3; var teamId = ctx.Teams.FirstOrDefault(e => e.FullName.Equals(model.Team1)).Id; //dodac liczenia miejsca w tabeli foreach (var singleTeam in ctx.FullStatistics.Where(e => e.TeamId == teamId).OrderByDescending(d => d.Season)) { if (!SeasonsComapare(model.SeasonSince, model.SeasonTo, singleTeam.Season)) { continue; } var name = singleTeam.Team.FullName; var team = new TeamModel(name, 0, singleTeam.MatchesPlayed, singleTeam.Points, singleTeam.MatchesWon, singleTeam.MatchesDrawn, singleTeam.MatchesLost, singleTeam.GoalsScored, singleTeam.GoalsLost, singleTeam.GoalsScored - singleTeam.GoalsLost, singleTeam.Season); seasonStatsOfTeam.Add(team); } ViewBag.SeasonStats = seasonStatsOfTeam; var singleMatchStats = new List <MatchStatisticsModel>(); var actualRound = ctx.Scores.Count(e => e.Match.Season.Equals(season)) / 10; //!!!!zmienic pozniej foreach (var match in ctx.Matches.Where(e => ((e.HomeId == teamId || e.AwayId == teamId) && (e.Matchweek <= actualRound || e.Season != season)) && DateTime.Compare(e.Date, today) < 0).OrderByDescending(d => d.Date)) { if (!SeasonsComapare(model.SeasonSince, model.SeasonTo, match.Season)) { continue; } var homeTeam = ctx.Teams.First(q => q.Id == match.HomeId).FullName; var awayTeam = ctx.Teams.First(q => q.Id == match.AwayId).FullName; var seasonOfMatch = GetCurrentSeason(match.Date); var stats = ctx.Scores.FirstOrDefault(q => q.MatchId == match.Id); singleMatchStats.Add(new MatchStatisticsModel(homeTeam, awayTeam, match.Date, match.AwayGoalsPredicted, match.HomeGoalsPredicted, match.Matchweek, stats.HomeGoals, stats.AwayGoals, stats.HomeShots, stats.AwayShots, stats.HomeShotsOnTarget, stats.AwayShotsOnTarget, stats.HomeCorners, stats.AwayCorners, stats.HomeFouls, stats.AwayFouls, stats.HomeYellowCards, stats.AwayYellowCards, stats.HomeRedCards, stats.AwayRedCards, stats.HalfTimeHomeGoals, stats.HalfTimeAwayGoals, stats.Referee, seasonOfMatch)); } ViewBag.Matches = singleMatchStats; //url var url = ctx.Teams.FirstOrDefault(x => x.FullName.Equals(model.Team1)).ImageURL; ViewBag.url = url; return(View()); } }