Пример #1
0
 public GenerateFixturesUnitOfWork(IGeneratorService service, IGenerateFixtureSettings settings, Guid leagueId, Guid seasonId)
 {
     Service  = service;
     Settings = settings;
     LeagueId = leagueId;
     SeasonId = seasonId;
 }
Пример #2
0
        public IEnumerable <Fixture> GenerateFixtures(Season season, IList <Team> teams, IGenerateFixtureSettings settings)
        {
            var fixtures = new List <Fixture>();

            var otherTeams = new Queue <Team>(teams.Skip(1));

            if (otherTeams.Count % 2 == 0)
            {
                otherTeams.Enqueue(Team.Bye);
            }

            var fixtureDate     = settings.Start;
            var totalEncounters = settings.IncludeReverseFixtures ? settings.NumberOfEncounters * 2 : settings.NumberOfEncounters;

            for (var encounter = 0; encounter < totalEncounters; encounter++)
            {
                var reverseFixtures = settings.IncludeReverseFixtures && encounter % 2 == 1;

                for (var fixtureNumber = 0; fixtureNumber < otherTeams.Count; fixtureNumber++)
                {
                    // determine fixtures
                    var tempFixtures = new List <Fixture>();

                    // first team
                    var home = teams.First();
                    var away = otherTeams.First();

                    if (home.Id != Guid.Empty && away.Id != Guid.Empty)
                    {
                        tempFixtures.Add(new Fixture(fixtureDate, home, away, season.Id));
                    }

                    // other teams
                    for (var team = 1; team < otherTeams.Count - 1; team += 2)
                    {
                        home = otherTeams.ElementAt(team);
                        away = otherTeams.ElementAt(team + 1);

                        if (home.Id != Guid.Empty && away.Id != Guid.Empty)
                        {
                            tempFixtures.Add(new Fixture(fixtureDate, home, away, season.Id));
                        }
                    }

                    if (reverseFixtures)
                    {
                        foreach (var fixture in tempFixtures)
                        {
                            var tempId = fixture.HomeTeamId;
                            fixture.HomeTeamId = fixture.AwayTeamId;
                            fixture.AwayTeamId = tempId;
                        }
                    }

                    fixtures.AddRange(tempFixtures);

                    // rotate teams
                    otherTeams.Enqueue(otherTeams.Dequeue());

                    // increase date
                    fixtureDate = fixtureDate.Add(settings.TimeBetweenFixtures);
                }
            }

            return(fixtures);
        }