Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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());
        }