static int GetRoundInProgress(Cxt cxt, Tournament tournament) { DataTable dt = TournamentMatches.GetTournamentsMatchByTournamentID(tournament.TournamentID); DataTable dtTournamentUsers = TournamentUsers.GetTournamentUsersByTournamentID(StatusE.Active, tournament.TournamentID); foreach (DataRow item in dt.Rows) { TournamentMatch tm = new TournamentMatch(cxt, item); if (tm.TournamentMatchStatusE == TournamentMatchStatusE.InProgress || tm.TournamentMatchStatusE == TournamentMatchStatusE.Scheduled) { return((int)MsgE.ErrorTournamentNextRoundStarted); } } object objId = dt.Compute("max(Round)", ""); int round = Convert.ToInt32(objId); DataTable dtRounds = TournamentRounds.GetTournamentWinnersByRound(tournament.TournamentID, round); if (round == 0 && TournamentMatch.IsPreliminaryRound(round, dtTournamentUsers)) // if it is prelimiry round { if (dtRounds.Rows.Count == TournamentMatch.CountPreliminaryRoundUsers(dtTournamentUsers)) { return(0); } else { return((int)MsgE.ErrorTournamentNextRoundStarted); } } DataTable dtUsers = TournamentUsers.GetTournamentUsersByRound(tournament.TournamentID, round); if (dtRounds.Rows.Count != dtUsers.Rows.Count / 2) { return((int)MsgE.ErrorTournamentNextRoundStarted); } return(0); }
public static int GetKnockoutTournamentMatchesCount(Cxt cxt, Tournament tournament) { DataTable dtTournamentUsers = TournamentUsers.GetTournamentUsersByTournamentID(StatusE.Active, tournament.TournamentID); TournamentMatches tournamentMatches = new TournamentMatches(); TournamentUsers tournamentUsers = null; if (tournament.TournamentCurrentRound > 0) { TournamentUsers ratedTournamentUsers = null; if (TournamentMatch.IsPreliminaryRound(tournament.TournamentCurrentRound - 1, dtTournamentUsers)) { ratedTournamentUsers = GetTournamentPreliminaryWinners(cxt, tournament.TournamentID, tournament.TournamentCurrentRound, dtTournamentUsers); } else { ratedTournamentUsers = GetTournamentWinners(cxt, tournament.TournamentID, tournament.TournamentCurrentRound); } if (ratedTournamentUsers.Count == 0) { return(0); } if (tournament.TournamentCurrentRound > 2) // make sure,"tournament.TournamentCurrentRound - 1" is not preliminary round { TournamentUsers previousRoundUsers = GetTournamentWinners(cxt, tournament.TournamentID, tournament.TournamentCurrentRound - 1); if (previousRoundUsers.Count == 2 && ratedTournamentUsers.Count == 2) { return(0); } } CreateKnockoutTournamentMatches(cxt, ratedTournamentUsers, tournamentMatches, tournament.TournamentCurrentRound, tournament); if (tournament.MaxWinners >= 3 && ratedTournamentUsers.Count == 2) // for multiple winners { ratedTournamentUsers = GetTournamentLosers(cxt, tournament.TournamentID, tournament.TournamentCurrentRound); CreateKnockoutTournamentMatches(cxt, ratedTournamentUsers, tournamentMatches, tournament.TournamentCurrentRound, tournament); } } else { if (dtTournamentUsers.Rows.Count == 0) { return(0); } if (tournament.TournamentCurrentRound == 0) { if (!TournamentMatch.IsPreliminaryRound(tournament.TournamentCurrentRound, dtTournamentUsers)) { tournament.TournamentCurrentRound = 1; tournamentUsers = new TournamentUsers(cxt, dtTournamentUsers); //CreateKnockoutTournamentMatches(cxt, tournamentUsers, tournamentMatches, tournament.TournamentCurrentRound, tournament); //break; } else { tournamentUsers = GetPreliminaryRound(cxt, tournament, dtTournamentUsers); } } CreateKnockoutTournamentMatches(cxt, tournamentUsers, tournamentMatches, tournament.TournamentCurrentRound, tournament); } return(tournamentMatches.Count); }
public static void CreateKnockoutTournamentMatches(Cxt cxt, SqlTransaction trans, Tournament tournament, DataTable dtTournamentUsers) { TournamentMatches tournamentMatches = new TournamentMatches(); TournamentUsers tournamentUsers = null; if (tournament.TournamentCurrentRound > 0) { TournamentUsers ratedTournamentUsers = null; if (TournamentMatch.IsPreliminaryRound(tournament.TournamentCurrentRound - 1, dtTournamentUsers)) { ratedTournamentUsers = GetTournamentPreliminaryWinners(cxt, tournament.TournamentID, tournament.TournamentCurrentRound, dtTournamentUsers); } else { ratedTournamentUsers = GetTournamentWinners(cxt, tournament.TournamentID, tournament.TournamentCurrentRound); } if (ratedTournamentUsers.Count == 0) { return; } if (tournament.TournamentCurrentRound > 2) // make sure,"tournament.TournamentCurrentRound - 1" is not preliminary round { TournamentUsers previousRoundUsers = GetTournamentWinners(cxt, tournament.TournamentID, tournament.TournamentCurrentRound - 1); if (previousRoundUsers.Count == 2 && ratedTournamentUsers.Count == 2) { return; } } CreateKnockoutTournamentMatches(cxt, ratedTournamentUsers, tournamentMatches, tournament.TournamentCurrentRound, tournament); if (tournament.MaxWinners >= 3 && ratedTournamentUsers.Count == 2) // for multiple winners { ratedTournamentUsers = GetTournamentLosers(cxt, tournament.TournamentID, tournament.TournamentCurrentRound); CreateKnockoutTournamentMatches(cxt, ratedTournamentUsers, tournamentMatches, tournament.TournamentCurrentRound, tournament); } } else { if (dtTournamentUsers.Rows.Count == 0) { return; } if (tournament.TournamentCurrentRound == 0) { if (!TournamentMatch.IsPreliminaryRound(tournament.TournamentCurrentRound, dtTournamentUsers)) { tournament.TournamentCurrentRound = 1; tournamentUsers = new TournamentUsers(cxt, dtTournamentUsers); //CreateKnockoutTournamentMatches(cxt, tournamentUsers, tournamentMatches, tournament.TournamentCurrentRound, tournament); //break; } else { tournamentUsers = GetPreliminaryRound(cxt, tournament, dtTournamentUsers); } } CreateKnockoutTournamentMatches(cxt, tournamentUsers, tournamentMatches, tournament.TournamentCurrentRound, tournament); } if (tournamentMatches.Count > 0) { tournamentMatches.Save(trans); } }