Esempio n. 1
0
        private IEnumerable <Provider> GetProviderQueryResponse(SelectionCriteriaStructure criteria, string queryId, int batchSize, IDictionary <string, string> warnings)
        {
            var noOfUkprnsProcessed = 0;

            var providerUkprns = criteria.UnitedKingdomProviderReferenceNumberList.ToList();
            var ukprnsListSize = providerUkprns.Count;

            do
            {
                var numberOfUkprnsUnprocessed = ukprnsListSize - noOfUkprnsProcessed;
                var numberOfUkprnsToSend      = numberOfUkprnsUnprocessed > batchSize
                    ? batchSize
                    : numberOfUkprnsUnprocessed;

                criteria.UnitedKingdomProviderReferenceNumberList =
                    providerUkprns.Skip(noOfUkprnsProcessed).Take(numberOfUkprnsToSend).ToArray();

                var providerQueryStructure = new ProviderQueryStructure
                {
                    QueryId           = queryId,
                    SchemaVersion     = "?",
                    SelectionCriteria = criteria
                };

                ProviderQueryResponse response = null;
                try
                {
                    PreRequest?.Invoke(criteria);
                    response = _client.retrieveAllProviders(providerQueryStructure);
                    PostRequest?.Invoke(criteria, response);
                }
                catch (Exception ex)
                {
                    throw new ProviderQueryException(ex.Message, criteria, ex);
                }

                var providers = response?.MatchingProviderRecords?.Select(MapFromUkrlpProviderRecord).ToList() ??
                                new List <Provider>();
                foreach (
                    var missing in
                    criteria.UnitedKingdomProviderReferenceNumberList.Where(
                        x => providers.All(y => x != y.UnitedKingdomProviderReferenceNumber)))
                {
                    warnings.Add(missing, MissingMessage);
                }

                foreach (var provider in providers)
                {
                    yield return(provider);
                }
                noOfUkprnsProcessed += numberOfUkprnsToSend;
            } while (noOfUkprnsProcessed < ukprnsListSize);
        }