Exemple #1
0
    public static EventStats GetEventResults(int LeagueID, int LeagueEventID, Dictionary <int, int> handicaps)
    {
        EventStats retVal = new EventStats();

        retVal.initialize();

        Dictionary <int, int>          matchups       = DatabaseFunctions.GetMatchups(LeagueEventID);
        Dictionary <string, string>    LeagueSettings = DatabaseFunctions.GetLeagueSettings(LeagueID);
        Dictionary <int, List <byte> > scores         = DatabaseFunctions.GetScores(LeagueEventID);
        CourseInfo            courseInfo = DatabaseFunctions.GetCourseInfo(LeagueEventID);
        Dictionary <int, int> subs       = DatabaseFunctions.GetSubs(LeagueEventID);

        if (handicaps == null)
        {
            handicaps = Scoring.GetPlayerHandicapsForEvent(LeagueID, LeagueEventID, scores.Keys.ToList());
        }

        if (LeagueSettings.ContainsKey("MaxHandicap"))
        {
            int        maxhandicap = int.Parse(LeagueSettings["MaxHandicap"]);
            List <int> keys        = handicaps.Keys.ToList();
            foreach (int key in keys)
            {
                if (handicaps[key] > maxhandicap)
                {
                    handicaps[key] = maxhandicap;
                }
            }
        }

        int Team1PlayerA_ID, Team1PlayerB_ID, Team2PlayerA_ID, Team2PlayerB_ID;
        //Add No shows to Handicaps and scores
        var noShowScores = Scoring.GetNoShowScores(courseInfo);

        scores.Add(0, noShowScores);
        scores.Add(-1, noShowScores);
        scores.Add(-2, noShowScores);

        if (LeagueSettings.ContainsKey("NewScoring"))
        {
            handicaps.Add(0, 7);  //no show
            handicaps.Add(-1, 7); //blind1
            handicaps.Add(-2, 7); //blind2
        }
        else
        {
            handicaps.Add(0, 0);  //no show
            handicaps.Add(-1, 9); //blind1
            handicaps.Add(-2, 9); //blind2
        }

        Dictionary <int, Team> teams = DatabaseFunctions.GetTeams(LeagueID);

        int index = 0;

        //foreach matchup
        foreach (int team1ID in matchups.Keys)
        {
            Scoring.GetGolferIDs(team1ID, LeagueEventID, subs, handicaps, scores, out Team1PlayerA_ID, out Team1PlayerB_ID);
            Scoring.GetGolferIDs(matchups[team1ID], LeagueEventID, subs, handicaps, scores, out Team2PlayerA_ID, out Team2PlayerB_ID);
            Scoring.MatchupResults results_A = Scoring.GetMatchupResults(scores[Team1PlayerA_ID], scores[Team2PlayerA_ID], handicaps[Team1PlayerA_ID], handicaps[Team2PlayerA_ID], courseInfo);
            results_A.Team1PlayerID = Team1PlayerA_ID;
            results_A.Team2PlayerID = Team2PlayerA_ID;
            Scoring.MatchupResults results_B = Scoring.GetMatchupResults(scores[Team1PlayerB_ID], scores[Team2PlayerB_ID], handicaps[Team1PlayerB_ID], handicaps[Team2PlayerB_ID], courseInfo);
            results_B.Team1PlayerID = Team1PlayerB_ID;
            results_B.Team2PlayerID = Team2PlayerB_ID;
            index++;

            if (LeagueSettings.ContainsKey("SubPtsLimit"))
            {
                results_A = AdjustResultsForSubs(results_A, WasPlayerSubbing(Team1PlayerA_ID, team1ID, subs, teams), WasPlayerSubbing(Team2PlayerA_ID, matchups[team1ID], subs, teams));
                results_B = AdjustResultsForSubs(results_B, WasPlayerSubbing(Team1PlayerB_ID, team1ID, subs, teams), WasPlayerSubbing(Team2PlayerB_ID, matchups[team1ID], subs, teams));
            }

            if (LeagueSettings.ContainsKey("NewScoring"))
            {
                results_A = AdjustResultsForNoShows(results_A, Team1PlayerA_ID, Team2PlayerA_ID);
                results_B = AdjustResultsForNoShows(results_B, Team1PlayerB_ID, Team2PlayerB_ID);
            }

            if (Team1PlayerA_ID > 0)
            {
                retVal.grossScores.Add(Team1PlayerA_ID, results_A.grossScorePlayer1);
                retVal.netScores.Add(Team1PlayerA_ID, results_A.netScorePlayer1);
            }
            if (Team2PlayerA_ID > 0)
            {
                retVal.grossScores.Add(Team2PlayerA_ID, results_A.grossScorePlayer2);
                retVal.netScores.Add(Team2PlayerA_ID, results_A.netScorePlayer2);
            }
            if (Team1PlayerB_ID > 0)
            {
                retVal.netScores.Add(Team1PlayerB_ID, results_B.netScorePlayer1);
                retVal.grossScores.Add(Team1PlayerB_ID, results_B.grossScorePlayer1);
            }

            if (Team2PlayerB_ID > 0)
            {
                retVal.grossScores.Add(Team2PlayerB_ID, results_B.grossScorePlayer2);
                retVal.netScores.Add(Team2PlayerB_ID, results_B.netScorePlayer2);
            }

            int team1MedalPlayPts, team2MedalPlayPts;
            CalculateMedalPlay(out team1MedalPlayPts, out team2MedalPlayPts, results_A, results_B, LeagueSettings);

            retVal.teamPts.Add(team1ID, results_A.totalPtsPlayer1 + results_B.totalPtsPlayer1 + team1MedalPlayPts);
            retVal.teamPts.Add(matchups[team1ID], results_A.totalPtsPlayer2 + results_B.totalPtsPlayer2 + team2MedalPlayPts);
            retVal.matchupResultsA.Add(team1ID, results_A);
            retVal.matchupResultsB.Add(team1ID, results_B);
        }

        return(retVal);
    }