Exemple #1
0
        public IEnumerable <ScenarioResult> CalculateBRSIndicators(Run run, int?brsConfigurationTemplateId = null)
        {
            if (run.Scenarios.Count == 1)
            {
                throw new Exception("Impossible to calculate BRS Indicators for run with 1 scenario.");
            }

            if (!run.HasAllScenarioCompletedSuccessfully)
            {
                throw new Exception("Impossible to calculate BRS Indicators for not successfully completed run.");
            }

            var id = brsConfigurationTemplateId.HasValue
                ? brsConfigurationTemplateId.Value
                : run.BRSConfigurationTemplateId;

            var brsConfigurationTemplate = _brsConfigurationTemplateRepository.Get(id);

            if (brsConfigurationTemplate == null)
            {
                throw new Exception($"BRS configuration with id {id} not found");
            }

            var infoLabel = $"(RunID={run.Id}, BRSConfigurationTemplateId={run.BRSConfigurationTemplateId})";

            RaiseInfo($"BRS template {infoLabel}: {JsonConvert.SerializeObject(brsConfigurationTemplate)}");

            var scenarioResults = _scenarioResultRepository.Find(run.Scenarios.Select(x => x.Id).ToArray());

            RaiseInfo($"ScenarioResults before calculation {infoLabel}: {JsonConvert.SerializeObject(scenarioResults)}");

            var kpiPriorities = _kpiPriorityRepository.GetAll();

            return(_brsCalculator.Calculate(brsConfigurationTemplate.KPIConfigurations, scenarioResults, kpiPriorities));
        }
Exemple #2
0
        public CreateOrUpdateBRSConfigurationTemplateValidation(IKPIPriorityRepository kpiPriorityRepository, IBRSConfigurationTemplateRepository brsConfigurationTemplateRepository)
        {
            _kpiPriorityRepostitory             = kpiPriorityRepository;
            _brsConfigurationTemplateRepository = brsConfigurationTemplateRepository;

            RuleFor(x => x).Must(model =>
            {
                var existsItem = _brsConfigurationTemplateRepository.GetByName(model.Name);
                return(existsItem == null || existsItem.Id == model.Id);
            }).WithMessage("Duplicated template name");
            RuleFor(p => p.Name).NotEmpty().WithMessage("Name is missing");
            RuleFor(p => p.KPIConfigurations).Custom((kpiConfigurations, context) =>
            {
                if (IsEmpty(kpiConfigurations))
                {
                    context.AddFailure("KPIConfigurations are missing");
                    return;
                }

                if (!IsValidKPINames(kpiConfigurations))
                {
                    context.AddFailure($"Expected list of configurations for kpis: {string.Join($",{Environment.NewLine}", BRSHelper.KPIs)}");
                }

                var allKpiPriorities = _kpiPriorityRepostitory.GetAll();

                var excludePriorityId = allKpiPriorities.First(x => x.WeightingFactor == 0).Id;
                var existsPriorities  = allKpiPriorities.Select(x => x.Id);
                var inputPriorities   = kpiConfigurations.Select(x => x.PriorityId).ToList();

                var isAllPrioritiesExists = !inputPriorities.Except(existsPriorities).Any();
                if (!isAllPrioritiesExists)
                {
                    context.AddFailure("Invalid kpi priorities");
                }

                var isNotAllPrioritiesExclude = inputPriorities.Any(id => id != excludePriorityId);
                if (!isNotAllPrioritiesExclude)
                {
                    context.AddFailure("All kpi configurations are excluded");
                }
            });
        }
Exemple #3
0
 public IHttpActionResult GetKPIPriorities()
 {
     return(Ok(_repository.GetAll()));
 }
Exemple #4
0
 public IEnumerable <KPIPriority> GetAll() => _repository.GetAll();