public ActionResult TeamReport(int id) { ViewBag.Id = id; var reportViewer = new ReportViewer() { ProcessingMode = ProcessingMode.Local, Width = Unit.Pixel(800), Height = Unit.Pixel(1000), ShowExportControls = true }; var league = _db.Leagues.Find(id); if (league == null) { return(HttpNotFound()); } switch (league.TeamSize) { case 1: reportViewer.LocalReport.ReportPath = Server.MapPath("/ReportFiles/SingleTeams.rdlc"); break; case 2: reportViewer.LocalReport.ReportPath = Server.MapPath("/ReportFiles/PairsTeams.rdlc"); break; case 3: reportViewer.LocalReport.ReportPath = Server.MapPath("/ReportFiles/TriplesTeams.rdlc"); break; } var p2 = new ReportParameter("Description", league.LeagueName); reportViewer.LocalReport.SetParameters(new ReportParameter[] { p2 }); var teams = _db.Teams.Where(x => x.Leagueid == id); var ds = new TournamentDS(); foreach (var team in teams) { ds.Team.AddTeamRow(team.TeamNo, team.Player.Membership.FullName, team.Lead == null? "" : team.Player2.Membership.FullName, team.ViceSkip == null ? "" : team.Player1.Membership.FullName); } reportViewer.LocalReport.DataSources.Add(new ReportDataSource("Team", ds.Team.Rows)); ViewBag.ReportViewer = reportViewer; return(View()); }
public ActionResult ByesReport(int id) { var reportViewer = new ReportViewer() { ProcessingMode = ProcessingMode.Local, Width = Unit.Pixel(800), Height = Unit.Pixel(1000), ShowExportControls = true }; var ds = new TournamentDS(); var league = _db.Leagues.Find(id); if (league == null) { return(HttpNotFound()); } foreach (var item in _db.Schedules.Where(x => x.Leagueid == id).OrderBy(x => x.GameDate)) { var matches = _db.Matches.Where(x => x.Rink == -1 && x.WeekId == item.id); if (matches.Any()) { ds.Byes.AddByesRow(item.WeekDate, matches.First().Team.TeamNo, Players(matches.First().Team, league.TeamSize)); } } reportViewer.LocalReport.ReportPath = Server.MapPath("/ReportFiles/Byes.rdlc"); var p2 = new ReportParameter("Description", league.LeagueName); reportViewer.LocalReport.SetParameters(new ReportParameter[] { p2 }); reportViewer.LocalReport.DataSources.Add(new ReportDataSource("Byes", ds.Byes.Rows)); ViewBag.ReportViewer = reportViewer; return(View()); }
/// <summary> /// Determine the standings based on all the games played so far /// </summary> /// <param name="weekid">the record id of the week in the schedule table</param> /// <param name="teamsize">number of players per team</param> /// <param name="leagueid">the record id of the league table</param> /// <returns></returns> public static TournamentDS.StandDataTable Doit(int weekid, League league) { int teamsize = league.TeamSize; var ds = new TournamentDS(); var list = new List <Standing>(); using (var db = new TournamentEntities()) { // get the names of the player for each team foreach (var team in db.Teams.Where(x => x.Leagueid == league.id)) { string players = ""; switch (teamsize) { case 1: players = team.Player.Membership.NickName; break; case 2: players = $"{team.Player.Membership.NickName}, {team.Player2.Membership.NickName}"; break; case 3: players = $"{team.Player.Membership.NickName}, {team.Player1.Membership.NickName}, {team.Player2.Membership.NickName}"; break; } list.Add(new Standing() { TeamNumber = team.TeamNo, Wins = 0, Loses = 0, TotalScore = 0, Ties = 0, Byes = 0, Players = players }); } // determine the total score and wins and loses for each team for each week foreach (var week in db.Schedules.Where(x => x.id <= weekid && x.Leagueid == league.id)) { //cancelled weeks do not count if (week.Cancelled) { continue; } var total = 0; var numMatches = 0; var bye = false; bool forfeit = false; foreach (var match in db.Matches.Where(x => x.WeekId == week.id)) { // both teams forfeits if (match.Rink != -1 && match.ForFeitId == -1) { var winner = list.Find(x => x.TeamNumber == match.Team.TeamNo); var loser = list.Find(x => x.TeamNumber == match.Team1.TeamNo); winner.Loses++; loser.Loses++; } // tie game else if (match.Team1Score == match.Team2Score && match.Rink != -1 && match.ForFeitId == 0) { var winner = list.Find(x => x.TeamNumber == match.Team.TeamNo); var loser = list.Find(x => x.TeamNumber == match.Team1.TeamNo); winner.Ties++; loser.Ties++; if (league.PointsLimit) { winner.TotalScore += Math.Min(20, match.Team1Score); loser.TotalScore += Math.Min(20, match.Team2Score); total += Math.Min(20, match.Team1Score); } else { winner.TotalScore += match.Team1Score; loser.TotalScore += match.Team2Score; total += match.Team1Score; } numMatches++; } //team 1 wins else if (match.Team1Score > match.Team2Score && match.Rink != -1 && match.ForFeitId == 0) { var winner = list.Find(x => x.TeamNumber == match.Team.TeamNo); var loser = list.Find(x => x.TeamNumber == match.Team1.TeamNo); winner.Wins++; loser.Loses++; if (league.PointsLimit) { winner.TotalScore += Math.Min(20, match.Team1Score); loser.TotalScore += Math.Min(20, match.Team2Score); total += Math.Min(20, match.Team1Score); } else { winner.TotalScore += match.Team1Score; loser.TotalScore += match.Team2Score; total += match.Team1Score; } numMatches++; } //team 2 wins else if (match.Rink != -1 && match.ForFeitId == 0) { var winner = list.Find(x => x.TeamNumber == match.Team1.TeamNo); var loser = list.Find(x => x.TeamNumber == match.Team.TeamNo); winner.Wins++; loser.Loses++; if (league.PointsLimit) { winner.TotalScore += Math.Min(20, match.Team2Score); loser.TotalScore += Math.Min(20, match.Team1Score); total += Math.Min(20, match.Team2Score); } else { winner.TotalScore += match.Team2Score; loser.TotalScore += match.Team1Score; total += match.Team2Score; } numMatches++; } // one team forfeits else if (match.Rink != -1 && match.ForFeitId > 0) { var winner = list.Find(x => x.TeamNumber == (match.Team.TeamNo == match.ForFeitId? match.Team1.TeamNo: match.Team.TeamNo)); var loser = list.Find(x => x.TeamNumber == match.ForFeitId); forfeit = true; winner.Wins++; loser.Loses++; } //bye else { var winner = list.Find(x => x.TeamNumber == match.Team.TeamNo); winner.Byes++; bye = true; } } // for byes or forfeit (the team that did not forfeit), the team gets the average score of all winning games that week and a win if (bye || forfeit) { foreach (var match in db.Matches.Where(x => x.WeekId == week.id)) { if (match.Rink != -1 && match.ForFeitId > 0) { var winner = list.Find(x => x.TeamNumber == (match.Team.TeamNo == match.ForFeitId ? match.Team1.TeamNo : match.Team.TeamNo)); winner.TotalScore += total / numMatches; } else if (match.Rink == -1 && match.ForFeitId != -1) { var winner = list.Find(x => x.TeamNumber == match.Team.TeamNo); winner.TotalScore += total / numMatches; } } } } } int place = 1; int nextplace = 1; Standing previous = new Standing() { Loses = 0, TotalScore = 0, Wins = 0, Ties = 0, Byes = 0 }; foreach (var item in list) { var points = item.Wins * league.WinPoints + item.Ties * league.TiePoints + item.Byes * league.ByePoints; if (league.PointsCount) { item.TotalPoints = points * 1000 + item.TotalScore; } else { item.TotalPoints = points; item.TotalScore = points; } } ds.Stand.Clear(); list.Sort((a, b) => (b.TotalPoints).CompareTo(a.TotalPoints)); foreach (var item in list) { if (item.TotalPoints != previous.TotalPoints) { place = nextplace; } ds.Stand.AddStandRow(item.TeamNumber, item.Players, item.TotalScore, place, item.Wins, item.Loses, item.Ties, item.Byes); previous = item; nextplace++; } return(ds.Stand); }
public ActionResult StandingsReport(int id, int weekid) { var reportViewer = new ReportViewer() { ProcessingMode = ProcessingMode.Local, Width = Unit.Pixel(800), Height = Unit.Pixel(1000), ShowExportControls = true }; ViewBag.WeekId = weekid; ViewBag.Id = id; var league = _db.Leagues.Find(id); if (league == null) { return(HttpNotFound()); } var ds = new TournamentDS(); bool IsBye = false; bool isCancelled = false; var week = _db.Schedules.Find(weekid); if (week == null) { return(HttpNotFound()); } var weekDate = week.WeekDate; if (!week.Cancelled) { foreach (var item in _db.Matches.Include(x => x.Team1).Include(x => x.Team).Include(x => x.Schedule).Where(x => x.WeekId == weekid && x.Rink != -1) .OrderBy(x => x.Rink)) { var forfeit = ""; if (item.ForFeitId > 0) { if (item.ForFeitId == item.Team.TeamNo) { forfeit = item.Team.TeamNo.ToString(); } else { forfeit = item.Team1.TeamNo.ToString(); } } else if (item.ForFeitId == -1) { forfeit = "Both"; } else { if (item.Team1Score + item.Team2Score == 0) { ViewBag.Error = "Some matches were not scored"; reportViewer.LocalReport.ReportPath = Server.MapPath("/ReportFiles/Empty.rdlc"); var p11 = new ReportParameter("Message", "Some matches were not scored"); reportViewer.LocalReport.SetParameters(new ReportParameter[] { p11 }); ViewBag.ReportViewer = reportViewer; return(View()); } } ds.Game.AddGameRow(item.Team.TeamNo, Players(item.Team, league.TeamSize), item.Team1.TeamNo, Players(item.Team1, league.TeamSize), item.Team1Score, item.Team2Score, item.Rink, forfeit); } // check for byes var matches = _db.Matches.Where(x => x.Rink == -1 && x.WeekId == weekid); if (matches.Any()) { var match = matches.First(); ds.Byes.AddByesRow(match.Schedule.WeekDate, match.Team.TeamNo, Players(match.Team, league.TeamSize)); reportViewer.LocalReport.DataSources.Add(new ReportDataSource("Bye", ds.Byes.Rows)); IsBye = true; } else { reportViewer.LocalReport.DataSources.Add(new ReportDataSource("Bye", new System.Data.DataTable())); } } else { isCancelled = true; reportViewer.LocalReport.DataSources.Add(new ReportDataSource("Game", new System.Data.DataTable())); reportViewer.LocalReport.DataSources.Add(new ReportDataSource("Bye", new System.Data.DataTable())); } reportViewer.LocalReport.DataSources.Add(new ReportDataSource("Stand", CalculateStandings.Doit(weekid, league).Rows)); reportViewer.LocalReport.ReportPath = Server.MapPath("/ReportFiles/Standings.rdlc"); reportViewer.LocalReport.DataSources.Add(new ReportDataSource("Game", ds.Game.Rows)); var p1 = new ReportParameter("WeekDate", weekDate); var p2 = new ReportParameter("Description", league.LeagueName); var p3 = new ReportParameter("IsBye", IsBye ? "1" : "0"); var p4 = new ReportParameter("IsCancelled", isCancelled ? "1" : "0"); var p5 = new ReportParameter("PointsCount", league.PointsCount ? "1" : "0"); var p6 = new ReportParameter("TiesAllowed", league.TiesAllowed ? "1" : "0"); reportViewer.LocalReport.SetParameters(new ReportParameter[] { p1, p2, p3, p4, p5, p6 }); ViewBag.ReportViewer = reportViewer; return(View()); }