public async Task <SelectTrainingProviderViewModel> GetSelectTrainingProviderViewModelAsync(VacancyRouteModel vrm, long?ukprn = null) { var vacancyTask = Utility.GetAuthorisedVacancyForEditAsync(_client, _vacancyClient, vrm, RouteNames.TrainingProvider_Select_Get); var trainingProvidersTask = _vacancyClient.GetAllTrainingProvidersAsync(); await Task.WhenAll(vacancyTask, trainingProvidersTask); var vacancy = vacancyTask.Result; var trainingProviders = trainingProvidersTask.Result; var programme = await _vacancyClient.GetApprenticeshipProgrammeAsync(vacancy.ProgrammeId); var vm = new SelectTrainingProviderViewModel { Title = vacancy.Title, TrainingProviders = trainingProviders.Select(t => FormatSuggestion(t.ProviderName, t.Ukprn)), PageInfo = Utility.GetPartOnePageInfo(vacancy), Programme = programme.ToViewModel() }; TrySetSelectedTrainingProvider(vm, trainingProviders, vacancy, ukprn); if (vacancy.Status == VacancyStatus.Referred) { vm.Review = await _reviewSummaryService.GetReviewSummaryViewModelAsync(vacancy.VacancyReference.Value, ReviewFieldMappingLookups.GetTrainingProviderFieldIndicators()); } return(vm); }
private IActionResult AccessDenied() { if (TempData.ContainsKey(TempDataKeys.IsBlockedProvider) && (bool)TempData.Peek(TempDataKeys.IsBlockedProvider)) { return(ProviderAccessRevoked()); } var serviceClaims = User.FindAll(ProviderRecruitClaims.IdamsUserServiceTypeClaimTypeIdentifier); if (serviceClaims.Any(claim => claim.Value.Equals(ProviderRecruitClaims.ServiceClaimValue) == false)) { _logger.LogInformation("User does not have service claim."); return(Redirect(_externalLinks.ProviderApprenticeshipSiteUrl)); } var ukprnClaim = User.FindFirst(ProviderRecruitClaims.IdamsUserUkprnClaimsTypeIdentifier); if (!string.IsNullOrEmpty(ukprnClaim.Value)) { var ukprn = long.Parse(ukprnClaim.Value); bool ukprnIsNotListedInRoatp; try { var allProviders = _vacancyClient.GetAllTrainingProvidersAsync().Result; var provider = allProviders.SingleOrDefault(p => p.Ukprn == ukprn); ukprnIsNotListedInRoatp = provider == null; } catch (Exception) { ukprnIsNotListedInRoatp = true; } if (ukprnIsNotListedInRoatp) { _logger.LogInformation($"Provider {ukprn} is not listed in RoATP for user {User.Identity.Name}."); return(Redirect(_externalLinks.ProviderApprenticeshipSiteUrl)); } } Response.StatusCode = (int)HttpStatusCode.Unauthorized; return(View(ViewNames.AccessDenied)); }