public override void Save() { System.Data.SqlClient.SqlTransaction t = SqlHelper.BeginTransaction(Config.ConnectionString); try { if (GameResultIDE != GameResultE.InProgress && GameResultIDE != GameResultE.None && GameResultIDE != GameResultE.NoResult) { if (GameResultIDE != GameResultE.WhiteBye || GameResultIDE != GameResultE.BlackBye) { Elo e = new Elo(this); e.Update(t); } if (this.Challenge.Stake > 0 && this.Challenge.Flate != 0) { UserFini.UpdateFiniTransfer(t, base.Cxt, this, this.Challenge.Stake, this.Challenge.Flate); } if (this.IsTournamentMatch) { if (this.GameResultIDE == GameResultE.Draw) { this.TournamentMatch.TournamentMatchStatusE = TournamentMatchStatusE.Draw; this.TournamentMatch.GameResultID = this.GameResultID; this.TournamentMatch.Save(t); } else { string matchID = this.TournamentMatch.TournamentMatchID.ToString(); this.TournamentMatch.GameResultID = this.GameResultID; TournamentMatches.UpdateStatus(t, base.Cxt, TournamentMatchStatusE.Finsihed, matchID, this.GameResultIDE); } this.TournamentMatch.UpdateUserPoints(t); } } base.Save(t); SqlHelper.CommitTransaction(t); if (IsFinished) { TournamentMatch.CreateChildMatchIfRequired(Cxt, this.TournamentMatch, null); } } catch (Exception ex) { SqlHelper.RollbackTransaction(t); Log.Write(Cxt, ex); } }
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 void CreateSchavengenSystem(Cxt cxt, SqlTransaction trans, Tournament tournament, DataTable dtTournamentUsers) { int roundValue = 1; int val = 0; TournamentMatches.DeleteTournamentMatchByTournamentID(trans, tournament.TournamentID); Teams Teams = new Teams(cxt, Teams.GetTeamsByTournamentID(tournament.TournamentID)); roundValue = 1; int round = dtTournamentUsers.Rows.Count / Teams.Count; int doubleRoundNo = tournament.DoubleRoundNo * 2; if (doubleRoundNo == 0) { doubleRoundNo = 1; } bool isWhite = false; for (int k = 0; k <= doubleRoundNo - 1; k++) { if (isWhite) { isWhite = false; } else { isWhite = true; } //Teams Teams = new Teams(cxt, Teams.GetTeamsByTournamentID(tournament.TournamentID)); if (Teams.Count > 0) { DataTable dtCalculatePair = SchTeamPairing(Teams.Count); Team teamW = null; Team teamB = null; for (int i = 0; i < dtCalculatePair.Rows.Count; i++) { DataRow drCal = dtCalculatePair.Rows[i]; teamW = Teams[Convert.ToInt32(drCal["TeamA"]) - 1]; teamB = Teams[Convert.ToInt32(drCal["TeamB"]) - 1]; dtTournamentUsers.DefaultView.RowFilter = "TeamID = " + teamW.TeamID.ToString() + " or TeamID = " + teamB.TeamID.ToString(); dtTournamentUsers.DefaultView.Sort = "TeamID"; TournamentUsers tu = new TournamentUsers(cxt, dtTournamentUsers.DefaultView.ToTable()); if (tu.Count > 0) { CreateSchavengenMatches(cxt, tournament, tu, isWhite, k, round, ref val, ref roundValue); tournament.TournamentMatches.Save(trans); } } } } }
static void CreateKnockoutTournamentMatches(Cxt cxt, TournamentUsers tournamentUsers, TournamentMatches tournamentMatches, int round, Tournament Tournament) { if (tournamentUsers.Count > 0) { for (int i = 0; i < tournamentUsers.Count / 2; i++) { TournamentUser userW = new TournamentUser(cxt, tournamentUsers.DataTable.Rows[i]); TournamentUser userB = new TournamentUser(cxt, tournamentUsers.DataTable.Rows[tournamentUsers.Count - i - 1]); TournamentMatch tournamentMatch = new TournamentMatch(cxt, 0); tournamentMatch.Round = round; tournamentMatch.WhiteUserID = userW.UserID; tournamentMatch.BlackUserID = userB.UserID; tournamentMatch.TournamentID = Tournament.TournamentID; tournamentMatch.TournamentMatchTypeE = TournamentMatchTypeE.Normal; if (Tournament.TournamentStartDate > DateTime.Now) { tournamentMatch.MatchStartDate = Tournament.TournamentStartDate; } else { tournamentMatch.MatchStartDate = DateTime.Now; } if (Tournament.TournamentStartTime > DateTime.Now) { tournamentMatch.MatchStartTime = Tournament.TournamentStartTime; } else { tournamentMatch.MatchStartTime = DateTime.Now; } tournamentMatch.TimeMin = Tournament.TimeControlMin; tournamentMatch.TimeSec = Tournament.TimeControlSec; tournamentMatch.TournamentMatchStatusE = TournamentMatchStatusE.Scheduled; tournamentMatch.EloWhiteBefore = userW.EloBefore; tournamentMatch.EloBlackBefore = userB.EloBefore; tournamentMatch.CreatedBy = Ap.CurrentUserID; tournamentMatch.DateCreated = DateTime.Now; tournamentMatch.StatusID = (int)StatusE.Active; tournamentMatches.Add(tournamentMatch); } } }
static TournamentUsers GetTournamentPreliminaryWinners1(Cxt cxt, int tournamentID, int round, DataTable dtTournamentUsers) { TournamentUsers tuWinners = new TournamentUsers(); TournamentMatches tournamentMatches = new TournamentMatches(cxt, GetTournamntPlayers(tournamentID)); TournamentMatches tmW = new TournamentMatches(); TournamentUsers tuW = new TournamentUsers(); TournamentUsers tuL = new TournamentUsers(); int wCounter = 0, bCounter = 0, dCounter = 0; foreach (DataRow item in tournamentMatches.DataTable.Rows) { TournamentMatch tournamentMatch = new TournamentMatch(cxt, item); TournamentUser tournamentUserB = null; TournamentUser tournamentUserW = null; switch (tournamentMatch.GameResultIDE) { case GameResultE.None: break; case GameResultE.InProgress: break; case GameResultE.WhiteWin: bCounter += 1; tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); tuW.Add(tournamentUserW); tuL.Add(tournamentUserB); break; case GameResultE.WhiteLose: { wCounter += 1; tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); tuW.Add(tournamentUserB); tuL.Add(tournamentUserW); } break; case GameResultE.Draw: dCounter += 1; tmW.Add(tournamentMatch); break; case GameResultE.Absent: break; case GameResultE.NoResult: break; case GameResultE.WhiteBye: wCounter += 1; tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); tuW.Add(tournamentUserB); tuL.Add(tournamentUserW); break; case GameResultE.BlackBye: bCounter += 1; tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); tuW.Add(tournamentUserW); tuL.Add(tournamentUserB); break; case GameResultE.ForcedWhiteWin: bCounter += 1; tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); tuW.Add(tournamentUserW); tuL.Add(tournamentUserB); break; case GameResultE.ForcedWhiteLose: wCounter += 1; tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); tuW.Add(tournamentUserB); tuL.Add(tournamentUserW); break; case GameResultE.ForcedDraw: dCounter += 1; tmW.Add(tournamentMatch); break; default: break; } } if (dCounter > 0) { foreach (DataRow item in tmW.DataTable.Rows) { TournamentMatch tournamentMatch = new TournamentMatch(cxt, item); if (tournamentMatch.EloWhiteAfter > tournamentMatch.EloBlackAfter) { TournamentUser tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); TournamentUser tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); tuW.Add(tournamentUserW); tuL.Add(tournamentUserB); } else if (tournamentMatch.EloBlackAfter > tournamentMatch.EloWhiteAfter) { TournamentUser tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); TournamentUser tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); tuW.Add(tournamentUserB); tuL.Add(tournamentUserW); } else { TournamentUser tournamentUserB = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.BlackUserID); TournamentUser tournamentUserW = TournamentUser.GetTournamentUserById(cxt, tournamentID, tournamentMatch.WhiteUserID); tuW.Add(tournamentUserB); tuW.Add(tournamentUserW); } } } if (tuL.Count > 0) { foreach (DataRow item in dtTournamentUsers.Rows) { TournamentUser tu1 = new TournamentUser(cxt, item); if (!tuL.Contains("UserID = " + tu1.UserID)) { tuWinners.Add(tu1); } } } return(tuWinners); }
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); } }