protected void SetVacancyWithProviderReviewFieldIndicators <T>(T currentValue,
                                                                       string fieldId,
                                                                       Vacancy vacancy,
                                                                       Func <Vacancy, T> setFunc
                                                                       )
        {
            var newValue = setFunc(vacancy);

            if (vacancy.Status == VacancyStatus.Rejected)
            {
                PopulateProviderReviewFieldIndicators(vacancy);

                if (!JsonConvert.SerializeObject(currentValue).Equals(JsonConvert.SerializeObject(newValue)))
                {
                    foreach (var fieldIdentifier in ReviewFieldMappingLookups.GetPreviewReviewFieldIndicators().VacancyPropertyMappingsLookup[fieldId])
                    {
                        var changedIndicator = vacancy.ProviderReviewFieldIndicators.Where(p => p.FieldIdentifier == fieldIdentifier).FirstOrDefault();
                        if (changedIndicator != null)
                        {
                            changedIndicator.IsChangeRequested = true;
                        }
                    }
                }
            }
        }
        private void PopulateEmployerReviewFieldIndicators(Vacancy vacancy)
        {
            var employerReviewFieldIndicators = vacancy.EmployerReviewFieldIndicators ?? new List <EmployerReviewFieldIndicator>();

            // add field indicators which are missing
            var missingIndicators =
                ReviewFieldMappingLookups
                .GetPreviewReviewFieldIndicators().FieldIdentifiersForPage
                .Select(p => new EmployerReviewFieldIndicator {
                FieldIdentifier = p.ReviewFieldIdentifier, IsChangeRequested = false
            })
                .Where(p => !employerReviewFieldIndicators.Any(v => v.FieldIdentifier == p.FieldIdentifier));

            if (missingIndicators.Any())
            {
                employerReviewFieldIndicators
                .AddRange(missingIndicators);

                vacancy.EmployerReviewFieldIndicators = employerReviewFieldIndicators
                                                        .OrderBy(p => p.FieldIdentifier).ToList();
            }
        }
예제 #3
0
        public async Task <VacancyPreviewViewModel> GetVacancyPreviewViewModelAsync(VacancyRouteModel vrm)
        {
            var vacancyTask    = Utility.GetAuthorisedVacancyForEditAsync(_client, _vacancyClient, vrm, RouteNames.Vacancy_Preview_Get);
            var programmesTask = _vacancyClient.GetActiveApprenticeshipProgrammesAsync();

            await Task.WhenAll(vacancyTask, programmesTask);

            var vacancy   = vacancyTask.Result;
            var programme = programmesTask.Result.SingleOrDefault(p => p.Id == vacancy.ProgrammeId);
            var vm        = new VacancyPreviewViewModel();
            await _vacancyDisplayMapper.MapFromVacancyAsync(vm, vacancy);

            vm.HasProgramme         = vacancy.ProgrammeId != null;
            vm.HasWage              = vacancy.Wage != null;
            vm.CanShowReference     = vacancy.Status != VacancyStatus.Draft;
            vm.CanShowDraftHeader   = vacancy.Status == VacancyStatus.Draft;
            vm.SoftValidationErrors = GetSoftValidationErrors(vacancy);

            if (programme != null)
            {
                vm.Level = programme.Level;
            }

            if (vacancy.Status == VacancyStatus.Referred)
            {
                vm.Review = await _reviewSummaryService.GetReviewSummaryViewModelAsync(vacancy.VacancyReference.Value,
                                                                                       ReviewFieldMappingLookups.GetPreviewReviewFieldIndicators());
            }

            return(vm);
        }
        public async Task <VacancyPreviewViewModel> GetVacancyPreviewViewModelAsync(VacancyRouteModel vrm)
        {
            var vacancy = await Utility.GetAuthorisedVacancyForEditAsync(_client, _vacancyClient, vrm, RouteNames.Vacancy_Preview_Get);

            var vm = new VacancyPreviewViewModel();
            await _vacancyDisplayMapper.MapFromVacancyAsync(vm, vacancy);

            vm.HasProgramme       = vacancy.ProgrammeId != null;
            vm.HasWage            = vacancy.Wage != null;
            vm.CanShowReference   = vacancy.Status != VacancyStatus.Draft;
            vm.CanShowDraftHeader = vacancy.Status == VacancyStatus.Draft;

            if (vacancy.Status == VacancyStatus.Referred)
            {
                vm.Review = await _reviewSummaryService.GetReviewSummaryViewModelAsync(vacancy.VacancyReference.Value,
                                                                                       ReviewFieldMappingLookups.GetPreviewReviewFieldIndicators());
            }

            return(vm);
        }
        public async Task <VacancyPreviewViewModel> GetVacancyPreviewViewModelAsync(VacancyRouteModel vrm)
        {
            var vacancyTask    = Utility.GetAuthorisedVacancyForEditAsync(_client, _vacancyClient, vrm, RouteNames.Vacancy_Preview_Get);
            var programmesTask = _vacancyClient.GetActiveApprenticeshipProgrammesAsync();

            await Task.WhenAll(vacancyTask, programmesTask);

            var vacancy   = vacancyTask.Result;
            var programme = programmesTask.Result.SingleOrDefault(p => p.Id == vacancy.ProgrammeId);
            var hasProviderReviewPermission = await _providerRelationshipsService.HasProviderGotEmployersPermissionAsync(vrm.Ukprn, vacancy.EmployerAccountId, vacancy.AccountLegalEntityPublicHashedId, OperationType.RecruitmentRequiresReview);

            var vm = new VacancyPreviewViewModel();
            await _vacancyDisplayMapper.MapFromVacancyAsync(vm, vacancy);

            vm.HasProgramme           = vacancy.ProgrammeId != null;
            vm.HasWage                = vacancy.Wage != null;
            vm.CanShowReference       = vacancy.Status != VacancyStatus.Draft;
            vm.CanShowDraftHeader     = vacancy.Status == VacancyStatus.Draft;
            vm.SoftValidationErrors   = GetSoftValidationErrors(vacancy);
            vm.RequiresEmployerReview = hasProviderReviewPermission;

            if (programme != null)
            {
                vm.ApprenticeshipLevel = programme.ApprenticeshipLevel;
            }

            if (vacancy.Status == VacancyStatus.Referred)
            {
                vm.Review = await _reviewSummaryService.GetReviewSummaryViewModelAsync(vacancy.VacancyReference.Value, ReviewFieldMappingLookups.GetPreviewReviewFieldIndicators());
            }

            return(vm);
        }
