示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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)));
        }