private void HydrateSectorDetailsWithHowTrainingIsDeliveredDetails(AssessorPage pageHowDeliveredAndDuration, SectorQuestionIds sectorPageIds, AssessorSectorDetails sectorDetails) { if (pageHowDeliveredAndDuration?.Answers == null || !pageHowDeliveredAndDuration.Answers.Any()) { return; } var howHaveTheyDelivered = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(pageHowDeliveredAndDuration.Answers, sectorPageIds.HowHaveTheyDeliveredTraining); var otherIsHowTheyDelivered = RoatpWorkflowPageIds.DeliveringApprenticeshipTraining.DeliveringTrainingOther; if (howHaveTheyDelivered.Contains(otherIsHowTheyDelivered)) { var otherWords = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(pageHowDeliveredAndDuration.Answers, sectorPageIds.HowHaveTheyDeliveredTrainingOther); howHaveTheyDelivered = howHaveTheyDelivered.Replace(otherIsHowTheyDelivered, otherWords.Replace(",", ",")); } sectorDetails.HowHaveTheyDeliveredTraining = howHaveTheyDelivered; sectorDetails.ExperienceOfDeliveringTraining = _extractAnswerValueService.ExtractAnswerValueFromQuestionId( pageHowDeliveredAndDuration.Answers, sectorPageIds.ExperienceOfDeliveringTraining); sectorDetails.TypicalDurationOfTraining = _extractAnswerValueService.ExtractAnswerValueFromQuestionId( pageHowDeliveredAndDuration.Answers, sectorPageIds.TypicalDurationOfTraining); }
public async Task When_SupplementaryInformation_excluded() { var safeguardingPreventDutyPolicyPageId = RoatpWorkflowPageIds.SafeguardingPolicyIncludesPreventDutyPolicy; var assessorPage = new AssessorPage { ApplicationId = _applicationId, Questions = new List <Question> { new Question { QuestionId = "Q1" } }, Answers = new List <Answer> { new Answer { QuestionId = "Q1", Value = "No" } } }; _assessorApiClient.Setup(x => x.GetAssessorPage(_applicationId, It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>())) .ReturnsAsync(assessorPage); var result = await _service.GetSupplementaryInformation(_applicationId, safeguardingPreventDutyPolicyPageId); CollectionAssert.IsEmpty(result); }
public async Task <AssessorPage> GetPage(Guid applicationId, int sequenceNumber, int sectionNumber, string pageId) { AssessorPage page = null; if (_assessorSequenceService.IsValidSequenceNumber(sequenceNumber)) { var qnaSection = await _qnaApiClient.GetSectionBySectionNo(applicationId, sequenceNumber, sectionNumber); var qnaPage = qnaSection?.QnAData.Pages.FirstOrDefault(p => p.PageId == pageId || string.IsNullOrEmpty(pageId)); if (qnaPage != null) { page = qnaPage.ToAssessorPage(_assessorLookupService, applicationId, sequenceNumber, sectionNumber); var nextPageAction = await _qnaApiClient.SkipPageBySectionNo(page.ApplicationId, page.SequenceNumber, page.SectionNumber, page.PageId); if (nextPageAction != null && NextAction.NextPage.Equals(nextPageAction.NextAction, StringComparison.InvariantCultureIgnoreCase)) { page.NextPageId = nextPageAction.NextActionId; } } } return(page); }
private static List <string> GetGuidanceInformation(AssessorPage page) { var guidanceInformation = new List <string>(); if (page != null) { if (!string.IsNullOrEmpty(page.BodyText)) { guidanceInformation.Add(page.BodyText); } if (page.Questions != null) { foreach (var question in page.Questions) { if (!string.IsNullOrEmpty(question.QuestionBodyText)) { guidanceInformation.Add(question.QuestionBodyText); } } } } return(guidanceInformation); }
private void HydrateSectorDetailsWithWhatStandardsOffered(AssessorPage pageWhatStandardsOffered, AssessorSectorDetails sectorDetails, SectorQuestionIds sectorPageIds) { if (pageWhatStandardsOffered?.Answers == null || !pageWhatStandardsOffered.Answers.Any()) { return; } sectorDetails.WhatStandardsOffered = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(pageWhatStandardsOffered.Answers, sectorPageIds.WhatStandardsOffered); }
private void HydrateSectorDetailsWithHowManyEmployees(AssessorPage pageHowManyEmployees, AssessorSectorDetails sectorDetails, SectorQuestionIds sectorPageIds) { if (pageHowManyEmployees?.Answers == null || !pageHowManyEmployees.Answers.Any()) { return; } sectorDetails.HowManyEmployees = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(pageHowManyEmployees.Answers, sectorPageIds.HowManyEmployees); }
private void HydrateSectorDetailsWhatTypeOfTrainingDelivered(AssessorSectorDetails sectorDetails, AssessorPage pageTypeOfTraining, SectorQuestionIds sectorPageIds) { if (pageTypeOfTraining?.Answers == null || !pageTypeOfTraining.Answers.Any()) { return; } sectorDetails.WhatTypeOfTrainingDelivered = _extractAnswerValueService.ExtractAnswerValueFromQuestionId( pageTypeOfTraining.Answers, sectorPageIds.WhatTypeOfTrainingDelivered); }
public string ExtractFurtherQuestionAnswerValueFromQuestionId(AssessorPage assessorPage, string questionId) { var mainQuestionAnswer = ExtractAnswerValueFromQuestionId(assessorPage.Answers, questionId); var furtherQuestionsQuestionId = assessorPage?.Questions? .FirstOrDefault(x => x.QuestionId == questionId)?.Options? .FirstOrDefault(o => o.Value == mainQuestionAnswer)?.FurtherQuestions?.FirstOrDefault() ?.QuestionId; return(ExtractAnswerValueFromQuestionId(assessorPage?.Answers, furtherQuestionsQuestionId)); }
public async Task GetAssessorPage_returns_expected_page() { var expectedResult = new AssessorPage(); _pageService.Setup(x => x.GetPage(_applicationId, _sequenceNumber, _sectionNumber, _pageId)).ReturnsAsync(expectedResult); var actualResult = await _controller.GetAssessorPage(_applicationId, _sequenceNumber, _sectionNumber, _pageId); _pageService.Verify(x => x.GetPage(_applicationId, _sequenceNumber, _sectionNumber, _pageId), Times.Once); Assert.AreSame(expectedResult, actualResult); }
public async Task <AssessorPage> GetPage(Guid applicationId, int sequenceNumber, int sectionNumber, string pageId) { AssessorPage page = null; if (_assessorSequenceService.IsValidSequenceNumber(sequenceNumber)) { if (sequenceNumber == RoatpWorkflowSequenceIds.DeliveringApprenticeshipTraining && sectionNumber == RoatpWorkflowSectionIds.DeliveringApprenticeshipTraining.ManagementHierarchy && pageId == RoatpWorkflowPageIds.DeliveringApprenticeshipTraining.ManagementHierarchy_Financial) { // Sadly we have to cater for existing applications that never had this page as part of an Blind Assessor check if (await ShouldGetManagementHierarchFinancialPage(applicationId)) { page = await GetManagementHierarchFinancialPage(applicationId); } } else { var qnaSection = await _qnaApiClient.GetSectionBySectionNo(applicationId, sequenceNumber, sectionNumber); var qnaPage = qnaSection?.QnAData.Pages.FirstOrDefault(p => p.PageId == pageId || string.IsNullOrEmpty(pageId)); if (qnaPage != null) { page = qnaPage.ToAssessorPage(_assessorLookupService, applicationId, sequenceNumber, sectionNumber); var nextPageAction = await _qnaApiClient.SkipPageBySectionNo(page.ApplicationId, page.SequenceNumber, page.SectionNumber, page.PageId); if (nextPageAction != null && NextAction.NextPage.Equals(nextPageAction.NextAction, StringComparison.InvariantCultureIgnoreCase)) { page.NextPageId = nextPageAction.NextActionId; } else if (page.PageId == RoatpWorkflowPageIds.DeliveringApprenticeshipTraining.ManagementHierarchy) { // Sadly we have to cater for existing applications that never had this page as part of an Blind Assessor check if (await ShouldGetManagementHierarchFinancialPage(applicationId)) { // Move to injected page which shows Financial information to Assessor/Moderator page.NextPageId = RoatpWorkflowPageIds.DeliveringApprenticeshipTraining.ManagementHierarchy_Financial; } } } } } return(page); }
private async Task <AssessorPage> GetManagementHierarchFinancialPage(Guid applicationId) { AssessorPage page = null; var qnaSection = await _qnaApiClient.GetSectionBySectionNo(applicationId, RoatpWorkflowSequenceIds.FinancialEvidence, RoatpWorkflowSectionIds.FinancialEvidence.YourOrganisationsFinancialEvidence); var qnaPage = qnaSection?.QnAData.Pages.FirstOrDefault(p => p.PageId == RoatpWorkflowPageIds.YourOrganisationsFinancialEvidence.FinancialEvidence_Other || p.PageId == RoatpWorkflowPageIds.YourOrganisationsFinancialEvidence.FinancialEvidence_CompanyOrCharity || p.PageId == RoatpWorkflowPageIds.YourOrganisationsFinancialEvidence.FinancialEvidence_SoleTraderOrPartnership); if (qnaPage != null) { // Modify the qnaPage so it shows only relevant questions to the assessor and has an appropriate page id qnaPage.Questions = qnaPage.Questions.Where(p => p.QuestionTag == RoatpWorkflowQuestionTags.Turnover || p.QuestionTag == RoatpWorkflowQuestionTags.AverageNumberofFTEEmployees).ToList(); qnaPage.PageId = RoatpWorkflowPageIds.DeliveringApprenticeshipTraining.ManagementHierarchy_Financial; page = qnaPage.ToAssessorPage(_assessorLookupService, applicationId, RoatpWorkflowSequenceIds.DeliveringApprenticeshipTraining, RoatpWorkflowSectionIds.DeliveringApprenticeshipTraining.ManagementHierarchy); } return(page); }
private void HydrateSectorDetailsWithFullNameJobRoleTimeInRole(AssessorPage page4NameRoleExperience, AssessorSectorDetails sectorDetails, SectorQuestionIds sectorPageIds) { if (page4NameRoleExperience?.Answers == null || !page4NameRoleExperience.Answers.Any()) { return; } sectorDetails.FirstName = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(page4NameRoleExperience.Answers, sectorPageIds.FirstName); sectorDetails.LastName = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(page4NameRoleExperience.Answers, sectorPageIds.LastName); sectorDetails.JobRole = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(page4NameRoleExperience.Answers, sectorPageIds.JobRole); sectorDetails.TimeInRole = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(page4NameRoleExperience.Answers, sectorPageIds.TimeInRole); sectorDetails.IsPartOfAnyOtherOrganisations = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(page4NameRoleExperience.Answers, sectorPageIds.IsPartOfAnyOtherOrganisations); sectorDetails.OtherOrganisations = _extractAnswerValueService.ExtractFurtherQuestionAnswerValueFromQuestionId(page4NameRoleExperience, sectorPageIds.IsPartOfAnyOtherOrganisations); var dateOfBirth = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(page4NameRoleExperience.Answers, sectorPageIds.DateOfBirth); sectorDetails.DateOfBirth = DateOfBirthFormatter.GetMonthYearDescription(dateOfBirth); sectorDetails.Email = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(page4NameRoleExperience.Answers, sectorPageIds.Email); sectorDetails.ContactNumber = _extractAnswerValueService.ExtractAnswerValueFromQuestionId(page4NameRoleExperience.Answers, sectorPageIds.ContactNumber); }
public static AssessorPage ToAssessorPage(this Page qnaPage, IAssessorLookupService assessorLookupService, Guid applicationId, int sequenceNumber, int sectionNumber) { var page = new AssessorPage { ApplicationId = applicationId, SequenceNumber = sequenceNumber, SectionNumber = sectionNumber, PageId = qnaPage.PageId, DisplayType = qnaPage.DisplayType, Caption = assessorLookupService?.GetTitleForSequence(sequenceNumber), Heading = assessorLookupService?.GetTitleForPage(qnaPage.PageId) ?? qnaPage.LinkTitle, Title = qnaPage.Title, BodyText = qnaPage.BodyText }; if (qnaPage.Questions != null && qnaPage.Questions.Any()) { page.Questions = new List <AssessorQuestion>(qnaPage.Questions.Select(q => { return(q.ToAssessorQuestion(assessorLookupService)); })); } if (qnaPage.PageOfAnswers != null && qnaPage.PageOfAnswers.Any()) { var qnaAnswers = qnaPage.PageOfAnswers.SelectMany(pao => pao.Answers); page.Answers = qnaAnswers.ToLookup(a => a.QuestionId).Select(group => { return(new AssessorAnswer { QuestionId = group.Key, Value = group.FirstOrDefault()?.Value }); }).ToList(); } page.GuidanceInformation = GetGuidanceInformation(page); return(page); }
public async Task GetSectorsViewModel_returns_ViewModel() { int sequenceNumber = SequenceIds.DeliveringApprenticeshipTraining; int sectionNumber = SectionIds.DeliveringApprenticeshipTraining.YourSectorsAndEmployees; string pageId = RoatpWorkflowPageIds.YourSectorsAndEmployeesStartingPageId; var userId = _user.UserId(); _chosenSectors.Add(new AssessorSector { PageId = "1", Title = "page 1 title", Status = "Pass" }); _chosenSectors.Add(new AssessorSector { PageId = "2", Title = "page 2 title" }); _ukprn = "1234"; _organisationName = "org name"; _providerRouteName = "Main"; var application = new Apply { ApplicationId = _applicationId, ApplyData = new ApplyData { ApplyDetails = new ApplyDetails { UKPRN = _ukprn, OrganisationName = _organisationName, ProviderRouteName = _providerRouteName, ApplicationSubmittedOn = _applicationSubmittedOn } } }; var assessorPage = new AssessorPage { Caption = _assessorPageCaption }; _applicationApiClient.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(application); _assessorApiClient.Setup(x => x.GetAssessorPage(_applicationId, sequenceNumber, sectionNumber, pageId)) .ReturnsAsync(assessorPage); _assessorApiClient.Setup(x => x.GetAssessorSectors(_applicationId, userId)) .ReturnsAsync(_chosenSectors); var request = new GetSectorsRequest(_applicationId, userId); var actualViewModel = await _orchestrator.GetSectorsViewModel(request); Assert.That(actualViewModel, Is.Not.Null); var expectedViewModel = new ApplicationSectorsViewModel { ApplyLegalName = _organisationName, Ukprn = _ukprn, SelectedSectors = _chosenSectors, ApplicationId = _applicationId, ApplicationRoute = _providerRouteName, SubmittedDate = _applicationSubmittedOn, Caption = _assessorPageCaption, Heading = SectionIds.DeliveringApprenticeshipTraining.YourSectorsAndEmployeesHeading }; Assert.AreEqual(JsonConvert.SerializeObject(actualViewModel), JsonConvert.SerializeObject(expectedViewModel)); }
public void SetUp() { var logger = new Mock <ILogger <Web.Services.AssessorSectionReviewOrchestrator> >(); _applyApiClient = new Mock <IRoatpApplicationApiClient>(); _assessorApiClient = new Mock <IRoatpAssessorApiClient>(); var supplementaryInformationService = new Mock <ISupplementaryInformationService>(); _orchestrator = new Web.Services.AssessorSectionReviewOrchestrator(logger.Object, _applyApiClient.Object, _assessorApiClient.Object, supplementaryInformationService.Object); _userId = _user.UserId(); _application = new Apply { ApplicationId = _applicationId, ApplyData = new ApplyData { ApplyDetails = new ApplyDetails { } }, Assessor1UserId = _userId }; _contact = new Contact { Email = _userId, GivenNames = _user.GivenName(), FamilyName = _user.Surname() }; _assessorPage = new AssessorPage { ApplicationId = _applicationId, SequenceNumber = _sequenceNumber, SectionNumber = _sectionNumber, PageId = _pageId, Questions = new List <Question> { new Question { QuestionId = "Q1" } }, Answers = new List <Answer> { new Answer { QuestionId = "Q1", Value = "value" } } }; _pageReviewOutcome = new AssessorPageReviewOutcome { ApplicationId = _applicationId, SequenceNumber = _sequenceNumber, SectionNumber = _sectionNumber, PageId = _pageId, UserId = _userId, Status = AssessorPageReviewStatus.Pass }; _applyApiClient.Setup(x => x.GetApplication(_applicationId)).ReturnsAsync(_application); _applyApiClient.Setup(x => x.GetContactForApplication(_applicationId)).ReturnsAsync(_contact); _assessorApiClient.Setup(x => x.GetAssessorPage(_applicationId, _sequenceNumber, _sectionNumber, _pageId)) .ReturnsAsync(_assessorPage); _assessorApiClient.Setup(x => x.GetAssessorPageReviewOutcomesForSection(_applicationId, _sequenceNumber, _sectionNumber, _userId)) .ReturnsAsync(new List <AssessorPageReviewOutcome> { _pageReviewOutcome }); _assessorApiClient.Setup(x => x.GetAssessorPageReviewOutcome(_applicationId, _sequenceNumber, _sectionNumber, _pageId, _userId)) .ReturnsAsync(_pageReviewOutcome); }
public async Task <AssessorSectorDetails> GetSectorDetails(Guid applicationId, string pageId) { var sectorDetails = new AssessorSectorDetails { SectorName = _lookupService.GetSectorNameForPage(pageId) }; var sectorPageIds = _lookupService.GetSectorQuestionIdsForSectorPageId(pageId); if (sectorPageIds == null) { return(null); } var sequenceNumber = RoatpWorkflowSequenceIds.DeliveringApprenticeshipTraining; var sectionNumber = RoatpWorkflowSectionIds.DeliveringApprenticeshipTraining.YourSectorsAndEmployees; var pageExperienceQualificationsMemberships = new AssessorPage(); var pageTypeOfTraining = new AssessorPage(); var pageWhatStandardsOffered = await _pageService.GetPage(applicationId, sequenceNumber, sectionNumber, pageId); if (pageWhatStandardsOffered == null) { return(null); } HydrateSectorDetailsWithWhatStandardsOffered(pageWhatStandardsOffered, sectorDetails, sectorPageIds); var pageHowManyStarts = await _pageService.GetPage(applicationId, sequenceNumber, sectionNumber, pageWhatStandardsOffered.NextPageId); HydrateSectorDetailsWithHowManyStarts(pageHowManyStarts, sectorDetails, sectorPageIds); var pageHowManyEmployees = await _pageService.GetPage(applicationId, sequenceNumber, sectionNumber, pageHowManyStarts.NextPageId); HydrateSectorDetailsWithHowManyEmployees(pageHowManyEmployees, sectorDetails, sectorPageIds); var pageNameRoleExperience = await _pageService.GetPage(applicationId, sequenceNumber, sectionNumber, pageHowManyEmployees.NextPageId); HydrateSectorDetailsWithFullNameJobRoleTimeInRole(pageNameRoleExperience, sectorDetails, sectorPageIds); if (!string.IsNullOrEmpty(pageNameRoleExperience.NextPageId)) { pageExperienceQualificationsMemberships = await _pageService.GetPage(applicationId, sequenceNumber, sectionNumber, pageNameRoleExperience.NextPageId); HydrateSectorDetailsWithQualificationsAwardingBodiesAndTradeMemberships(sectorDetails, pageExperienceQualificationsMemberships, sectorPageIds); } if (!string.IsNullOrEmpty(pageExperienceQualificationsMemberships.NextPageId)) { pageTypeOfTraining = await _pageService.GetPage(applicationId, sequenceNumber, sectionNumber, pageExperienceQualificationsMemberships.NextPageId); HydrateSectorDetailsWhatTypeOfTrainingDelivered(sectorDetails, pageTypeOfTraining, sectorPageIds); } if (!string.IsNullOrEmpty(pageTypeOfTraining.NextPageId)) { var pageHowDeliveredAndDuration = await _pageService.GetPage(applicationId, sequenceNumber, sectionNumber, pageTypeOfTraining.NextPageId); HydrateSectorDetailsWithHowTrainingIsDeliveredDetails(pageHowDeliveredAndDuration, sectorPageIds, sectorDetails); } return(sectorDetails); }
private void HydrateSectorDetailsWithQualificationsAwardingBodiesAndTradeMemberships(AssessorSectorDetails sectorDetails, AssessorPage page5ExperienceQualificationsMemberships, SectorQuestionIds sectorPageIds) { if (page5ExperienceQualificationsMemberships?.Answers == null || !page5ExperienceQualificationsMemberships.Answers.Any()) { return; } sectorDetails.ExperienceOfDelivering = _extractAnswerValueService.ExtractAnswerValueFromQuestionId( page5ExperienceQualificationsMemberships.Answers, sectorPageIds.ExperienceOfDelivering); sectorDetails.WhereDidTheyGainThisExperience = _extractAnswerValueService.ExtractFurtherQuestionAnswerValueFromQuestionId( page5ExperienceQualificationsMemberships, sectorPageIds.ExperienceOfDelivering); sectorDetails.DoTheyHaveQualifications = _extractAnswerValueService.ExtractAnswerValueFromQuestionId( page5ExperienceQualificationsMemberships.Answers, sectorPageIds.DoTheyHaveQualifications); sectorDetails.WhatQualificationsDoTheyHave = _extractAnswerValueService.ExtractFurtherQuestionAnswerValueFromQuestionId( page5ExperienceQualificationsMemberships, sectorPageIds.DoTheyHaveQualifications); sectorDetails.ApprovedByAwardingBodies = _extractAnswerValueService.ExtractAnswerValueFromQuestionId( page5ExperienceQualificationsMemberships.Answers, sectorPageIds.AwardingBodies); sectorDetails.NamesOfAwardingBodies = _extractAnswerValueService.ExtractFurtherQuestionAnswerValueFromQuestionId( page5ExperienceQualificationsMemberships, sectorPageIds.AwardingBodies); sectorDetails.DoTheyHaveTradeBodyMemberships = _extractAnswerValueService.ExtractAnswerValueFromQuestionId( page5ExperienceQualificationsMemberships.Answers, sectorPageIds.TradeMemberships); sectorDetails.NamesOfTradeBodyMemberships = _extractAnswerValueService.ExtractFurtherQuestionAnswerValueFromQuestionId( page5ExperienceQualificationsMemberships, sectorPageIds.TradeMemberships); }