예제 #6
0
        public void ShouldMap()
        {
            var shortDescriptionProfanityCheckRuleOutcome =
                new RuleOutcome(
                    RuleId.ProfanityChecks,
                    100,
                    "Profanity 'drat' found in 'ShortDescription'",
                    "ShortDescription",
                    new List <RuleOutcome>(), "{\"Profanity\" : \"drat\",\"Occurrences\" : 1}");

            var titleProfanityCheckRuleOutcome = new RuleOutcome(
                RuleId.ProfanityChecks,
                0,
                "No profanities found in 'Title'",
                "Title");

            var profanityChecksRuleOutcome = new RuleOutcome(
                RuleId.ProfanityChecks,
                100,
                "No profanities found in 'Title', Profanity 'drat' found in 'ShortDescription', etc",
                "",
                new List <RuleOutcome>
            {
                shortDescriptionProfanityCheckRuleOutcome,
                titleProfanityCheckRuleOutcome
            }
                );

            var sut = new ReviewFieldIndicatorMapper(new RuleMessageTemplateRunner());

            var review = new VacancyReview
            {
                ManualQaFieldIndicators = new List <ManualQaFieldIndicator>
                {
                    new ManualQaFieldIndicator
                    {
                        IsChangeRequested = false,
                        FieldIdentifier   = FieldIdentifiers.Title
                    },
                    new ManualQaFieldIndicator
                    {
                        IsChangeRequested = true,
                        FieldIdentifier   = FieldIdentifiers.ShortDescription
                    }
                },
                AutomatedQaOutcomeIndicators = new List <RuleOutcomeIndicator>
                {
                    new RuleOutcomeIndicator
                    {
                        IsReferred    = false,
                        RuleOutcomeId = titleProfanityCheckRuleOutcome.Id
                    },
                    new RuleOutcomeIndicator
                    {
                        IsReferred    = true,
                        RuleOutcomeId = shortDescriptionProfanityCheckRuleOutcome.Id
                    }
                },
                AutomatedQaOutcome = new RuleSetOutcome {
                    RuleOutcomes = new List <RuleOutcome> {
                        profanityChecksRuleOutcome
                    }
                }
            };

            var vm = sut.MapFromFieldIndicators(ReviewFieldMappingLookups.GetPreviewReviewFieldIndicators(), review).ToList();

            vm.Count.Should().Be(1);

            var shortDescription = vm.Single(v => v.ReviewFieldIdentifier == FieldIdentifiers.ShortDescription);

            shortDescription.ManualQaText.Should().NotBeNullOrEmpty();

            shortDescription.AutoQaTexts.Count.Should().Be(1);
            shortDescription.AutoQaTexts[0].Should().Be("Brief overview contains the phrase 'drat'");
        }