/// <summary> /// /// </summary> /// <param name="snapshot"></param> /// <param name="rulesViolationType"></param> /// <param name="businessCriteriaId"></param> /// <returns></returns> public static List <RuleViolationResultDTO> GetAllRuleViolations(Snapshot snapshot, Constants.RulesViolation rulesViolationType, Constants.BusinessCriteria businessCriteriaId, bool onlyFailedChecks) { var query = GetQueryRuleViolations(snapshot, rulesViolationType, businessCriteriaId, onlyFailedChecks); if (query != null) { return(query.Select(_ => new RuleViolationResultDTO { Rule = new RuleDetailsDTO { Name = _.Reference.Name, Key = _.Reference.Key }, TotalChecks = _.DetailResult.ViolationRatio.TotalChecks, TotalFailed = _.DetailResult.ViolationRatio.FailedChecks, Grade = _.DetailResult.Grade }) .OrderByDescending(_ => _.TotalFailed) .ToList()); } else { return(null); } }
/// <summary> /// /// </summary> /// <param name="snapshot"></param> /// <param name="rulesViolationType"></param> /// <param name="businessCriteriaId"></param> /// <param name="onlyFailedChecks"></param> /// <returns></returns> public static int?GetNbRuleWithViolations(Snapshot snapshot, Constants.RulesViolation rulesViolationType, Constants.BusinessCriteria businessCriteriaId, bool onlyFailedChecks) { var query = GetQueryRuleViolations(snapshot, rulesViolationType, businessCriteriaId, onlyFailedChecks); return(query?.Select(_ => _.Reference.HRef).Distinct().Count()); }
/// <summary> /// /// </summary> /// <param name="snapshot"></param> /// <param name="rulesViolationType"></param> /// <param name="businessCriteriaId"></param> /// <param name="onlyFailedChecks"></param> /// <returns></returns> private static IQueryable <ApplicationResult> GetQueryRuleViolations(Snapshot snapshot, Constants.RulesViolation rulesViolationType, Constants.BusinessCriteria businessCriteriaId, bool onlyFailedChecks) { if (snapshot?.BusinessCriteriaResults == null) { return(null); } var query = snapshot.BusinessCriteriaResults.AsQueryable(); if (businessCriteriaId != 0) { query = query.Where(_ => _.Reference.Key == businessCriteriaId.GetHashCode()); } // ReSharper disable once SwitchStatementMissingSomeCases switch (rulesViolationType) { case Constants.RulesViolation.CriticalRulesViolation: query = query.SelectMany(_ => _.CriticalRulesViolation); break; case Constants.RulesViolation.NonCriticalRulesViolation: query = query.SelectMany(_ => _.NonCriticalRulesViolation); break; default: query = query.SelectMany(_ => _.CriticalRulesViolation.Union(_.NonCriticalRulesViolation)); break; } query = (from bc in query where bc.DetailResult != null && bc.DetailResult.ViolationRatio != null && (!onlyFailedChecks || bc.DetailResult.ViolationRatio.FailedChecks > 0) select bc); return(query); }
/// <summary> /// /// </summary> /// <param name="snapshot"></param> /// <param name="rulesViolationType"></param> /// <param name="businessCriteriaId"></param> /// <param name="onlyFailedChecks"></param> /// <param name="nbTopResult"></param> /// <returns></returns> public static List <RuleViolationResultDTO> GetRuleViolations(Snapshot snapshot, Constants.RulesViolation rulesViolationType, Constants.BusinessCriteria businessCriteriaId, bool onlyFailedChecks, int nbTopResult) { var query = GetQueryRuleViolations(snapshot, rulesViolationType, businessCriteriaId, onlyFailedChecks); return(query?.Select(_ => new RuleViolationResultDTO { Rule = new RuleDetailsDTO { Name = _.Reference.Name, Key = _.Reference.Key }, TotalChecks = _.DetailResult.ViolationRatio.TotalChecks, TotalFailed = _.DetailResult.ViolationRatio.FailedChecks, Grade = _.DetailResult.Grade }) .Distinct(new RuleViolationResultDTO.Comparer()) .OrderByDescending(_ => _.TotalFailed) .Take(nbTopResult) .ToList()); }