public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var ok = true;

            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.SingleTeam);

            ITeamMatchModel match = await context.Fixture.GetMatch(request.MatchID);

            var statistics = await context.GetCompetitionPlayerGameStatistic(request, match);

            var allPlayers = context.GetAllPlayersWithTeam(request, match);

            foreach (var(playerID, team) in allPlayers)
            {
                var otherTeam = statistics.FirstOrDefault(x => x.PlayerID == playerID && x.Team.ID != team.ID);
                if (otherTeam != null)
                {
                    var player = context.GetPreloadedPlayer(playerID);

                    response.ValidationResult.Errors.Add(new ValidationFailure($"SingleTeamPlayer{playerID}", $"{player.DisplayName} has already played for and is tied to {otherTeam.Team.Name}."));
                    ok = false;
                }
            }

            return(ResultEngineStatusMapper.MapFromBool(ok));
        }
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var ok      = true;
            var ruleSet = await context.GetRuleSet();

            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.CheckMaximumGamesForHigherRankedCompetition);

            if (ruleSet.Competitions.Count > 0)
            {
                int maxGames = rule.DataInt1.Value;

                ITeamMatchModel match = await context.Fixture.GetMatch(request.MatchID);

                BowlsResults.Common.Domain.Entities.Team homeTeam = match.Data.Home;
                BowlsResults.Common.Domain.Entities.Team awayTeam = match.Data.Away;

                var statistics = await context.GetCompetitionPlayerGameStatistic(request, match);

                var competitionIDs = ruleSet.Competitions.Select(x => x.CompetitionID).ToList();
                // Get index of the competition
                var index = competitionIDs.FindIndex(x => x == context.Competition.ID);
                // Remove all other competitions to leave only higher ones
                competitionIDs.RemoveRange(index, competitionIDs.Count - index);

                var allPlayers = context.GetAllPlayersWithTeam(request, match);

                foreach (var(playerID, team) in allPlayers)
                {
                    ok &= await this.Validate(context, response, statistics, competitionIDs, maxGames, playerID);
                }
            }

            return(ResultEngineStatusMapper.MapFromBool(ok));
        }
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var          ok   = true;
            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.SingleTeam);

            ITeamMatchModel match = await context.Fixture.GetMatch(request.MatchID);

            var statistics = await context.GetCompetitionPlayerGameStatistic(request, match);

            var gameNumber = match.Data.TeamFixture.CompetitionRound.GameNumber;

            var allPlayers = context.GetAllPlayersWithTeam(request, match);

            foreach (var(playerID, team) in allPlayers)
            {
                if (statistics.Any(x => x.PlayerID == playerID && x.GameNumber == gameNumber))
                {
                    var player = context.GetPreloadedPlayer(playerID);

                    response.ValidationResult.Errors.Add(new ValidationFailure($"SingleGamePerMatchGameNumber{playerID}", $"{player.DisplayName} has already played in game number {gameNumber}."));
                    ok = false;
                }
            }

            return(ResultEngineStatusMapper.MapFromBool(ok));
        }
Пример #4
0
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var          ok   = true;
            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.CheckMaximumGamesForHigherRankedTeamPerCompetition);

            int maxGames = rule.DataInt1.Value;

            ITeamMatchModel match = await context.Fixture.GetMatch(request.MatchID);

            BowlsResults.Common.Domain.Entities.Team homeTeam = match.Data.Home;
            BowlsResults.Common.Domain.Entities.Team awayTeam = match.Data.Away;

            var statistics = await context.GetCompetitionPlayerGameStatistic(request, match);

            var teams = await this._competitionRepository.GetCompetitionTeams(context.Competition.ID);

            foreach (var gameResult in request.GameResults)
            {
                IEnumerable <int> homeIDs = GetHigherRankedTeamIDs(teams, homeTeam);
                IEnumerable <int> awayIDs = GetHigherRankedTeamIDs(teams, awayTeam);

                foreach (var playerID in gameResult.HomePlayers)
                {
                    ok &= this.Validate(context, response, statistics, homeIDs, maxGames, playerID);
                }

                foreach (var playerID in gameResult.AwayPlayers)
                {
                    ok &= this.Validate(context, response, statistics, awayIDs, maxGames, playerID);
                }
            }

            return(ResultEngineStatusMapper.MapFromBool(ok));
        }
Пример #5
0
        public Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IResultsEngineRequest request, ResultsEngineResponse response)
        {
            if (context.Fixture.IsMatchPending(request.MatchID))
            {
                response.ValidationResult.Errors.Add(new ValidationFailure("MatchStatus", "Match is pending.  To make changes you will need to confirm the match details first."));
            }

            if (context.Fixture.IsMatchProcessed(request.MatchID))
            {
                response.ValidationResult.Errors.Add(new ValidationFailure("MatchStatus", "Match has already been processed.  To make changes you will need to revert this match first."));
            }

            return(ResultEngineStatusMapper.MapFromValidationResult(response.ValidationResult));
        }
Пример #6
0
        public Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var processors = new List <IProcessor <ITeamResultEngineContext, IGameResults, ResultsEngineResponse> >();

            processors.Add(this._singleClubRuleProcessor);
            processors.Add(this._singleTeamRuleProcessor);
            processors.Add(this._singleGamePerMatchGameNumber);
            processors.Add(this._checkTiedToTeam);
            processors.Add(this._checkMaximumGamesForHigherRankedTeamPerCompetitionProcessor);
            processors.Add(this._checkMaximumGamesForHigherRankedCompetitionProcessor);
            processors.Add(this._checkMaximumGamesForHigherRankedTeamAnyCompetition);

            this._processorExecutor.Execute(context, request, response, processors, true);

            return(ResultEngineStatusMapper.MapFromValidationResult(response.ValidationResult));
        }
Пример #7
0
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IResultsEngineRequest request, ResultsEngineResponse response)
        {
            var match = await context.Fixture.GetMatch(request.MatchID);

            var matchCalculationConfiguration = await match.GetMatchCalculationEngineConfiguration();

            if (!matchCalculationConfiguration.AllowDraw)
            {
                if (match.Data.IsDraw())
                {
                    response.ValidationResult.Errors.Add(new ValidationFailure("MatchResult", "Match has ended in a draw which is not allowed"));
                }
            }

            return(await ResultEngineStatusMapper.MapFromValidationResult(response.ValidationResult));
        }
Пример #8
0
        public async Task <ResultsEngineStatuses> Process(ITeamResultEngineContext context, IGameResults request, ResultsEngineResponse response)
        {
            var          ok   = true;
            RuleSetXRule rule = await context.GetRuleSpecification(Entities.Rule.Rules.SingleClub);

            ITeamMatchModel match = await context.Fixture.GetMatch(request.MatchID);

            var statistics = await context.GetCompetitionPlayerGameStatistic(request, match);

            var allPlayers = context.GetAllPlayersWithTeam(request, match);

            foreach (var(playerID, team) in allPlayers)
            {
                ok = this.Validate(context, response, statistics, playerID, team);
            }

            return(ResultEngineStatusMapper.MapFromBool(ok));
        }