public async Task <PlayerMeritTable> GetCompetitionPlayerMeritTable()
        {
            this._competitionMeritTable = await this._playerMeritTableRepository.GetFullBySourceAndID(PlayerMeritTableSourceTypes.Competition, this.Competition.ID);

            if (this._competitionMeritTable == null)
            {
                this._competitionMeritTable = new PlayerMeritTable();
                this._competitionMeritTable.PlayerMeritTableSourceTypeID = PlayerMeritTableSourceTypes.Competition;
                this._competitionMeritTable.PlayerMeritTableSourceID     = (short)this.Competition.ID;
                this._competitionMeritTable.MeritCalculationEngineID     = (MeritCalculationEngines)this.Competition.PlayerMeritTableCalculationEngineID.Value;
                this._competitionMeritTable.SetAuditFields();
            }

            //this.this.competitionMeritTable = this.competitionMeritTable;

            //this._calculationEngine = PlayerMeritTableCalculationEngineFactory.Create(this.competitionMeritTable.MeritCalculationEngineID);
            return(this._competitionMeritTable);
        }
        public Task Remove(PlayerMeritTable playerMeritTable, GameXPlayer playerGame, Team team, CompetitionEvent competitionEvent, MeritCalculationEngine config)
        {
            var line = playerMeritTable.GetOrCreateLine(team, playerGame.Player);
            var gameCalculationEngine = this._gameCalculationEngineFactory.Create(playerGame.Game.GameCalculationEngineID);

            line.Remove(playerGame);
            var droppedChalks = gameCalculationEngine.CalculateDroppedChalks(playerGame);

            line.RemoveDroppedChalks(playerGame, droppedChalks);

            var opponentScoresInWonGames = ListHelper.ConvertToList(line.DataString1);
            var playerScoresInLostGames  = ListHelper.ConvertToList(line.DataString2);

            ListHelper.RemoveResultFromLists(playerGame, opponentScoresInWonGames, playerScoresInLostGames);

            this.CalculateAdditionalData(line, playerGame, competitionEvent, config, gameCalculationEngine, opponentScoresInWonGames, playerScoresInLostGames);

            return(Task.CompletedTask);
        }
        public async Task <PlayerMeritTable> GetLeaguePlayerMeritTable()
        {
            var leagueEvent = this.CompetitionEvent.CastEntity <League>();

            this._leagueMeritTable = await this._playerMeritTableRepository.GetFullBySourceAndID(PlayerMeritTableSourceTypes.League, this.CompetitionEvent.ID);

            if (this._leagueMeritTable == null)
            {
                this._leagueMeritTable = new PlayerMeritTable();
                this._leagueMeritTable.PlayerMeritTableSourceTypeID = PlayerMeritTableSourceTypes.League;
                this._leagueMeritTable.PlayerMeritTableSourceID     = this.CompetitionEvent.ID;
                this._leagueMeritTable.MeritCalculationEngineID     = leagueEvent.MeritCalculationEngineID.Value;
                this._leagueMeritTable.SetAuditFields();
            }

            //this.this._competitionEventMeritTable = this._competitionEventMeritTable;

            //this._calculationEngine = PlayerMeritTableCalculationEngineFactory.Create(this._competitionEventMeritTable.MeritCalculationEngineID);
            return(this._leagueMeritTable);
        }