public async Task <IActionResult> OnGetAsync(string fundingPeriod, string fundingStream, ChoosePageBannerOperationType?operationType = null, string operationId = null) { List <Task> tasks = new List <Task>(); Task <ApiResponse <IEnumerable <SpecificationSummary> > > specificationsLookupTask = null; if (!string.IsNullOrWhiteSpace(fundingPeriod) && !string.IsNullOrWhiteSpace(fundingStream)) { specificationsLookupTask = _specsClient.GetApprovedSpecifications(fundingPeriod, fundingStream); tasks.Add(specificationsLookupTask); } Task <ApiResponse <IEnumerable <Reference> > > fundingPeriodsLookupTask = _specsClient.GetFundingPeriods(); Task <ApiResponse <IEnumerable <FundingStream> > > fundingStreamsLookupTask = _specsClient.GetFundingStreams(); tasks.Add(fundingPeriodsLookupTask); tasks.Add(fundingStreamsLookupTask); await TaskHelper.WhenAllAndThrow(tasks.ToArray()); IActionResult errorResult = fundingPeriodsLookupTask.Result.IsSuccessOrReturnFailureResult("Funding Period"); if (errorResult != null) { return(errorResult); } errorResult = fundingStreamsLookupTask.Result.IsSuccessOrReturnFailureResult("Funding Stream"); if (errorResult != null) { return(errorResult); } FundingStreams = fundingStreamsLookupTask.Result.Content.Select(s => new SelectListItem() { Text = s.Name, Value = s.Id, Selected = fundingStream == s.Id, }); FundingPeriods = fundingPeriodsLookupTask.Result.Content.Select(s => new SelectListItem() { Text = s.Name, Value = s.Id, Selected = fundingPeriod == s.Id, }); Dictionary <string, ChooseApprovalSpecificationViewModel> specifications = new Dictionary <string, ChooseApprovalSpecificationViewModel>(); if (!string.IsNullOrWhiteSpace(fundingPeriod) && !string.IsNullOrWhiteSpace(fundingStream)) { errorResult = specificationsLookupTask.Result.IsSuccessOrReturnFailureResult("Specification"); if (errorResult != null) { return(errorResult); } SelectedFundingPeriodId = fundingPeriod; SelectedFundingStreamId = fundingStream; IEnumerable <SpecificationSummary> specificationSummaries = specificationsLookupTask.Result.Content.ToList(); IEnumerable <SpecificationSummary> specificationSummariesTrimmed = await _authorizationHelper.SecurityTrimList(User, specificationSummaries, SpecificationActionTypes.CanChooseFunding); IEnumerable <SpecificationSummary> specificationSummariesUnauthorizedToChoose = specificationSummaries.Except(specificationSummariesTrimmed); IsSpecificationSelectedForThisFunding = specificationSummaries.Any(sc => sc.IsSelectedForFunding); IEnumerable <ChooseApprovalSpecificationViewModel> specificationsAuthorizedViewModel = ConvertToChooseApprovalSpecificationModelWithCanBeChosenFlag(specificationSummariesTrimmed, !IsSpecificationSelectedForThisFunding); IEnumerable <ChooseApprovalSpecificationViewModel> specificationsUnauthorizedViewModel = ConvertToChooseApprovalSpecificationModelWithCanBeChosenFlag(specificationSummariesUnauthorizedToChoose, false); ShouldDisplayPermissionsBanner = specificationsUnauthorizedViewModel.Any(); IEnumerable <ChooseApprovalSpecificationViewModel> specificationViewModels = specificationsAuthorizedViewModel.Concat(specificationsUnauthorizedViewModel); specifications = specificationViewModels.ToDictionary(vm => vm.Id); } if (specifications.Count > 0) { SpecificationIdsRequestModel specificationIdsRequest = new SpecificationIdsRequestModel() { SpecificationIds = specifications.Keys, }; Task <ApiResponse <IEnumerable <CalculationStatusCounts> > > calculationStatusCountsLookupTask = _calcsClient.GetCalculationStatusCounts(specificationIdsRequest); Task <ApiResponse <IEnumerable <FundingCalculationResultsTotals> > > resultTotalsCountsLookupTask = _resultsClient.GetFundingCalculationResultsTotals(specificationIdsRequest); Task <ApiResponse <IEnumerable <SpecificationTestScenarioResultCounts> > > testScenarioResultCountsLookupTask = _testEngineClient.GetTestScenarioCountsForSpecifications(specificationIdsRequest); await TaskHelper.WhenAllAndThrow(calculationStatusCountsLookupTask, resultTotalsCountsLookupTask, testScenarioResultCountsLookupTask); errorResult = calculationStatusCountsLookupTask.Result.IsSuccessOrReturnFailureResult("Calculation Status Counts"); if (errorResult != null) { return(errorResult); } errorResult = resultTotalsCountsLookupTask.Result.IsSuccessOrReturnFailureResult("Calculation Result"); if (errorResult != null) { return(errorResult); } errorResult = testScenarioResultCountsLookupTask.Result.IsSuccessOrReturnFailureResult("Test Scenario Counts"); if (errorResult != null) { return(errorResult); } if (calculationStatusCountsLookupTask.Result.Content.Count() != specificationIdsRequest.SpecificationIds.Count()) { return(new InternalServerErrorResult($"Number of calculation approvals counts ({calculationStatusCountsLookupTask.Result.Content.Count()} does not match number of specifications requested ({specificationIdsRequest.SpecificationIds.Count()}")); } foreach (CalculationStatusCounts counts in calculationStatusCountsLookupTask.Result.Content) { ChooseApprovalSpecificationViewModel chooseVm = specifications[counts.SpecificationId]; chooseVm.CalculationsApproved = counts.Approved; chooseVm.CalculationsTotal = counts.Total; } if (resultTotalsCountsLookupTask.Result.Content.Count() != specificationIdsRequest.SpecificationIds.Count()) { return(new InternalServerErrorResult($"Number of calculation result counts ({resultTotalsCountsLookupTask.Result.Content.Count()} does not match number of specifications requested ({specificationIdsRequest.SpecificationIds.Count()}")); } foreach (FundingCalculationResultsTotals counts in resultTotalsCountsLookupTask.Result.Content) { ChooseApprovalSpecificationViewModel chooseVm = specifications[counts.SpecificationId]; chooseVm.FundingAmount = counts.TotalResult; } if (testScenarioResultCountsLookupTask.Result.Content.Count() != specificationIdsRequest.SpecificationIds.Count()) { return(new InternalServerErrorResult($"Number of test scenario result counts ({testScenarioResultCountsLookupTask.Result.Content.Count()} does not match number of specifications requested ({specificationIdsRequest.SpecificationIds.Count()}")); } foreach (SpecificationTestScenarioResultCounts counts in testScenarioResultCountsLookupTask.Result.Content) { ChooseApprovalSpecificationViewModel chooseVm = specifications[counts.SpecificationId]; chooseVm.QaTestsPassed = counts.Passed; chooseVm.QaTestsTotal = counts.Passed + counts.Ignored + counts.Failed; chooseVm.ProviderQaCoverage = counts.TestCoverage; } } Specifications = specifications.Values.AsEnumerable(); if (operationType.HasValue && specifications.ContainsKey(operationId)) { ChooseApprovalSpecificationViewModel specification = specifications[operationId]; PageBannerOperation = new PageBannerOperation() { EntityName = specification.Name, EntityType = "Specification", OperationAction = "chosen for funding", OperationId = operationId, ActionText = "View funding", ActionUrl = "/approvals/viewfunding/" + specification.Id }; } return(Page()); }
public async Task <IActionResult> OnGetAsync(int?pageNumber, string searchTerm, DatasetPageBannerOperationType?operationType = null, string operationId = null) { SearchRequestViewModel searchRequest = new SearchRequestViewModel() { PageNumber = pageNumber, IncludeFacets = false, SearchTerm = searchTerm, }; SearchTerm = searchTerm; OperationType = operationType; if (operationType.HasValue) { if (string.IsNullOrWhiteSpace(operationId)) { return(new PreconditionFailedResult("Operation ID not provided")); } ApiResponse <DatasetVersionResponse> datasetVersionResponse = await _datasetApiClient.GetCurrentDatasetVersionByDatasetId(operationId); IActionResult errorResult = datasetVersionResponse.IsSuccessOrReturnFailureResult("Dataset"); if (errorResult != null) { return(errorResult); } DatasetVersionResponse DatsetVersion = datasetVersionResponse.Content; PageBanner = new PageBannerOperation() { EntityName = DatsetVersion.Name, EntityType = "Data Source", OperationId = operationId, DisplayOperationActionSummary = true, CurrentDataSourceRows = DatsetVersion.CurrentDataSourceRows, PreviousDataSourceRows = DatsetVersion.PreviousDataSourceRows, SecondaryActionUrl = $"/datasets/updatedataset?datasetId={operationId}", }; switch (operationType) { case DatasetPageBannerOperationType.DatasetCreated: PageBanner.OperationActionSummaryText = "A new data source with " + PageBanner.CurrentDataSourceRows + " data rows uploaded"; break; case DatasetPageBannerOperationType.DatasetUpdated: PageBanner.OperationActionSummaryText = "A new version of a data source with " + PageBanner.CurrentDataSourceRows + " data rows uploaded, the previous version contained " + PageBanner.PreviousDataSourceRows + " data rows"; break; } } SearchResults = await _searchService.PerformSearch(searchRequest); if (SearchResults == null) { return(new InternalServerErrorResult("There was an error retrieving data sources from the Search Index.")); } return(Page()); }
public async Task <IActionResult> OnGetAsync(string searchTerm = null, int?pageNumber = null, SpecificationPageBannerOperationType?operationType = null, string operationId = null) { SearchRequestViewModel searchRequest = new SearchRequestViewModel() { PageNumber = pageNumber ?? 1, IncludeFacets = true, SearchTerm = searchTerm }; SearchTerm = searchTerm; OperationType = operationType; if (operationType.HasValue) { if (string.IsNullOrWhiteSpace(operationId)) { return(new PreconditionFailedResult("Operation ID not provided")); } ApiResponse <SpecificationSummary> specificationResponse = await _specsClient.GetSpecificationSummary(operationId); IActionResult errorResult = specificationResponse.IsSuccessOrReturnFailureResult("Specification"); if (errorResult != null) { return(errorResult); } SpecificationSummary specificationSummary = specificationResponse.Content; PageBanner = new PageBannerOperation() { EntityName = specificationSummary.Name, EntityType = "Specification", OperationId = operationId, ActionText = "Edit", ActionUrl = $"/specs/policies/{specificationSummary.Id}", SecondaryActionUrl = $"/specs/EditSpecification/{specificationSummary.Id}?returnPage=Specifications", }; switch (operationType) { case SpecificationPageBannerOperationType.SpecificationCreated: PageBanner.OperationAction = "created"; break; case SpecificationPageBannerOperationType.SpecificationUpdated: PageBanner.OperationAction = "edited"; break; } } SearchResults = await _searchService.PerformSearch(searchRequest); if (SearchResults == null) { return(new InternalServerErrorResult("There was an error retrieving Specifications from the Search Index.")); } InitialSearchResults = JsonConvert.SerializeObject(SearchResults, Formatting.Indented, new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver(), StringEscapeHandling = StringEscapeHandling.EscapeHtml }); return(Page()); }
public async Task <IActionResult> OnGet(string specificationId, PoliciesPageBannerOperationType?operationType, string operationId) { Guard.IsNullOrWhiteSpace(specificationId, nameof(specificationId)); Task <ApiResponse <Specification> > specificationResponseTask = _specsClient.GetSpecification(specificationId); Task <ApiResponse <IEnumerable <DatasetSchemasAssigned> > > datasetSchemaResponseTask = _datasetsClient.GetAssignedDatasetSchemasForSpecification(specificationId); await TaskHelper.WhenAllAndThrow(specificationResponseTask, datasetSchemaResponseTask); ApiResponse <Specification> specificationResponse = specificationResponseTask.Result; ApiResponse <IEnumerable <DatasetSchemasAssigned> > datasetSchemaResponse = datasetSchemaResponseTask.Result; if (specificationResponse == null) { _logger.Warning("Specification API Request came back null for Specification ID = '{specificationId}'", specificationId); return(new ObjectResult("Specification Lookup API Failed and returned null") { StatusCode = 500 }); } if (datasetSchemaResponse == null) { _logger.Warning("Dataset Schema Response API Request came back null for Specification ID = '{specificationId}'", specificationId); return(new ObjectResult("Datasets Lookup API Failed and returned null") { StatusCode = 500 }); } if (specificationResponse.StatusCode == HttpStatusCode.NotFound) { return(new NotFoundObjectResult("Specification not found")); } if (specificationResponse.StatusCode != HttpStatusCode.OK) { _logger.Warning("Dataset Schema Response API Request came back with '{statusCode}' for Specification ID = '{specificationId}'", specificationResponse.StatusCode, specificationId); return(new ObjectResult("Specification Lookup API Failed") { StatusCode = 500 }); } if (datasetSchemaResponse.StatusCode != HttpStatusCode.OK) { _logger.Warning("Dataset Schema Response API Request came back with '{statusCode} for Specification ID = '{specificationId}'", datasetSchemaResponse.StatusCode, specificationId); return(new ObjectResult("Datasets Schema API Failed") { StatusCode = 500 }); } this.DoesUserHavePermissionToApprove = (await _authorizationHelper.DoesUserHavePermission(User, specificationResponse.Content, SpecificationActionTypes.CanApproveSpecification)).ToString().ToLowerInvariant(); this.Specification = _mapper.Map <SpecificationViewModel>(specificationResponse.Content); HasProviderDatasetsAssigned = datasetSchemaResponse.Content.Any(d => d.IsSetAsProviderData); if (operationType.HasValue) { if (string.IsNullOrWhiteSpace(operationId)) { return(new PreconditionFailedResult("Operation ID not provided")); } PageBanner = new PageBannerOperation(); switch (operationType.Value) { case PoliciesPageBannerOperationType.SpecificationCreated: case PoliciesPageBannerOperationType.SpecificationUpdated: PageBanner.EntityName = Specification.Name; PageBanner.EntityType = "Specification"; PageBanner.OperationAction = "updated"; PageBanner.ActionText = "Edit"; PageBanner.ActionUrl = $"/specs/editspecification/{Specification.Id}&returnPage=ManagePolicies"; if (operationType.Value == PoliciesPageBannerOperationType.SpecificationUpdated) { PageBanner.OperationAction = "updated"; } else if (operationType.Value == PoliciesPageBannerOperationType.SpecificationCreated) { PageBanner.OperationAction = "created"; } break; case PoliciesPageBannerOperationType.PolicyUpdated: case PoliciesPageBannerOperationType.PolicyCreated: PageBanner.EntityName = Specification.Policies.Where(p => p.Id == operationId).FirstOrDefault()?.Name; PageBanner.EntityType = "Policy"; PageBanner.ActionText = "Edit"; PageBanner.ActionUrl = $"/specs/editPolicy/{specificationId}/{operationId}"; if (operationType.Value == PoliciesPageBannerOperationType.PolicyUpdated) { PageBanner.OperationAction = "updated"; } else if (operationType.Value == PoliciesPageBannerOperationType.PolicyCreated) { PageBanner.OperationAction = "created"; } break; case PoliciesPageBannerOperationType.SubpolicyUpdated: case PoliciesPageBannerOperationType.SubpolicyCreated: string policyId = null; if (Specification.Policies.AnyWithNullCheck()) { foreach (PolicyViewModel policy in Specification.Policies) { if (policy.SubPolicies.AnyWithNullCheck()) { foreach (PolicyViewModel subpolicy in policy.SubPolicies) { if (subpolicy.Id == operationId) { PageBanner.EntityName = subpolicy.Name; policyId = policy.Id; } } } } } PageBanner.EntityType = "Subpolicy"; PageBanner.ActionText = "Edit"; PageBanner.ActionUrl = $"/specs/EditSubPolicy/{specificationId}/{operationId}/{policyId}"; if (operationType.Value == PoliciesPageBannerOperationType.SubpolicyUpdated) { PageBanner.OperationAction = "updated"; } else if (operationType.Value == PoliciesPageBannerOperationType.SubpolicyCreated) { PageBanner.OperationAction = "created"; } break; case PoliciesPageBannerOperationType.CalculationUpdated: case PoliciesPageBannerOperationType.CalculationCreated: if (Specification.Policies.AnyWithNullCheck()) { foreach (PolicyViewModel policy in Specification.Policies) { if (policy.SubPolicies.AnyWithNullCheck()) { foreach (PolicyViewModel subpolicy in policy.SubPolicies) { if (subpolicy.Calculations.AnyWithNullCheck()) { foreach (CalculationViewModel calculation in subpolicy.Calculations) { if (calculation.Id == operationId) { PageBanner.EntityName = calculation.Name; } } } } } if (policy.Calculations.AnyWithNullCheck()) { foreach (CalculationViewModel calculation in policy.Calculations) { if (calculation.Id == operationId) { PageBanner.EntityName = calculation.Name; } } } } } PageBanner.EntityType = "Calculation specification"; PageBanner.OperationAction = "updated"; PageBanner.ActionText = "Edit"; PageBanner.ActionUrl = $"/specs/EditCalculation/{operationId}?specificationId={specificationId}"; if (operationType.Value == PoliciesPageBannerOperationType.CalculationUpdated) { PageBanner.OperationAction = "updated"; } else if (operationType.Value == PoliciesPageBannerOperationType.CalculationCreated) { PageBanner.OperationAction = "created"; } break; } } return(Page()); }