private void cbStarted_CheckedChanged(object sender, System.EventArgs e) { bool TeamComplete(IList <MatchParticipation> parts) => parts.Count == 11 && parts.Any(x => x.Position == PlayerPosition.Goalkeeper); if (!TeamComplete(playerListTeamA.Participation) || !TeamComplete(playerListTeamB.Participation)) { (sender as CheckBox).Checked = false; MessageBox.Show("need 11 in both, need goalkeepr"); return; } if (MessageBox.Show("Start?", "Start", MessageBoxButtons.YesNo) == DialogResult.Yes) { this._match.Started = this.cbStarted.Checked; var data = new EUFAEntities(); var match = data.Matches.Find(this._match.Id); match.Started = true; data.TrySave(); _match.Started = true; this.SetResultLabel(); } this.cbStarted.Checked = false; }
public AddEditGameEvent(int matchId, int?id) { this.id = id; this.matchId = matchId; InitializeComponent(); var data = new EUFAEntities(); var match = data.Matches .Include(x => x.TournamentParticipation.Team) .Include(x => x.TournamentParticipation1.Team) .AsNoTracking().FirstOrDefault(x => x.Id == matchId); cbEvents.Items.AddRange(MatchEventCode.All.Select(x => new KeyWithView(x, MatchEventCode.GetDesc(x))).ToArray()); rbTeamA.Text = match.TournamentParticipation.Team.CountryCode; rbTeamB.Text = match.TournamentParticipation1.Team.CountryCode; if (this.id != null) { var matchEvent = data.MatchEvents.AsNoTracking().FirstOrDefault(x => x.Id == id); numMinute.Value = matchEvent.MatchMinute; tbAdditionalInformation.Text = matchEvent.AdditionalInformation; cbEvents.SelectedItem = cbEvents.Items.Cast <KeyWithView>().FirstOrDefault(x => (string)x.Key == matchEvent.EventType); rbTeamA.Checked = matchEvent.TeamA; rbTeamB.Checked = !matchEvent.TeamA; } ValidForm(); }
private void cbFinished_CheckedChanged(object sender, System.EventArgs e) { if (!this._match.Started) { return; } if (MessageBox.Show("Finish?", "Finish", MessageBoxButtons.YesNo) == DialogResult.Yes) { var data = new EUFAEntities(); var evs = data.MatchEvents.Where(x => x.MatchId == this._match.Id).AsNoTracking().ToList(); var r = MatchResultCalc.FromEvents(this._match, evs); if (r.TeamACount == r.TeamBCount && this._match.StageCode != Stage.Group) { MessageBox.Show("goals, bad, sad, add penalty shootout"); return; } this._match.Finished = this.cbFinished.Checked; var match = data.Matches.Find(this._match.Id); match.Finished = true; data.TrySave(); _match.Finished = true; this.SetResultLabel(); } }
private bool DidAlloc() { var didAlloc = new EUFAEntities().TournamentParticipations.Where(x => x.TournamentId == tournamentId) .All(x => x.GroupLetter != null && x.GroupNumber != null); return(didAlloc); }
public static bool StageInitialized(int tournamentId, string stage) { var items = new EUFAEntities().Matches.Include(x => x.TournamentParticipation) .Where(x => x.TournamentParticipation.TournamentId == tournamentId) .Where(x => x.StageCode == stage) .Count(); return(items == GamesInStage(stage)); }
public static void TrySave(this EUFAEntities a) { try { a.SaveChanges(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void DeleteTeam_Click(object sender, System.EventArgs e) { WithSelected(x => { var data = new EUFAEntities(); var res = data.Teams.Find(x.Id); data.Teams.Remove(res); data.TrySave(); LoadTeams(); DisplayTeams(); }); }
private void Delete_Click(object sender, System.EventArgs e) { ExecuteWithSelected(t => { if (MessageBox.Show("Delete?", "Delete", MessageBoxButtons.YesNo) == DialogResult.Yes) { var data = new EUFAEntities(); var item = data.Tournaments.Find(t.Id); data.Tournaments.Remove(item); data.TrySave(); this.LoadTournaments(); } }); }
private void btDelete_Click(object sender, System.EventArgs e) { if (this.listEvents.SelectedItems.Count == 1 && this.listEvents.SelectedItems[0].Tag is MatchEvent ev) { if (MessageBox.Show("Delete?", "Del", MessageBoxButtons.YesNo) == DialogResult.Yes) { var dta = new EUFAEntities(); var loaded = dta.MatchEvents.Find(ev.Id); dta.MatchEvents.Remove(loaded); dta.TrySave(); LoadEvents(); } } }
private void LoadGames() { var matches = new EUFAEntities().Matches.Where(x => x.StageCode == _stageCode) .Include(x => x.TournamentParticipation.Team) .Include(x => x.TournamentParticipation1.Team) .Where(x => x.TournamentParticipation.TournamentId == _tournamentId) .Where(x => x.TournamentParticipation1.TournamentId == _tournamentId) .Include(x => x.MatchEvents) .AsNoTracking() .ToList(); _allMatches = matches; _shownMatches = matches; FilterGroups(); ShowMatches(); }
public void LoadPlayerLists() { var parts = new EUFAEntities().MatchParticipations .AsNoTracking() .Include(x => x.Player.Team) .Where(x => x.MatchId == _match.Id) .AsNoTracking() .ToList(); playerListTeamA.Team = _match.TournamentParticipation.Team; playerListTeamB.Team = _match.TournamentParticipation1.Team; playerListTeamA.Participation = parts.Where(x => x.Player.Team.Id == _match.TournamentParticipation.TeamId).ToList(); playerListTeamB.Participation = parts.Where(x => x.Player.Team.Id == _match.TournamentParticipation1.TeamId).ToList(); playerListTeamA.MatchId = _match.Id; playerListTeamB.MatchId = _match.Id; }
public void LoadEvents() { this.listEvents.Items.Clear(); var items = new EUFAEntities().MatchEvents .Include(x => x.Match.TournamentParticipation.Team) .Include(x => x.Match.TournamentParticipation1.Team) .OrderBy(x => x.MatchMinute) .AsNoTracking() .Where(x => x.MatchId == _match.Id).ToList(); foreach (var item in items) { var lvi = new ListViewItem(item.MatchMinute.ToString() + "'"); lvi.SubItems.Add(item.TeamA ? item.Match.TournamentParticipation.Team.CountryName : item.Match.TournamentParticipation1.Team.CountryName); lvi.SubItems.Add(MatchEventCode.GetDesc(item.EventType)); lvi.SubItems.Add(item.AdditionalInformation); lvi.Tag = item; this.listEvents.Items.Add(lvi); } }
private void LoadGrid() { var items = new EUFAEntities().Matches .Include(x => x.MatchEvents) .Include(x => x.TournamentParticipation.Team) .Include(x => x.TournamentParticipation1.Team) .Where(x => x.TournamentParticipation.TournamentId == selected.Id) .AsNoTracking() .ToList(); matchListGroupA.Matches = items.Where(x => x.StageCode == Stage.Group && x.TournamentParticipation.GroupLetter == "A").ToList(); matchListGroupB.Matches = items.Where(x => x.StageCode == Stage.Group && x.TournamentParticipation.GroupLetter == "B").ToList(); matchListGroupC.Matches = items.Where(x => x.StageCode == Stage.Group && x.TournamentParticipation.GroupLetter == "C").ToList(); matchListGroupD.Matches = items.Where(x => x.StageCode == Stage.Group && x.TournamentParticipation.GroupLetter == "D").ToList(); matchListGroupE.Matches = items.Where(x => x.StageCode == Stage.Group && x.TournamentParticipation.GroupLetter == "E").ToList(); matchListGroupF.Matches = items.Where(x => x.StageCode == Stage.Group && x.TournamentParticipation.GroupLetter == "F").ToList(); groupOf16MatchList.Matches = items.Where(x => x.StageCode == Stage.RoundOf16).ToList(); quarterFinalList.Matches = items.Where(x => x.StageCode == Stage.QuarterFinal).ToList(); finalList.Matches = items.Where(x => x.StageCode == Stage.Final).ToList(); semiFinalList1.Matches = items.Where(x => x.StageCode == Stage.SemiFinal).Take(1).ToList(); semiFinalList2.Matches = items.Where(x => x.StageCode == Stage.SemiFinal).Skip(1).ToList(); }
private void btSave_Click(object sender, System.EventArgs e) { var data = new EUFAEntities(); MatchEvent me; if (this.id == null) { me = new MatchEvent(); data.MatchEvents.Add(me); } else { me = data.MatchEvents.Find(this.id); } me.AdditionalInformation = this.tbAdditionalInformation.Text; me.EventType = ((KeyWithView)this.cbEvents.SelectedItem).Key as string; me.MatchId = this.matchId; me.MatchMinute = (int)this.numMinute.Value; me.TeamA = this.rbTeamA.Checked; data.TrySave(); }
private void btSave_Click(object sender, EventArgs e) { var res = this.Groups.SelectMany(x => x.Teams).ToList(); if (res.Count != 24) { MessageBox.Show("want 24"); DialogResult = DialogResult.None; return; } var data = new EUFAEntities(); var all = data.TournamentParticipations.Where(x => x.TournamentId == this._tId).ToList(); res.ForEach(x => { var parti = all.First(p => p.TeamId == x.Id); parti.GroupLetter = x.GroupName.Substring(0, 1); parti.GroupNumber = int.Parse(x.GroupName.Substring(1, 1)); }); data.TrySave(); }
private void generateToolStripMenuItem_Click(object sender, EventArgs e) { var data = new EUFAEntities(); data.Matches.RemoveRange(data.Matches.ToList()); data.TournamentParticipations.RemoveRange(data.TournamentParticipations.ToList()); data.Teams.RemoveRange(data.Teams.ToList()); data.Players.RemoveRange(data.Players.ToList()); data.Tournaments.RemoveRange(data.Tournaments.ToList()); data.MatchParticipations.RemoveRange(data.MatchParticipations.ToList()); data.MatchEvents.RemoveRange(data.MatchEvents.ToList()); data.SaveChanges(); var random = new Random(); var regions = data.Regions.ToList(); var teamIndex = 0; string RandomString() => string.Join(string.Empty, Enumerable.Range(0, 10).Select(x => 'A' + random.Next(0, 26)).ToList()); Team GetTeam() => new Team { CountryCode = (teamIndex++).ToString("000"), CountryName = RandomString(), Players = Enumerable.Range(0, 24).Select(x => new Player { DateOfBirth = new DateTime(random.Next(1960, 1980), 1, 1), FirstName = RandomString(), LastName = RandomString(), Position = PlayerPosition.All[random.Next(0, 4)], ShirtNumber = x }).ToList(), RegionId = regions[random.Next(0, regions.Count - 1)].Id }; for (var i = 0; i < random.Next(1, 7); i++) { var groupCount = new Dictionary <string, int>(); data.Tournaments.Add(new Tournament { StartDate = new DateTime(random.Next(2000, 2015), 01, 01, 0, 0, 0, 0), EndDate = new DateTime(random.Next(2016, 2020), 01, 01, 0, 0, 0, 0), Name = RandomString(), TournamentParticipations = Enumerable.Range(0, 24).Select((x, p) => { var group = char.ConvertFromUtf32('A' + (p % 6)); if (!groupCount.ContainsKey(group)) { groupCount.Add(group, 0); } return(new TournamentParticipation { Team = GetTeam(), GroupLetter = group, GroupNumber = ++groupCount[group] }); }).ToList() }); } data.SaveChanges(); var tournament = data.Tournaments.First(); foreach (var stage in Stage.All) { Stage.Init(tournament.Id, stage); var matches = data.Matches.Where(x => x.TournamentParticipation.TournamentId == tournament.Id && x.StageCode == stage); foreach (var match in matches) { void add(List <Player> p) { match.MatchParticipations.Add(new MatchParticipation { Position = PlayerPosition.Goalkeeper, PlayerId = p[0].Id, MatchId = match.Id }); for (var i = 0; i < 10; i++) { match.MatchParticipations.Add(new MatchParticipation { PlayerId = p[i + 1].Id, Position = p[i + 1].Position, MatchId = match.Id }); } match.MatchEvents.Add(new MatchEvent { EventType = MatchEventCode.Goal, MatchId = match.Id, MatchMinute = 1, TeamA = true, AdditionalInformation = "bla" }); } match.Started = true; match.Finished = true; var playersA = match.TournamentParticipation.Team.Players.ToList(); var playersB = match.TournamentParticipation1.Team.Players.ToList(); add(playersA); add(playersB); } data.SaveChanges(); } }
public static void Init(int tournamentId, string stage) { var data = new EUFAEntities(); var matches = new List <Match>(); var random = new Random(); void add(int a, int b, string tag = null) => matches.Add(new Match { TeamA = a, TeamB = b, StageCode = stage, Tag = tag }); Func <string, int> getWinnerFn(string tagStart) { var m = data.Matches .Include(x => x.MatchEvents) .Where(x => x.Tag.Length == 3).ToList() .Where(x => x.Tag.StartsWith(tagStart)) .ToList(); int WinnerOf(string s) { var cur = m.First(x => x.Tag == s); return(MatchResultCalc.Winner(cur, cur.MatchEvents)); } return(WinnerOf); } switch (stage) { case Stage.Group: var parts = data.TournamentParticipations.Where(x => x.TournamentId == tournamentId).ToList(); var byGroup = parts.GroupBy(x => x.GroupLetter); foreach (var group in byGroup) { add(group.First(x => x.GroupNumber == 1).Id, group.First(x => x.GroupNumber == 2).Id); add(group.First(x => x.GroupNumber == 1).Id, group.First(x => x.GroupNumber == 3).Id); add(group.First(x => x.GroupNumber == 3).Id, group.First(x => x.GroupNumber == 4).Id); add(group.First(x => x.GroupNumber == 4).Id, group.First(x => x.GroupNumber == 1).Id); add(group.First(x => x.GroupNumber == 2).Id, group.First(x => x.GroupNumber == 4).Id); add(group.First(x => x.GroupNumber == 2).Id, group.First(x => x.GroupNumber == 3).Id); } break; case Stage.RoundOf16: var groupMatches = data.Matches.Where(x => x.TournamentParticipation.TournamentId == tournamentId) .Where(x => x.StageCode == Stage.Group) .Include(x => x.MatchEvents) .Include(x => x.TournamentParticipation) .Include(x => x.TournamentParticipation1) .ToList() .Select(x => new { TeamAId = x.TeamA, TeamBId = x.TeamB, Group = x.TournamentParticipation.GroupLetter, TeamAScore = MatchResultCalc.FromEvents(x, x.MatchEvents).TeamACount, TeamBScore = MatchResultCalc.FromEvents(x, x.MatchEvents).TeamBCount }).ToList(); var dict = new Dictionary <string, IList <int> >(); var thirdRanked = new List <Ranking>(); foreach (var group in groupMatches.GroupBy(x => x.Group)) { int MatchesWon(int teamId) { var aWon = group.Where(x => x.TeamAId == teamId && x.TeamAScore > x.TeamBScore); var bWon = group.Where(x => x.TeamBId == teamId && x.TeamBScore > x.TeamAScore); return(aWon.Concat(bWon).Distinct().Count()); } int GoalsScored(int teamId) { var aScored = group.Where(x => x.TeamAId == teamId).Sum(x => x.TeamAScore); var bScored = group.Where(x => x.TeamBId == teamId).Sum(x => x.TeamBScore); return(aScored + bScored); } int GoalsDifference(int teamId) { var aScored = group.Where(x => x.TeamAId == teamId).Sum(x => x.TeamAScore - x.TeamBScore); var bScored = group.Where(x => x.TeamBId == teamId).Sum(x => x.TeamBScore - x.TeamAScore); return(aScored + bScored); } var teamsInGroup = group.Select(x => x.TeamAId).Concat(group.Select(x => x.TeamBId)).Distinct().ToList(); var rankedTeams = teamsInGroup .Select(x => new Ranking { TeamId = x, MatchesWon = MatchesWon(x), GoalsDifference = GoalsDifference(x), GoalsScored = GoalsScored(x), Random = random.Next(), Group = group.Key }) .OrderByDescending(x => x.MatchesWon) .ThenByDescending(x => x.GoalsDifference) .ThenByDescending(x => x.GoalsScored) .ThenBy(x => x.Random) .ToList(); thirdRanked.Add(rankedTeams[2]); dict.Add(group.Key, rankedTeams.Select(x => x.TeamId).ToList()); } var third = new Dictionary <string, string[]> { { "ABCD", new[] { "C", "D", "A", "B" } }, { "ABCE", new[] { "C", "A", "B", "E" } }, { "ABCF", new[] { "C", "A", "B", "F" } }, { "ABDE", new[] { "D", "A", "B", "E" } }, { "ABDF", new[] { "D", "A", "B", "F" } }, { "ABEF", new[] { "E", "A", "B", "F" } }, { "ACDE", new[] { "C", "D", "A", "E" } }, { "ACDF", new[] { "C", "D", "A", "F" } }, { "ACEF", new[] { "C", "A", "F", "E" } }, { "ADEF", new[] { "D", "A", "F", "E" } }, { "BCDE", new[] { "C", "D", "B", "E" } }, { "BCDF", new[] { "C", "D", "B", "F" } }, { "BCEF", new[] { "E", "C", "B", "F" } }, { "BDEF", new[] { "E", "D", "B", "F" } }, { "CDEF", new[] { "C", "D", "F", "E" } } }; var thirdRankedInOrder = thirdRanked .OrderByDescending(x => x.MatchesWon) .ThenByDescending(x => x.GoalsDifference) .ThenByDescending(x => x.GoalsScored) .Take(4) .ToList(); var key = string.Join(string.Empty, thirdRankedInOrder.Select(x => x.Group).ToList()); string DetermineThirdGroup(int index) { return(third[key][index]); } add(dict["A"][1], dict["C"][1], "AF1"); add(dict["B"][0], dict[DetermineThirdGroup(1)][2], "AF2"); add(dict["D"][0], dict[DetermineThirdGroup(3)][2], "AF3"); add(dict["A"][0], dict[DetermineThirdGroup(0)][2], "AF4"); add(dict["C"][0], dict[DetermineThirdGroup(2)][2], "AF5"); add(dict["F"][0], dict["E"][1], "AF6"); add(dict["E"][0], dict["D"][1], "AF7"); add(dict["B"][1], dict["F"][1], "AF8"); break; case Stage.QuarterFinal: var qfWin = getWinnerFn("AF"); add(qfWin("AF1"), qfWin("AF3"), "QF1"); add(qfWin("AF2"), qfWin("AF6"), "QF2"); add(qfWin("AF5"), qfWin("AF7"), "QF3"); add(qfWin("AF4"), qfWin("AF8"), "QF4"); break; case Stage.SemiFinal: var smWin = getWinnerFn("QF"); add(smWin("QF1"), smWin("QF2"), "SF1"); add(smWin("QF2"), smWin("QF4"), "SF2"); break; case Stage.Final: var fWin = getWinnerFn("SF"); add(fWin("SF1"), fWin("SF2"), "TF1"); break; default: throw new Exception(); } data.Matches.AddRange(matches); data.TrySave(); }