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)); }
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"); } }); }
public IHttpActionResult GetKPIPriorities() { return(Ok(_repository.GetAll())); }
public IEnumerable <KPIPriority> GetAll() => _repository.GetAll();