예제 #1
0
        public async Task <IActionResult> SearchCalculationProviderResults([FromBody] SearchRequestViewModel request, [FromQuery] string calculationValueType = null)
        {
            Guard.ArgumentNotNull(request, nameof(request));

            CalculationProviderResultSearchResultViewModel searchResults = await _calculationProviderResultsSearchService.PerformSearch(request);

            if (calculationValueType != null)
            {
                CalculationValueTypeViewModel valueType = calculationValueType.AsEnum <CalculationValueTypeViewModel>();

                foreach (CalculationProviderResultSearchResultItemViewModel providerResult in searchResults.CalculationProviderResults)
                {
                    providerResult.SetCalculationResultDisplay(valueType);
                }
            }

            CalculationProviderResultSearchResultViewModel result = searchResults;

            if (result != null)
            {
                return(Ok(result));
            }

            return(new InternalServerErrorResult($"Find provider results HTTP request failed"));
        }
        public static string AsFormatCalculationType(this object value, CalculationValueTypeViewModel calculationValueTypeViewModel)
        {
            if (value != null)
            {
                if (decimal.TryParse(value.ToString(), out decimal decimalValue))
                {
                    switch (calculationValueTypeViewModel)
                    {
                    case CalculationValueTypeViewModel.Number:
                        return(decimalValue.AsFormattedNumber());

                    case CalculationValueTypeViewModel.Percentage:
                        return(decimalValue.AsFormattedPercentage());

                    case CalculationValueTypeViewModel.Currency:
                        return(decimalValue.AsFormattedMoney());

                    default:
                        throw new InvalidOperationException("Unknown calculation type");
                    }
                }

                return(value.ToString());
            }

            return(Properties.PageText.ExcludedText);
        }
        public async Task <CalculationProviderResultSearchResultViewModel> PerformSearch(SearchRequestViewModel request)
        {
            int pageNumber = request.PageNumber.GetValueOrDefault(1);
            int pageSize   = request.PageSize.GetValueOrDefault(50);

            ApiResponse <CalculationProviderResultSearchResults> searchRequestResult = await _resultsClient.SearchCalculationProviderResults(new SearchModel
            {
                PageNumber    = pageNumber,
                Top           = pageSize,
                SearchTerm    = request.SearchTerm,
                IncludeFacets = request.IncludeFacets,
                ErrorToggle   = string.IsNullOrWhiteSpace(request.ErrorToggle) ? (bool?)null : (request.ErrorToggle == "Errors"),
                Filters       = request.Filters,
                SearchFields  = request.SearchFields
            });

            if (searchRequestResult?.Content == null)
            {
                _logger.Error("Find providers HTTP request failed");
                return(null);
            }

            CalculationProviderResultSearchResults calculationProviderResultSearchResults = searchRequestResult.Content;

            CalculationProviderResultSearchResultViewModel result = new CalculationProviderResultSearchResultViewModel
            {
                TotalResults      = calculationProviderResultSearchResults.TotalCount,
                CurrentPage       = pageNumber,
                TotalErrorResults = calculationProviderResultSearchResults.TotalErrorCount
            };

            List <SearchFacetViewModel> searchFacets = new List <SearchFacetViewModel>();

            if (calculationProviderResultSearchResults.Facets != null)
            {
                foreach (Facet facet in calculationProviderResultSearchResults.Facets)
                {
                    searchFacets.Add(_mapper.Map <SearchFacetViewModel>(facet));
                }
            }

            result.Facets = searchFacets.AsEnumerable();

            List <CalculationProviderResultSearchResultItemViewModel> itemResults = new List <CalculationProviderResultSearchResultItemViewModel>();

            Dictionary <string, CalculationValueTypeViewModel> calcTypes = new Dictionary <string, CalculationValueTypeViewModel>();

            foreach (CalculationProviderResultSearchResult searchresult in calculationProviderResultSearchResults.Results)
            {
                CalculationProviderResultSearchResultItemViewModel vmResult = _mapper.Map <CalculationProviderResultSearchResultItemViewModel>(searchresult);
                if (!calcTypes.ContainsKey(searchresult.CalculationId))
                {
                    ApiResponse <Common.ApiClient.Calcs.Models.Calculation> calcResult = await _calculationsApiClient.GetCalculationById(searchresult.CalculationId);

                    if (calcResult == null || calcResult.Content == null || calcResult.StatusCode != System.Net.HttpStatusCode.OK)
                    {
                        throw new InvalidOperationException($"Unable to get calculation details for calculation ID '{searchresult.CalculationId}'");
                    }

                    CalculationValueTypeViewModel calculationValueTypeViewModel = _mapper.Map <CalculationValueTypeViewModel>(calcResult.Content.ValueType);
                    calcTypes.Add(searchresult.CalculationId, calculationValueTypeViewModel);
                }

                vmResult.SetCalculationResultDisplay(calcTypes[searchresult.CalculationId]);
                itemResults.Add(vmResult);
            }

            result.CalculationProviderResults = itemResults.AsEnumerable();

            if (result.TotalResults == 0)
            {
                result.StartItemNumber = 0;
                result.EndItemNumber   = 0;
            }
            else
            {
                result.StartItemNumber = ((pageNumber - 1) * pageSize) + 1;
                result.EndItemNumber   = result.StartItemNumber + pageSize - 1;
            }

            if (result.EndItemNumber > calculationProviderResultSearchResults.TotalCount)
            {
                result.EndItemNumber = calculationProviderResultSearchResults.TotalCount;
            }

            result.PagerState = new PagerState(pageNumber, (int)Math.Ceiling(calculationProviderResultSearchResults.TotalCount / (double)pageSize), 4);

            return(result);
        }
 public string AsDisplay(CalculationValueTypeViewModel calculationValueTypeViewModel)
 {
     return(CalculationResult.AsFormatCalculationType(calculationValueTypeViewModel));
 }
 public void SetCalculationResultDisplay(CalculationValueTypeViewModel calculationValueTypeViewModel)
 {
     CalculationResultDisplay = CalculationResult.AsFormatCalculationType(calculationValueTypeViewModel);
 }