private async Task <Period> GetFundingPeriod(SpecificationCurrentVersion specification) { Period fundingPeriod = await _specificationsRepository.GetFundingPeriodById(specification.FundingPeriod.Id); if (fundingPeriod == null) { throw new NonRetriableException($"Failed to find a funding period for id: {specification.FundingPeriod.Id}"); } return(fundingPeriod); }
public async Task <IEnumerable <PublishedProviderResult> > AssemblePublishedProviderResults(IEnumerable <ProviderResult> providerResults, Reference author, SpecificationCurrentVersion specificationCurrentVersion) { Guard.ArgumentNotNull(providerResults, nameof(providerResults)); Guard.ArgumentNotNull(author, nameof(author)); Guard.ArgumentNotNull(specificationCurrentVersion, nameof(specificationCurrentVersion)); string specificationId = specificationCurrentVersion.Id; Period fundingPeriod = await _specificationsRepository.GetFundingPeriodById(specificationCurrentVersion.FundingPeriod.Id); if (fundingPeriod == null) { throw new NonRetriableException($"Failed to find a funding period for id: {specificationCurrentVersion.FundingPeriod.Id}"); } IEnumerable <string> providerIds = providerResults.Select(m => m.Provider.Id); ConcurrentBag <PublishedProviderResult> publishedProviderResults = new ConcurrentBag <PublishedProviderResult>(); IEnumerable <FundingStream> allFundingStreams = await GetAllFundingStreams(); Parallel.ForEach(providerResults, (providerResult) => { IEnumerable <PublishedFundingStreamResult> publishedFundingStreamResults = AssembleFundingStreamResults(providerResult, specificationCurrentVersion, author, allFundingStreams); foreach (PublishedFundingStreamResult publishedFundingStreamResult in publishedFundingStreamResults) { PublishedProviderResult publishedProviderResult = new PublishedProviderResult { ProviderId = providerResult.Provider.Id, SpecificationId = specificationId, FundingStreamResult = publishedFundingStreamResult, FundingPeriod = fundingPeriod, }; publishedProviderResult.FundingStreamResult.AllocationLineResult.Current.PublishedProviderResultId = publishedProviderResult.Id; publishedProviderResults.Add(publishedProviderResult); } }); return(publishedProviderResults); }