private void ValidatePlayersWinningsRules(Guid withdrawalId, Guid playerId) { if (!_configuration.HasWinnings) { return; } var allWinningRules = _configuration.WinningRules.ToList(); foreach (var rule in allWinningRules) { var startDate = GetStartDate(rule, playerId); var endDate = GetEndDate(rule); var actualTransactions = _gameQueries.GetWinLossGameActions(rule.ProductId) .Where(o => o.Round.PlayerId == playerId) .Where(o => o.Timestamp >= startDate && o.Timestamp <= endDate); var wonAmount = actualTransactions.Where(o => o.GameActionType == GameActionType.Won).Sum(o => o.Amount); var lostAmount = actualTransactions.Where(o => o.GameActionType == GameActionType.Lost).Sum(o => o.Amount); var winningsAmount = wonAmount - lostAmount; var productForThatRule = _gameQueries.GetGameProviders().FirstOrDefault(x => x.Id == rule.ProductId); var productName = productForThatRule != null ? productForThatRule.Name : string.Empty; var metadataForRule = GenerateFullRuleDescriptionAndValue( VerificationStep.HasWinnings, ComparisonEnum.For, rule.WinningRuleDescription(productName), winningsAmount.ToString(CultureInfo.InvariantCulture)); if (!IsRulePassed(rule.Comparison, rule.Amount, winningsAmount)) { OnRuleFinish(false, withdrawalId, VerificationStep.HasWinnings, metadataForRule); break; } OnRuleFinish(true, withdrawalId, VerificationStep.HasWinnings, metadataForRule); } }