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());
        }
Example #3
0
        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());
        }
Example #4
0
        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());
        }