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); vm.EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.Level); 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 void WhenEducationLevelNumberIsNull_ShouldReturnLevelName(ProgrammeLevel level, string expectedDescription) { string result = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(null, level); result.Should().Be(expectedDescription); }
public async Task <ConfirmTrainingViewModel> GetConfirmTrainingViewModelAsync(VacancyRouteModel vrm, string programmeId) { var vacancyTask = Utility.GetAuthorisedVacancyForEditAsync(_client, _vacancyClient, vrm, RouteNames.Training_Confirm_Get); var programmesTask = _vacancyClient.GetActiveApprenticeshipProgrammesAsync(); await Task.WhenAll(vacancyTask, programmesTask); var programme = programmesTask.Result.SingleOrDefault(p => p.Id == programmeId); if (programme == null) { return(null); } return(new ConfirmTrainingViewModel { ProgrammeId = programme.Id, ApprenticeshipLevel = programme.ApprenticeshipLevel, TrainingTitle = programme.Title, DurationMonths = programme.Duration, ProgrammeType = programme.ApprenticeshipType.GetDisplayName(), PageInfo = Utility.GetPartOnePageInfo(vacancyTask.Result), TrainingEffectiveToDate = programme.EffectiveTo?.AsGdsDate(), EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.ApprenticeshipLevel) }); }
public static ApprenticeshipProgrammeViewModel ToViewModel(this IApprenticeshipProgramme programme) { string educationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.Level); return(new ApprenticeshipProgrammeViewModel { Id = programme.Id, Name = $"{programme.Title}, {educationLevelName}" }); }
/// <summary> /// Gets vacancy for display without applications. /// </summary> /// <param name="vacancy"></param> /// <returns></returns> public async Task <DisplayVacancyViewModel> GetFullVacancyDisplayViewModelAsync(Vacancy vacancy) { var programme = await _client.GetApprenticeshipProgrammeAsync(vacancy.ProgrammeId); switch (vacancy.Status) { case VacancyStatus.Approved: var approvedViewModel = new ApprovedVacancyViewModel { EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.ApprenticeshipLevel) }; await _vacancyDisplayMapper.MapFromVacancyAsync(approvedViewModel, vacancy); approvedViewModel.ApprovedDate = vacancy.ApprovedDate.Value.AsGdsDate(); return(approvedViewModel); case VacancyStatus.Live: var liveViewModel = new LiveVacancyViewModel { EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.ApprenticeshipLevel) }; await _vacancyDisplayMapper.MapFromVacancyAsync(liveViewModel, vacancy); return(liveViewModel); case VacancyStatus.Closed: var closedViewModel = new ClosedVacancyViewModel { EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.ApprenticeshipLevel) }; await _vacancyDisplayMapper.MapFromVacancyAsync(closedViewModel, vacancy); return(closedViewModel); case VacancyStatus.Submitted: var submittedViewModel = new SubmittedVacancyViewModel { EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.ApprenticeshipLevel) }; await _vacancyDisplayMapper.MapFromVacancyAsync(submittedViewModel, vacancy); submittedViewModel.SubmittedDate = vacancy.SubmittedDate.Value.AsGdsDate(); return(submittedViewModel); case VacancyStatus.Review: var reviewViewModel = new ReviewVacancyViewModel { EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.ApprenticeshipLevel) }; await _vacancyDisplayMapper.MapFromVacancyAsync(reviewViewModel, vacancy); return(reviewViewModel); default: throw new InvalidStateException(string.Format(ErrorMessages.VacancyCannotBeViewed, vacancy.Title)); } }
public void WhenEducationLevelNumberIsNotNull_ShouldReturnCorrectDescription(int level, string expectedDescription) { string result = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(level, ProgrammeLevel.Degree); result.Should().Be(expectedDescription); }
public async Task <ReviewViewModel> Map(VacancyReview review) { var vacancy = review.VacancySnapshot; var currentVacancy = _vacancyClient.GetVacancyAsync(review.VacancyReference); var programmeTask = _vacancyClient.GetApprenticeshipProgrammeAsync(vacancy.ProgrammeId); var reviewHistoryTask = _vacancyClient.GetVacancyReviewHistoryAsync(review.VacancyReference); var approvedCountTask = _vacancyClient.GetApprovedCountAsync(vacancy.SubmittedByUser.UserId); var approvedFirstTimeCountTask = _vacancyClient.GetApprovedFirstTimeCountAsync(vacancy.SubmittedByUser.UserId); var reviewSummaryTask = _reviewSummaryService.GetReviewSummaryViewModelAsync(review.Id, ReviewFieldMappingLookups.GetPreviewReviewFieldIndicators()); var anonymousApprovedCountTask = vacancy.IsAnonymous ? _vacancyClient.GetAnonymousApprovedCountAsync(vacancy.LegalEntityId) : Task.FromResult(0); await Task.WhenAll( currentVacancy, programmeTask, approvedCountTask, approvedFirstTimeCountTask, reviewHistoryTask, reviewSummaryTask, anonymousApprovedCountTask); var programme = programmeTask.Result; var currentVacancyResult = currentVacancy.Result; var historiesVm = GetReviewHistoriesViewModel(reviewHistoryTask.Result); var vm = new ReviewViewModel(); vm.Review = reviewSummaryTask.Result; try { vm.SubmittedByName = vacancy.SubmittedByUser.Name; vm.SubmittedByEmail = vacancy.SubmittedByUser.Email; vm.ApplicationInstructions = vacancy.ApplicationInstructions; vm.ApplicationMethod = vacancy.ApplicationMethod.Value; vm.ApplicationUrl = vacancy.ApplicationUrl; vm.ClosingDate = vacancy.ClosingDate?.AsGdsDate(); vm.EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.Level); vm.EmployerContactName = vacancy.EmployerContact?.Name; vm.EmployerContactEmail = vacancy.EmployerContact?.Email; vm.EmployerContactTelephone = vacancy.EmployerContact?.Phone; vm.EmployerDescription = vacancy.EmployerDescription; vm.EmployerName = vacancy.EmployerName; vm.EmployerNameOption = vacancy.EmployerNameOption.Value; vm.AnonymousReason = vacancy.AnonymousReason; vm.AnonymousApprovedCount = anonymousApprovedCountTask.Result; vm.EmployerWebsiteUrl = vacancy.EmployerWebsiteUrl; vm.MapUrl = MapImageHelper.GetEmployerLocationMapUrl(vacancy, _mapService, MapImageWidth, MapImageHeight); vm.EmployerAddressElements = vacancy.EmployerAddressForDisplay(); vm.LegalEntityName = vacancy.LegalEntityName; vm.IsDisabilityConfident = vacancy.IsDisabilityConfident; vm.NumberOfPositionsCaption = $"{"position".ToQuantity(vacancy.NumberOfPositions.Value)} available"; vm.OutcomeDescription = vacancy.OutcomeDescription; vm.PossibleStartDate = vacancy.StartDate?.AsGdsDate(); vm.ProviderContactName = vacancy.ProviderContact?.Name; vm.ProviderContactEmail = vacancy.ProviderContact?.Email; vm.ProviderContactTelephone = vacancy.ProviderContact?.Phone; vm.ProviderName = vacancy.TrainingProvider.Name; vm.Qualifications = vacancy.Qualifications.SortQualifications(_qualifications.Value).AsText(); vm.ShortDescription = vacancy.ShortDescription; vm.Skills = vacancy.Skills ?? Enumerable.Empty <string>(); vm.OwnerType = vacancy.OwnerType; vm.ThingsToConsider = vacancy.ThingsToConsider; vm.Title = vacancy.Title; vm.TrainingDescription = vacancy.TrainingDescription; vm.VacancyDescription = vacancy.Description; vm.VacancyReferenceNumber = $"VAC{vacancy.VacancyReference}"; vm.TrainingTitle = programme.Title; vm.TrainingType = programme.ApprenticeshipType.GetDisplayName(); vm.TrainingLevel = programme.Level.GetDisplayName(); vm.Level = programme.Level; vm.ExpectedDuration = (vacancy.Wage.DurationUnit.HasValue && vacancy.Wage.Duration.HasValue) ? vacancy.Wage.DurationUnit.Value.GetDisplayName().ToQuantity(vacancy.Wage.Duration.Value) : null; vm.HoursPerWeek = $"{vacancy.Wage.WeeklyHours:0.##}"; vm.WageInfo = vacancy.Wage.WageAdditionalInformation; vm.WageText = vacancy.StartDate.HasValue ? vacancy.Wage.ToText(vacancy.StartDate) : null; vm.WorkingWeekDescription = vacancy.Wage.WorkingWeekDescription; vm.SubmittedDate = vacancy.SubmittedDate.Value; vm.VacancyReviewsApprovedCount = approvedCountTask.Result; vm.VacancyReviewsApprovedFirstTimeCount = approvedFirstTimeCountTask.Result; vm.FieldIdentifiers = await GetFieldIdentifiersViewModel(review); vm.ReviewerComment = review.ManualQaComment; vm.ReviewHistories = historiesVm; vm.IsResubmission = review.SubmissionCount > 1; vm.ReviewerName = review.ReviewedByUser.Name; vm.ReviewedDate = review.ReviewedDate.GetValueOrDefault(); vm.ManualOutcome = review.ManualOutcome; if (review.Status == ReviewStatus.Closed) { vm.PageTitle = GetPageTitle(historiesVm, review.Id, review.ManualOutcome, currentVacancyResult); } vm.AutomatedQaResults = GetAutomatedQaResultViewModel(review); vm.IsVacancyDeleted = currentVacancyResult.IsDeleted; } catch (NullReferenceException ex) { _logger.LogError(ex, "Unable to map vacancy to view model. Unexpected null fields."); throw; } return(vm); }
public async Task MapFromVacancyAsync(DisplayVacancyViewModel vm, Vacancy vacancy) { var programme = await _vacancyClient.GetApprenticeshipProgrammeAsync(vacancy.ProgrammeId); var allQualifications = await _vacancyClient.GetCandidateQualificationsAsync(); vm.ApplicationMethod = vacancy.ApplicationMethod; vm.ApplicationInstructions = vacancy.ApplicationInstructions; vm.ApplicationUrl = vacancy.ApplicationUrl; vm.CanDelete = vacancy.CanDelete; vm.CanSubmit = vacancy.CanSubmit; vm.ClosingDate = (vacancy.ClosedDate ?? vacancy.ClosingDate)?.AsGdsDate(); vm.EducationLevelName = EducationLevelNumberHelper.GetEducationLevelNameOrDefault(programme.EducationLevelNumber, programme.ApprenticeshipLevel); vm.EmployerDescription = vacancy.EmployerDescription; vm.EmployerName = await _vacancyClient.GetEmployerNameAsync(vacancy); vm.EmployerWebsiteUrl = vacancy.EmployerWebsiteUrl; vm.EmployerAddressElements = Enumerable.Empty <string>(); vm.FindAnApprenticeshipUrl = _externalLinksConfiguration.FindAnApprenticeshipUrl; vm.IsAnonymous = vacancy.IsAnonymous; vm.NumberOfPositions = vacancy.NumberOfPositions?.ToString(); vm.NumberOfPositionsCaption = vacancy.NumberOfPositions.HasValue ? $"{"position".ToQuantity(vacancy.NumberOfPositions.Value)} available" : null; vm.OutcomeDescription = vacancy.OutcomeDescription; vm.PossibleStartDate = vacancy.StartDate?.AsGdsDate(); vm.ProviderContactName = vacancy.ProviderContact?.Name; vm.ProviderContactEmail = vacancy.ProviderContact?.Email; vm.ProviderContactTelephone = vacancy.ProviderContact?.Phone; vm.ProviderName = vacancy.TrainingProvider?.Name; vm.Qualifications = vacancy.Qualifications.SortQualifications(allQualifications).AsText(); vm.ShortDescription = vacancy.ShortDescription; vm.Skills = vacancy.Skills ?? Enumerable.Empty <string>(); vm.ThingsToConsider = vacancy.ThingsToConsider; vm.Title = vacancy.Title; vm.TrainingDescription = vacancy.TrainingDescription; vm.VacancyDescription = vacancy.Description; vm.VacancyReferenceNumber = vacancy.VacancyReference.HasValue ? $"VAC{vacancy.VacancyReference.ToString()}" : string.Empty; vm.IsDisabilityConfident = vacancy.IsDisabilityConfident; if (vacancy.EmployerLocation != null) { vm.MapUrl = MapImageHelper.GetEmployerLocationMapUrl(vacancy, _mapService, MapImageWidth, MapImageHeight); vm.EmployerAddressElements = vacancy.EmployerAddressForDisplay(); } if (vacancy.ProgrammeId != null) { vm.TrainingTitle = programme?.Title; vm.TrainingType = programme?.ApprenticeshipType.GetDisplayName(); vm.TrainingLevel = programme?.ApprenticeshipLevel.GetDisplayName(); } if (vacancy.Wage != null) { vm.ExpectedDuration = (vacancy.Wage.DurationUnit.HasValue && vacancy.Wage.Duration.HasValue) ? vacancy.Wage.DurationUnit.Value.GetDisplayName().ToQuantity(vacancy.Wage.Duration.Value) : null; vm.HoursPerWeek = $"{vacancy.Wage.WeeklyHours:0.##}"; vm.WageInfo = vacancy.Wage.WageAdditionalInformation; vm.WageText = vacancy.StartDate.HasValue ? vacancy.Wage.ToText(vacancy.StartDate) : null; vm.WorkingWeekDescription = vacancy.Wage.WorkingWeekDescription; } }