Beispiel #1
0
        /// <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());
        }