예제 #1
0
 /// <summary>
 /// Checks all custom analysis rules
 /// </summary>
 /// <param name="unit">unit to analyze</param>
 /// <returns></returns>
 public Dictionary <string, string[]> CheckCustomAnalysisChecks(IStatisticalUnit unit)
 {
     return(_analysisRules.CustomAnalysisChecks
         ? new StatUnitCustomCheckManager(unit, _context).CheckFields()
         : new Dictionary <string, string[]>());
 }
예제 #2
0
 public void StatUnitPostDeleteActions(IStatisticalUnit unit, bool toDelete, string userId)
 {
     _postDeleteActions[unit.UnitType](unit, toDelete, userId);
 }
예제 #3
0
        /// <inheritdoc />
        /// <summary>
        /// Analyze statistical unit
        /// </summary>
        /// <param name="unit">Stat unit</param>
        /// <returns>Dictionary of messages</returns>
        public virtual AnalysisResult CheckAll(IStatisticalUnit unit)
        {
            var messages        = new Dictionary <string, string[]>();
            var summaryMessages = new List <string>();

            var connectionsResult = CheckConnections(unit);

            if (connectionsResult.Any())
            {
                summaryMessages.Add(nameof(Resource.ConnectionRulesWarnings));
                messages.AddRange(connectionsResult);
            }

            var mandatoryFieldsResult = CheckMandatoryFields(unit);

            if (mandatoryFieldsResult.Any())
            {
                summaryMessages.Add(nameof(Resource.MandatoryFieldsRulesWarnings));
                messages.AddRange(mandatoryFieldsResult);
            }

            var calculationFieldsResult = CheckCalculationFields(unit);

            if (calculationFieldsResult.Any())
            {
                summaryMessages.Add(nameof(Resource.CalculationFieldsRulesWarnings));
                calculationFieldsResult.ForEach(d =>
                {
                    if (messages.ContainsKey(d.Key))
                    {
                        var existed     = messages[d.Key];
                        messages[d.Key] = existed.Concat(d.Value).ToArray();
                    }
                    else
                    {
                        messages.Add(d.Key, d.Value);
                    }
                });
            }

            var potentialDuplicateUnits = GetDuplicateUnits(unit);

            if (potentialDuplicateUnits.Any())
            {
                var duplicatesResult = CheckDuplicates(unit, potentialDuplicateUnits);
                if (duplicatesResult.Any())
                {
                    summaryMessages.Add(nameof(Resource.DuplicateFieldsRulesWarnings));

                    duplicatesResult.ForEach(d =>
                    {
                        if (messages.ContainsKey(d.Key))
                        {
                            var existed     = messages[d.Key];
                            messages[d.Key] = existed.Concat(d.Value).ToArray();
                        }
                        else
                        {
                            messages.Add(d.Key, d.Value);
                        }
                    });
                }
            }

            var additionalAnalysisCheckResult = CheckCustomAnalysisChecks(unit);

            if (additionalAnalysisCheckResult.Any())
            {
                summaryMessages.Add(nameof(Resource.CustomAnalysisChecks));
                additionalAnalysisCheckResult.ForEach(d =>
                {
                    if (messages.ContainsKey(d.Key))
                    {
                        var existed     = messages[d.Key];
                        messages[d.Key] = existed.Concat(d.Value).ToArray();
                    }
                    else
                    {
                        messages.Add(d.Key, d.Value);
                    }
                });
            }

            var ophanUnitsResult = CheckOrphanUnits(unit);

            if (ophanUnitsResult.Any())
            {
                summaryMessages.Add(nameof(Resource.OrphanUnitsRulesWarnings));
                messages.AddRange(ophanUnitsResult);
            }

            return(new AnalysisResult
            {
                Name = unit.Name,
                Type = unit.UnitType,
                Messages = messages,
                SummaryMessages = summaryMessages
            });
        }