public async Task Calculate(TeamMatch match, MatchCalculationEngine engineConfiguration) { if (match.Games.Count > 0 && match.Games.All(x => x.Game.Completed)) { this.CalculateChalksFromGames(match); this.CalculateGamesScoreFromGames(match); if (engineConfiguration.BonusPointTypeID != BonusPointTypes.None) { this.CalculateBonusPoints(match, engineConfiguration); } var resultEngine = await this._matchResultCalculationEngineFactory.Create(engineConfiguration.MatchResultCalculationEngineID); await resultEngine.Calculate(match); match.SetComplete(); } else { match.SetIncomplete(); } }
protected virtual TeamMatch CreateMatch(bool entrant1Home) { if (this._matches.Count == this.Legs) { throw new InvalidOperationException("Too many Matches added for this fixture. Fixture already has enough matches for the configured number of legs."); } var matchFormat = this.CompetitionRound.CompetitionEvent.GetMatchFormat(); var leg = (byte)(this._matches.Count + 1); var match = new TeamMatch { TeamFixture = this, Date = this.PendingDate.Value, Leg = leg, MatchFormat = matchFormat, MatchStatusID = MatchStatuses.Pending }; match.MatchCalculationEngineID = this.CompetitionRound.CompetitionEvent.GetMatchCalculationEngine(); match.Home = entrant1Home ? this.Entrant1 : this.Entrant2; match.Away = entrant1Home ? this.Entrant2 : this.Entrant1; match.VenueTypeID = this.PendingVenueTypeID.Value; match.Pitch = this.ResolvePitch(entrant1Home); if (leg == 1 && match.Pitch != null) { match.SetIncomplete(); } else { match.SetAuditFields(); } this._matches.Add(match); return(match); }