private List <CreateCampaignPassPriorityModel> ProduceCreateCampaignPassPriorityModels(List <CampaignWithProductFlatModel> forCampaigns, List <Pass> withPasses) { List <CreateCampaignPassPriorityModel> result = null; if (forCampaigns != null && forCampaigns.Any() && withPasses != null && withPasses.Any()) { result = CampaignPassPrioritiesServiceMapper.CreateCampaignPassPriorityModels( forCampaigns, withPasses, _mapper); } return(result); }
/// <summary> /// Returns RunModel for run /// </summary> /// <param name="run"></param> /// <param name="scenarioRepository"></param> /// <param name="passRepository"></param> /// <param name="tenantSettingsRepository"></param> /// <param name="allCampaigns"></param> /// <param name="functionalAreaRepository"></param> /// <returns></returns> public static RunModel MapToRunModel(Run run, IScenarioRepository scenarioRepository, IPassRepository passRepository, ITenantSettingsRepository tenantSettingsRepository, IMapper mapper, IAnalysisGroupRepository analysisGroupRepository, IFunctionalAreaRepository functionalAreaRepository = null, IScenarioCampaignMetricRepository scenarioCampaignMetricRepository = null, List <CampaignWithProductFlatModel> allCampaigns = null, List <Pass> passesFromDb = null, List <Scenario> scenariosFromDb = null) { // Get scenarios for run var scenarios = scenariosFromDb ?? scenarioRepository.FindByIds(run.Scenarios.Select(s => s.Id)).ToList(); // Get passes for run var passes = passesFromDb ?? passRepository.FindByIds(scenarios.SelectMany(s => s.Passes).Select(p => p.Id).Distinct()).ToList(); var analysisGroups = run.AnalysisGroupTargets.Any() ? analysisGroupRepository.GetByIds(run.AnalysisGroupTargets.Select(x => x.AnalysisGroupId).ToArray()).ToDictionary(x => x.Id) : new Dictionary <int, AnalysisGroupNameModel>(); // Get default ScenarioId var defaultScenarioId = tenantSettingsRepository.GetDefaultScenarioId(); if (run.RunStatus == RunStatus.NotStarted && allCampaigns != null && allCampaigns.Any()) { // Since the run has not already started amend Run Scenarios // with CampaignPassPriorities for new Campaigns and remove // CampaignPassPriorities of deleted Campaigns CampaignPassPrioritiesServiceMapper.AmendCampaignPassPriorities( scenarios, passes, allCampaigns, passRepository, mapper); } var runModel = mapper.Map <RunModel>(Tuple.Create(run, scenarios, passes, analysisGroups, defaultScenarioId)); if (run.RunStatus == RunStatus.Complete) { ApplyFunctionalAreaFaultTypesToRunModel(runModel, run, functionalAreaRepository); } if (scenarioCampaignMetricRepository != null) { runModel.Scenarios.ForEach(s => ApplyKPIsToScenarioCampaigns(s, scenarioCampaignMetricRepository)); } return(runModel); }
private void ProcessCampaignPassPrioritiesAndApplyToScenario(Scenario existingScenario, List <CreateCampaignPassPriorityModel> campaignPassPriorities, List <CampaignWithProductFlatModel> allCampaigns) { // this check is already done in the validation but if incase this method is called from elsewhere // if contains any CampaignPassPriorities then reset the pass ids and names with the information from the existingScenario passes if (campaignPassPriorities != null && campaignPassPriorities.Any()) { // get the pass deatils for the existing Scenario passes var existingScenarioPassIds = existingScenario.Passes.Select(p => p.Id).ToList(); var existingScenarioPasses = _passRepository.FindByIds(existingScenarioPassIds).ToList(); var numberofPassesInScenario = existingScenarioPassIds.Count; campaignPassPriorities.ForEach(c => { // this check is already done in the validation but if incase this method is called from elsewhere // hence, an extra check to ensure that the scenario and campaignPassPriorities contains the same number of passes if (c.PassPriorities.Count == numberofPassesInScenario) { // priorities are assigned passes in the order it exists in the scenario for (int i = 0; i < numberofPassesInScenario; i++) { c.PassPriorities[i].PassId = existingScenario.Passes[i].Id; c.PassPriorities[i].PassName = existingScenarioPasses.Where(p => p.Id == c.PassPriorities[i].PassId) .Select(p => p.Name).FirstOrDefault(); } } }); // create the CampaignPassPriorities for the campaigns which are not in the campaignPassPriorities var campaignPassPrioritiesForMissingCampaigns = CreateCampaignPassPriorities(allCampaigns, campaignPassPriorities, existingScenarioPasses); if (campaignPassPrioritiesForMissingCampaigns != null && campaignPassPrioritiesForMissingCampaigns.Any()) { campaignPassPriorities.AddRange(campaignPassPrioritiesForMissingCampaigns); } //apply Campaign Pass Priorities to existing Scenario existingScenario.CampaignPassPriorities = CampaignPassPrioritiesServiceMapper.MapToCampaignPassPriorities( campaignPassPriorities, allCampaigns, _mapper); } }
public IHttpActionResult PostScenario([FromBody] CreateScenarioModel command) { // Check empty name if (string.IsNullOrWhiteSpace(command.Name)) { return(this.Error().InvalidParameters("No name was entered")); } if (!ModelState.IsValid) { return(this.Error().InvalidParameters("Invalid scenario parameters")); } // Check that scenario doesn't exist Scenario scenario = _scenarioRepository.Get(command.Id); if (scenario != null) { return(this.Error().InvalidParameters("Scenario already exists")); } // Check that scenario with such name doesn't exist scenario = _scenarioRepository.FindByName(command.Name, command.IsLibraried); if (scenario != null) { return(this.Error().InvalidParameters("Scenario with such name already exists")); } foreach (var pass in command.Passes) { if (_passInspectorService.InspectPassSalesAreaPriorities( pass.PassSalesAreaPriorities, out string errorMessage)) { return(this.Error().InvalidParameters(errorMessage)); } List <string> errorMessages = new List <string>(); if (!BreakExclusionsValidations.DateTimeRangeIsValid(pass.BreakExclusions, _salesAreaRepository.GetAll(), out errorMessages)) { return(this.Error().InvalidParameters(errorMessages)); } } ValidateCampaignPriorityRounds(command.CampaignPriorityRounds); // Add scenario scenario = _mapper.Map <Scenario>(command); IdUpdater.SetIds(scenario, _identityGeneratorResolver); // Update Pass repository UpdatePassRepository(scenario, command, null); _passRepository.SaveChanges(); // Add Campaign Pass Priorities to Scenario var campaignsResult = _campaignRepository.GetWithProduct(null); var usingAllCampaigns = campaignsResult.Items?.Any() == true?campaignsResult.Items.ToList() : null; var forScenarioPasses = _passRepository.FindByIds(scenario.Passes.Select(p => p.Id)).ToList(); var allCampaigns = usingAllCampaigns?.ToDictionary(x => x.ExternalId, x => x); CampaignPassPrioritiesServiceMapper.AmendCampaignPassPrioritiesForNewCampaigns( scenario, forScenarioPasses, allCampaigns, _passRepository, _mapper); // Validate ValidateForSave(scenario); scenario.DateUserModified = DateTime.UtcNow; // Add scenario _scenarioRepository.Add(scenario); _scenarioRepository.SaveChanges(); // Do not remove this, need to persist changes now so that we can return ScenarioModel return(Ok(Mappings.MapToScenarioModel(scenario, _scenarioRepository, _passRepository, _tenantSettingsRepository, _mapper))); }