private ProviderResultSummary CreateProviderResultSummary(IEnumerable <AllocationNotificationFeedIndex> entries, HttpRequest request) { ///TODO: Require permanent fix if (entries.First().ProviderUkPrn == "10080459") { entries = entries.Where(m => m.ProviderStatus == "Closed"); } IEnumerable <IGrouping <string, AllocationNotificationFeedIndex> > fundingPeriodResultSummaryGroups = entries.GroupBy(m => m.FundingPeriodId); AllocationNotificationFeedIndex firstEntry = entries.First(); ProviderResultSummary providerResutSummary = new ProviderResultSummary { Provider = new AllocationProviderModel { Name = firstEntry.ProviderName, LegalName = firstEntry.ProviderLegalName, UkPrn = firstEntry.ProviderUkPrn, Upin = firstEntry.ProviderUpin, Urn = firstEntry.ProviderUrn, DfeEstablishmentNumber = firstEntry.DfeEstablishmentNumber, EstablishmentNumber = firstEntry.EstablishmentNumber, LaCode = firstEntry.LaCode, LocalAuthority = firstEntry.Authority, Type = firstEntry.ProviderType, SubType = firstEntry.SubProviderType, OpenDate = firstEntry.ProviderOpenDate, CloseDate = firstEntry.ProviderClosedDate, CrmAccountId = firstEntry.CrmAccountId, NavVendorNo = firstEntry.NavVendorNo, Status = firstEntry.ProviderStatus } }; foreach (IGrouping <string, AllocationNotificationFeedIndex> fundingPeriodResultSummaryGroup in fundingPeriodResultSummaryGroups) { AllocationNotificationFeedIndex firstPeriodEntry = fundingPeriodResultSummaryGroup.First(); ProviderPeriodResultSummary providerPeriodResultSummary = new ProviderPeriodResultSummary { Period = new Period { Id = firstPeriodEntry.FundingPeriodId, Name = firstPeriodEntry.FundingStreamPeriodName, StartYear = firstPeriodEntry.FundingPeriodStartYear, EndYear = firstPeriodEntry.FundingPeriodEndYear } }; IEnumerable <IGrouping <string, AllocationNotificationFeedIndex> > fundingStreamResultSummaryGroups = fundingPeriodResultSummaryGroup.GroupBy(m => m.FundingStreamId); foreach (IGrouping <string, AllocationNotificationFeedIndex> fundingStreamResultSummaryGroup in fundingStreamResultSummaryGroups) { AllocationNotificationFeedIndex feedIndex = fundingStreamResultSummaryGroup.First(); FundingStreamResultSummary fundingStreamResultSummary = new FundingStreamResultSummary { FundingStream = new AllocationFundingStreamModel { Id = feedIndex.FundingStreamId, Name = feedIndex.FundingStreamName, ShortName = feedIndex.FundingStreamShortName, PeriodType = new AllocationFundingStreamPeriodTypeModel { Id = feedIndex.FundingStreamPeriodId, Name = feedIndex.FundingStreamPeriodName, StartDay = feedIndex.FundingStreamStartDay, StartMonth = feedIndex.FundingStreamStartMonth, EndDay = feedIndex.FundingStreamEndDay, EndMonth = feedIndex.FundingStreamEndMonth } } }; foreach (AllocationNotificationFeedIndex allocationFeedIndex in fundingStreamResultSummaryGroup) { fundingStreamResultSummary.Allocations.Add(new AllocationResult { AllocationLine = new AllocationLine { Id = allocationFeedIndex.AllocationLineId, Name = allocationFeedIndex.AllocationLineName, ShortName = allocationFeedIndex.AllocationLineShortName, FundingRoute = allocationFeedIndex.AllocationLineFundingRoute, ContractRequired = allocationFeedIndex.AllocationLineContractRequired ? "Y" : "N" }, AllocationVersionNumber = (ushort)allocationFeedIndex.AllocationVersionNumber, AllocationStatus = allocationFeedIndex.AllocationStatus, AllocationAmount = Convert.ToDecimal(allocationFeedIndex.AllocationAmount), ProfilePeriods = JsonConvert.DeserializeObject <IEnumerable <ProfilingPeriod> >(allocationFeedIndex.ProviderProfiling).Select( m => new ProfilePeriod(m.Period, m.Occurrence, m.Year.ToString(), m.Type, m.Value, m.DistributionPeriod)).ToArraySafe() }); } fundingStreamResultSummary.TotalAmount = fundingStreamResultSummary.Allocations.Sum(m => m.AllocationAmount); if (!string.IsNullOrWhiteSpace(feedIndex.PolicySummaries)) { IEnumerable <PublishedProviderResultsPolicySummary> policySummaries = JsonConvert.DeserializeObject <IEnumerable <PublishedProviderResultsPolicySummary> >(feedIndex.PolicySummaries); foreach (PublishedProviderResultsPolicySummary publishedPolicySummaryResult in policySummaries) { PolicyResult policyResult = new PolicyResult { Policy = new Policy { PolicyId = publishedPolicySummaryResult.Policy.Id, PolicyName = publishedPolicySummaryResult.Policy.Name, PolicyDescription = publishedPolicySummaryResult.Policy.Description } }; foreach (PublishedProviderResultsCalculationSummary publishedCalculationSummary in publishedPolicySummaryResult.Calculations) { policyResult.Calculations.Add(new Models.CalculationResult { CalculationName = publishedCalculationSummary.Name, CalculationVersionNumber = (ushort)publishedCalculationSummary.Version, CalculationType = publishedCalculationSummary.CalculationType.ToString(), CalculationAmount = publishedCalculationSummary.Amount }); } if (!publishedPolicySummaryResult.Policies.IsNullOrEmpty()) { foreach (PublishedProviderResultsPolicySummary subPolicy in publishedPolicySummaryResult.Policies) { PolicyResult subPolicyResult = new PolicyResult { Policy = new Policy { PolicyId = subPolicy.Policy.Id, PolicyName = subPolicy.Policy.Name, PolicyDescription = subPolicy.Policy.Description } }; foreach (PublishedProviderResultsCalculationSummary publishedCalculationSummary in subPolicy.Calculations) { subPolicyResult.Calculations.Add(new Models.CalculationResult { CalculationName = publishedCalculationSummary.Name, CalculationVersionNumber = (ushort)publishedCalculationSummary.Version, CalculationType = publishedCalculationSummary.CalculationType.ToString(), CalculationAmount = publishedCalculationSummary.Amount }); } subPolicyResult.TotalAmount = subPolicyResult.Calculations.Where(m => m.CalculationType == "Funding").Sum(m => m.CalculationAmount); policyResult.SubPolicyResults.Add(subPolicyResult); } } policyResult.TotalAmount = policyResult.Calculations.Where(m => m.CalculationType == "Funding").Sum(m => m.CalculationAmount); foreach (PolicyResult subPolicyResult in policyResult.SubPolicyResults) { policyResult.TotalAmount = policyResult.TotalAmount + subPolicyResult.Calculations.Where(m => m.CalculationType == "Funding").Sum(m => m.CalculationAmount); } fundingStreamResultSummary.Policies.Add(policyResult); } } providerResutSummary.TotalAmount += fundingStreamResultSummary.TotalAmount; providerPeriodResultSummary.FundingStreamResults.Add(fundingStreamResultSummary); } providerResutSummary.FundingPeriodResults = providerResutSummary.FundingPeriodResults.Concat(new[] { providerPeriodResultSummary }).ToArraySafe(); } return(providerResutSummary); }
private ProviderResultSummary CreateProviderResultSummary(IEnumerable <AllocationNotificationFeedIndex> entries, HttpRequest request) { IEnumerable <IGrouping <string, AllocationNotificationFeedIndex> > fundingPeriodResultSummaryGroups = entries.GroupBy(m => m.FundingPeriodId); AllocationNotificationFeedIndex firstEntry = entries.First(); ProviderVariation providerVariation = CreateProviderVariationFromAllocationNotificationFeedIndexItem(firstEntry); ProviderResultSummary providerResutSummary = new ProviderResultSummary { Provider = new AllocationProviderModel { Name = firstEntry.ProviderName, LegalName = firstEntry.ProviderLegalName, UkPrn = firstEntry.ProviderUkPrn, Upin = firstEntry.ProviderUpin, Urn = firstEntry.ProviderUrn, DfeEstablishmentNumber = firstEntry.DfeEstablishmentNumber, EstablishmentNumber = firstEntry.EstablishmentNumber, LaCode = firstEntry.LaCode, LocalAuthority = firstEntry.Authority, Type = firstEntry.ProviderType, SubType = firstEntry.SubProviderType, OpenDate = firstEntry.ProviderOpenDate, CloseDate = firstEntry.ProviderClosedDate, CrmAccountId = firstEntry.CrmAccountId, NavVendorNo = firstEntry.NavVendorNo, Status = firstEntry.ProviderStatus, ProviderVariation = providerVariation } }; foreach (IGrouping <string, AllocationNotificationFeedIndex> fundingPeriodResultSummaryGroup in fundingPeriodResultSummaryGroups) { AllocationNotificationFeedIndex firstPeriodEntry = fundingPeriodResultSummaryGroup.First(); ProviderPeriodResultSummary providerPeriodResultSummary = new ProviderPeriodResultSummary { Period = new Period { Id = firstPeriodEntry.FundingPeriodId, Name = firstPeriodEntry.FundingStreamPeriodName, StartYear = firstPeriodEntry.FundingPeriodStartYear, EndYear = firstPeriodEntry.FundingPeriodEndYear } }; IEnumerable <IGrouping <string, AllocationNotificationFeedIndex> > fundingStreamResultSummaryGroups = fundingPeriodResultSummaryGroup.GroupBy(m => m.FundingStreamId); foreach (IGrouping <string, AllocationNotificationFeedIndex> fundingStreamResultSummaryGroup in fundingStreamResultSummaryGroups) { AllocationNotificationFeedIndex feedIndex = fundingStreamResultSummaryGroup.First(); FundingStreamResultSummary fundingStreamResultSummary = new FundingStreamResultSummary { FundingStream = new AllocationFundingStreamModel { Id = feedIndex.FundingStreamId, Name = feedIndex.FundingStreamName, ShortName = feedIndex.FundingStreamShortName, PeriodType = new AllocationFundingStreamPeriodTypeModel { Id = feedIndex.FundingStreamPeriodId, Name = feedIndex.FundingStreamPeriodName, StartDay = feedIndex.FundingStreamStartDay, StartMonth = feedIndex.FundingStreamStartMonth, EndDay = feedIndex.FundingStreamEndDay, EndMonth = feedIndex.FundingStreamEndMonth }, //todo Version = feedIndex.FundingStreamVersionNumber //todo Version = feedIndex.FundingStreamVersion } }; foreach (AllocationNotificationFeedIndex allocationFeedIndex in fundingStreamResultSummaryGroup) { IEnumerable <PublishedProviderResultsPolicySummary> policySummaries = JsonConvert.DeserializeObject <IEnumerable <PublishedProviderResultsPolicySummary> >(feedIndex.PolicySummaries); IList <CalculationResult> calculations = new List <CalculationResult>(); if (!string.IsNullOrWhiteSpace(feedIndex.PolicySummaries)) { foreach (PublishedProviderResultsPolicySummary publishedPolicySummaryResult in policySummaries) { foreach (PublishedProviderResultsCalculationSummary publishedCalculationSummary in publishedPolicySummaryResult.Calculations) { calculations.Add(new Models.CalculationResult { CalculationName = publishedCalculationSummary.Name, CalculationVersionNumber = (ushort)publishedCalculationSummary.Version, CalculationType = publishedCalculationSummary.CalculationType.ToString(), CalculationValue = publishedCalculationSummary.Amount, PolicyId = publishedPolicySummaryResult.Policy.Id, //todo CalculationDisplayName = publishedCalculationSummary.DisplayName, //todo AssociatedWithAllocation = publishedCalculationSummary.AssociatedWithAllocation ? true }); } } } fundingStreamResultSummary.Allocations.Add(new AllocationResult { AllocationLine = new AllocationLine { Id = allocationFeedIndex.AllocationLineId, Name = allocationFeedIndex.AllocationLineName, ShortName = allocationFeedIndex.AllocationLineShortName, FundingRoute = allocationFeedIndex.AllocationLineFundingRoute, ContractRequired = allocationFeedIndex.AllocationLineContractRequired ? "Y" : "N" }, AllocationMajorVersion = feedIndex.MajorVersion ?? 0, AllocationMinorVersion = feedIndex.MinorVersion ?? 0, AllocationStatus = allocationFeedIndex.AllocationStatus, AllocationAmount = Convert.ToDecimal(allocationFeedIndex.AllocationAmount), ProfilePeriods = new Collection <ProfilePeriod>(JsonConvert.DeserializeObject <IEnumerable <ProfilingPeriod> >(allocationFeedIndex.ProviderProfiling) .Select(m => new ProfilePeriod(m.Period, m.Occurrence, m.Year.ToString(), m.Type, m.Value, m.DistributionPeriod)) .ToArraySafe()), Calculations = new Collection <CalculationResult>(calculations) }); } fundingStreamResultSummary.FundingStreamTotalAmount = fundingStreamResultSummary.Allocations.Sum(m => m.AllocationAmount); providerResutSummary.FundingStreamTotalAmount += fundingStreamResultSummary.FundingStreamTotalAmount; providerPeriodResultSummary.FundingStreamResults.Add(fundingStreamResultSummary); } providerResutSummary.FundingPeriodResults = new Collection <ProviderPeriodResultSummary>( providerResutSummary.FundingPeriodResults.Concat(new[] { providerPeriodResultSummary }).ToArraySafe()); } return(providerResutSummary); }