public void Condense() { var learnerOne = new ALBLearner(); var learnerTwo = new ALBLearner(); var learnerThree = new ALBLearner(); var learnerFour = new ALBLearner(); var learnerFive = new ALBLearner(); var learnerSix = new ALBLearner(); var globalOne = new ALBGlobal() { Learners = new List <ALBLearner>() { learnerOne, learnerTwo, }, }; var globalTwo = new ALBGlobal() { Learners = new List <ALBLearner> { learnerThree, learnerFour, }, }; var globalThree = new ALBGlobal() { Learners = new List <ALBLearner> { learnerFive, learnerSix, }, }; var fundingOutputs = new List <ALBGlobal>() { globalOne, globalTwo, globalThree, }; var fundingOutput = NewService().Condense(fundingOutputs); fundingOutput.Should().Be(globalOne); fundingOutput.Learners.Should().HaveCount(6); fundingOutput.Learners.Should().Contain(new[] { learnerOne, learnerTwo, learnerThree, learnerFour, learnerFive, learnerSix }); }
public void BuildTest() { var dependentDataMock = new Mock <IReportServiceDependentData>(); var referenceDataRoot = new ReferenceDataRoot() { Organisations = new List <Organisation>() { new Organisation() { UKPRN = 987654321, Name = "Provider XYZ", OrganisationCoFRemovals = new List <OrganisationCoFRemoval>() { new OrganisationCoFRemoval() { EffectiveFrom = new DateTime(2019, 01, 01), CoFRemoval = (decimal)4500.12 } }, } }, MetaDatas = new MetaData() { ReferenceDataVersions = new ReferenceDataVersion() { OrganisationsVersion = new OrganisationsVersion { Version = "1.1.1.1" }, Employers = new EmployersVersion { Version = "2.2.2.2" }, LarsVersion = new LarsVersion { Version = "3.3.3.3" }, PostcodesVersion = new PostcodesVersion { Version = "4.4.4.4" }, CampusIdentifierVersion = new CampusIdentifierVersion() { Version = "5.5.5.5" }, EasFileDetails = new EasFileDetails { UploadDateTime = new DateTime(2020, 1, 1, 1, 1, 1) } } } }; var easFundingLines = BuildEasFundingLines(); var fm35Learner = new FM35Learner { LearnRefNumber = "Learner1", LearningDeliveries = BuildFm35LearningDeliveries() }; var fm35Global = new FM35Global() { Learners = new List <FM35Learner>() { fm35Learner } }; var albLearner = new ALBLearner() { LearnRefNumber = "Learner1", LearningDeliveries = BuildAlbLearningDeliveries() }; var albGlobal = new ALBGlobal() { Learners = new List <ALBLearner>() { albLearner } }; dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot); dependentDataMock.Setup(d => d.Get <FM35Global>()).Returns(fm35Global); dependentDataMock.Setup(d => d.Get <ALBGlobal>()).Returns(albGlobal); dependentDataMock.Setup(d => d.Get <List <EasFundingLine> >()).Returns(easFundingLines); var submissionDateTime = new DateTime(2020, 1, 1, 1, 1, 1); var ukDateTime = new DateTime(2020, 1, 1, 1, 1, 1); var dateTimeProvider = new Mock <IDateTimeProvider>(); var reportServiceContextMock = new Mock <IReportServiceContext>(); reportServiceContextMock.SetupGet(c => c.Ukprn).Returns(987654321); reportServiceContextMock.SetupGet(c => c.SubmissionDateTimeUtc).Returns(submissionDateTime); reportServiceContextMock.SetupGet(c => c.ServiceReleaseVersion).Returns("11.22.3300.4321"); reportServiceContextMock.SetupGet(c => c.IlrReportingFilename).Returns("ILR-12345678-2021-20201005-151322-01.xml"); reportServiceContextMock.SetupGet(c => c.EasReportingFilename).Returns("EAS-12345678-2021-20201005-151322-01.csv"); dateTimeProvider.Setup(p => p.GetNowUtc()).Returns(submissionDateTime); dateTimeProvider.SetupSequence(p => p.ConvertUtcToUk(It.IsAny <DateTime>())) .Returns(ukDateTime) .Returns(new DateTime(2020, 1, 1, 1, 1, 1)); var result = NewBuilder(dateTimeProvider.Object).Build(reportServiceContextMock.Object, dependentDataMock.Object); result.ProviderName.Should().Be("Provider XYZ"); result.Ukprn.Should().Be("987654321"); result.IlrFile.Should().Be("ILR-12345678-2021-20201005-151322-01.xml"); result.EasFile.Should().Be("EAS-12345678-2021-20201005-151322-01.csv"); result.Year.Should().Be("2020/21"); result.ReportGeneratedAt.Should().Be("Report generated at: 01:01:01 on 01/01/2020"); result.ApplicationVersion.Should().Be("11.22.3300.4321"); result.LarsData.Should().Be("3.3.3.3"); result.OrganisationData.Should().Be("1.1.1.1"); result.PostcodeData.Should().Be("4.4.4.4"); result.CampusIdData.Should().Be("5.5.5.5"); result.AEBProgrammeFunding.MidYearClaims.Should().Be(135.324m); result.AEBProgrammeFunding.YearEndClaims.Should().Be(350.384m); result.AEBProgrammeFunding.FinalClaims.Should().Be(489.3132m); result.AEBLearningSupport.MidYearClaims.Should().Be(44.331m); result.AEBLearningSupport.YearEndClaims.Should().Be(115.096m); result.AEBLearningSupport.FinalClaims.Should().Be(161.3283m); result.AEBProgrammeFunding1924.MidYearClaims.Should().Be(114.324m); result.AEBProgrammeFunding1924.YearEndClaims.Should().Be(295.384m); result.AEBProgrammeFunding1924.FinalClaims.Should().Be(411.3132m); result.AEBLearningSupport1924.MidYearClaims.Should().Be(44.331m); result.AEBLearningSupport1924.YearEndClaims.Should().Be(115.096m); result.AEBLearningSupport1924.FinalClaims.Should().Be(161.3283m); result.ALBBursaryFunding.MidYearClaims.Should().Be(23.331m); result.ALBBursaryFunding.YearEndClaims.Should().Be(60.096m); result.ALBBursaryFunding.FinalClaims.Should().Be(83.3283m); result.ALBAreaCosts.MidYearClaims.Should().Be(67.662m); result.ALBAreaCosts.YearEndClaims.Should().Be(175.192m); result.ALBAreaCosts.FinalClaims.Should().Be(244.6566m); result.ALBExcessSupport.MidYearClaims.Should().Be(21m); result.ALBExcessSupport.YearEndClaims.Should().Be(55m); result.ALBExcessSupport.FinalClaims.Should().Be(78m); }
public async Task <List <FundingSummaryModel> > BuildAsync(IReportServiceContext reportServiceContext, CancellationToken cancellationToken) { FundingSummaryModel fundingSummaryModelAlbFunding = new FundingSummaryModel() { Title = "ILR Advanced Loans Bursary Funding (£)" }; FundingSummaryModel fundingSummaryModelAlbAreaCosts = new FundingSummaryModel() { Title = "ILR Advanced Loans Bursary Area Costs (£)" }; List <FundingSummaryModel> fundingSummaryModels = new List <FundingSummaryModel>() { fundingSummaryModelAlbFunding, fundingSummaryModelAlbAreaCosts }; Task <IMessage> ilrFile = _ilrProviderService.GetIlrFile(reportServiceContext, cancellationToken); Task <List <string> > validLearners = _validLearnersService.GetLearnersAsync(reportServiceContext, cancellationToken); Task <ALBGlobal> albData = _allbProviderService.GetAllbData(reportServiceContext, cancellationToken); await Task.WhenAll(ilrFile, validLearners, albData); List <string> ilrError = new List <string>(); List <string> albLearnerError = new List <string>(); try { ILearner[] learners = ilrFile.Result?.Learners?.Where(x => validLearners.Result.Contains(x.LearnRefNumber)).ToArray(); foreach (ILearner learner in learners ?? Enumerable.Empty <ILearner>()) { ALBLearner albLearner = albData.Result?.Learners?.SingleOrDefault(x => string.Equals(x.LearnRefNumber, learner.LearnRefNumber, StringComparison.OrdinalIgnoreCase)); if (albLearner == null) { albLearnerError.Add(learner.LearnRefNumber); continue; } foreach (ILearningDelivery learningDelivery in learner.LearningDeliveries ?? Enumerable.Empty <ILearningDelivery>()) { LearningDelivery albLearningDeliveryAreaCosts = albLearner.LearningDeliveries?.Where(x => x.LearningDeliveryValue.FundLine == "Advanced Learner Loans Bursary").SingleOrDefault(x => x.AimSeqNumber == learningDelivery.AimSeqNumber); if (learningDelivery.LearningDeliveryFAMs != null && learningDelivery.LearningDeliveryFAMs.Any(x => !(string.Equals(x.LearnDelFAMType, Constants.LearningDeliveryFAMCodeLDM, StringComparison.OrdinalIgnoreCase) && string.Equals(x.LearnDelFAMCode, "359", StringComparison.OrdinalIgnoreCase)))) { TotalAlbFunding(albLearningDeliveryAreaCosts?.LearningDeliveryPeriodisedValues, reportServiceContext.ReturnPeriod, AlbSupportPayment, fundingSummaryModelAlbFunding); } TotalAlbAreaCosts(albLearningDeliveryAreaCosts?.LearningDeliveryPeriodisedValues, reportServiceContext.ReturnPeriod, fundingSummaryModelAlbAreaCosts); } } if (ilrError.Any()) { _logger.LogWarning($"Failed to get one or more ILR learners while {nameof(AllbBuilder)}.{nameof(BuildAsync)}: {_stringUtilitiesService.JoinWithMaxLength(ilrError)}"); } if (albLearnerError.Any()) { _logger.LogWarning($"Failed to get one or more ALB learners while {nameof(AllbBuilder)}.{nameof(BuildAsync)}: {_stringUtilitiesService.JoinWithMaxLength(albLearnerError)}"); } } catch (Exception ex) { _logger.LogError("AlbBuilder BuildAsync failed with Exception: ", ex); } return(fundingSummaryModels); }
private async Task <string> GetCsv(IReportServiceContext reportServiceContext, CancellationToken cancellationToken) { Task <IMessage> ilrFileTask = _ilrProviderService.GetIlrFile(reportServiceContext, cancellationToken); Task <ALBGlobal> albDataTask = _allbProviderService.GetAllbData(reportServiceContext, cancellationToken); Task <List <string> > validLearnersTask = _validLearnersService.GetLearnersAsync(reportServiceContext, cancellationToken); await Task.WhenAll(ilrFileTask, albDataTask, validLearnersTask); if (cancellationToken.IsCancellationRequested) { return(null); } if (validLearnersTask.Result == null) { return(null); } string[] learnAimRefs = ilrFileTask.Result?.Learners?.Where(x => validLearnersTask.Result.Contains(x.LearnRefNumber)) .SelectMany(x => x.LearningDeliveries).Select(x => x.LearnAimRef).Distinct().ToArray(); Dictionary <string, LarsLearningDelivery> larsLearningDeliveries = await _larsProviderService.GetLearningDeliveriesAsync(learnAimRefs, cancellationToken); if (larsLearningDeliveries == null) { return(null); } if (cancellationToken.IsCancellationRequested) { return(null); } List <string> ilrError = new List <string>(); List <string> larsError = new List <string>(); List <string> albLearnerError = new List <string>(); List <AllbOccupancyModel> models = new List <AllbOccupancyModel>(validLearnersTask.Result.Count); foreach (string validLearnerRefNum in validLearnersTask.Result) { var learner = ilrFileTask.Result?.Learners?.SingleOrDefault(x => string.Equals(x.LearnRefNumber, validLearnerRefNum, StringComparison.OrdinalIgnoreCase)); if (learner == null) { ilrError.Add(validLearnerRefNum); continue; } ALBLearner albLearner = albDataTask.Result?.Learners?.SingleOrDefault(x => string.Equals(x.LearnRefNumber, validLearnerRefNum, StringComparison.OrdinalIgnoreCase)); if (albLearner == null) { albLearnerError.Add(validLearnerRefNum); continue; } if (learner.LearningDeliveries == null) { ilrError.Add(validLearnerRefNum); continue; } foreach (ILearningDelivery learningDelivery in learner.LearningDeliveries) { LearningDelivery albLearningDelivery = albLearner?.LearningDeliveries ?.SingleOrDefault(x => x.AimSeqNumber == learningDelivery.AimSeqNumber); if (!ValidAllbLearningDelivery(learningDelivery, albLearningDelivery)) { continue; } if (!larsLearningDeliveries.TryGetValue(learningDelivery.LearnAimRef, out LarsLearningDelivery larsModel)) { larsError.Add(validLearnerRefNum); continue; } LearningDeliveryValue albLearningDeliveryValue = albLearningDelivery?.LearningDeliveryValue; LearningDeliveryPeriodisedValue albSupportPaymentObj = albLearningDelivery?.LearningDeliveryPeriodisedValues?.SingleOrDefault(x => string.Equals(x.AttributeName, AlbSupportPayment, StringComparison.OrdinalIgnoreCase)); LearningDeliveryPeriodisedValue albAreaUpliftOnProgPaymentObj = albLearningDelivery?.LearningDeliveryPeriodisedValues?.SingleOrDefault(x => string.Equals(x.AttributeName, AlbAreaUpliftOnProgPayment, StringComparison.OrdinalIgnoreCase)); LearningDeliveryPeriodisedValue albAreaUpliftBalPaymentObj = albLearningDelivery?.LearningDeliveryPeriodisedValues?.SingleOrDefault(x => string.Equals(x.AttributeName, AlbAreaUpliftBalPayment, StringComparison.OrdinalIgnoreCase)); ILearningDeliveryFAM[] alb = learningDelivery.LearningDeliveryFAMs?.Where(x => string.Equals(x.LearnDelFAMType, "ALB", StringComparison.OrdinalIgnoreCase)).ToArray(); LearningDeliveryPeriodisedValue[] payments = albLearningDelivery?.LearningDeliveryPeriodisedValues?.Where(IsPayment).ToArray(); LearningDeliveryPeriodisedValue albCode = albLearningDelivery?.LearningDeliveryPeriodisedValues?.SingleOrDefault(x => string.Equals(x.AttributeName, AlbCode, StringComparison.OrdinalIgnoreCase)); var ldms = _stringUtilitiesService.GetArrayEntries(learningDelivery.LearningDeliveryFAMs?.Where(x => string.Equals(x.LearnDelFAMType, "LDM", StringComparison.OrdinalIgnoreCase)), 4); string albBursaryFunding = string.Empty, albDateFrom = string.Empty, albDateTo = string.Empty; if (alb != null && alb.Any()) { albBursaryFunding = alb.Max(x => _stringUtilitiesService.TryGetInt(x.LearnDelFAMCode, 0)).ToString(); albDateFrom = _stringUtilitiesService.GetDateTimeAsString(alb.Min(x => x.LearnDelFAMDateFromNullable ?? DateTime.MinValue), string.Empty, DateTime.MinValue); albDateTo = _stringUtilitiesService.GetDateTimeAsString(alb.Max(x => x.LearnDelFAMDateToNullable ?? DateTime.MinValue), string.Empty, DateTime.MinValue); } models.Add(new AllbOccupancyModel { LearnRefNumber = learner.LearnRefNumber, Uln = learner.ULN, DateOfBirth = learner.DateOfBirthNullable?.ToString("dd/MM/yyyy"), PreMergerUkprn = learner.PrevUKPRNNullable, CampId = learner.CampId, ProvSpecLearnMonA = learner.ProviderSpecLearnerMonitorings ?.FirstOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "A", StringComparison.OrdinalIgnoreCase))?.ProvSpecLearnMon, ProvSpecLearnMonB = learner.ProviderSpecLearnerMonitorings ?.FirstOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "B", StringComparison.OrdinalIgnoreCase))?.ProvSpecLearnMon, AimSeqNumber = learningDelivery.AimSeqNumber, LearnAimRef = learningDelivery.LearnAimRef, LearnAimRefTitle = larsModel.LearningAimTitle, SwSupAimId = learningDelivery.SWSupAimId, WeightedRate = albLearningDeliveryValue?.WeightedRate, ApplicProgWeightFact = albLearningDeliveryValue?.ApplicProgWeightFact, NotionalNvqLevelV2 = larsModel.NotionalNvqLevel, SectorSubjectAreaTier2 = larsModel.Tier2SectorSubjectArea, AimType = learningDelivery.AimType, FundingModel = learningDelivery.FundModel, PriorLearnFundAdj = learningDelivery.PriorLearnFundAdjNullable, OtherFundAdj = learningDelivery.OtherFundAdjNullable, OrigLearnStartDate = learningDelivery.OrigLearnStartDateNullable?.ToString("dd/MM/yyyy"), LearnStartDate = learningDelivery.LearnStartDate.ToString("dd/MM/yyyy"), LearnPlanEndDate = learningDelivery.LearnPlanEndDate.ToString("dd/MM/yyyy"), CompStatus = learningDelivery.CompStatus, LearnActEndDate = learningDelivery.LearnActEndDateNullable?.ToString("dd/MM/yyyy"), Outcome = learningDelivery.OutcomeNullable, LearnDelFamCodeAdl = learningDelivery.LearningDeliveryFAMs?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "ADL", StringComparison.OrdinalIgnoreCase))?.LearnDelFAMCode, AlbBursaryFunding = albBursaryFunding, AlbDateFrom = albDateFrom, AlbDateTo = albDateTo, LearnDelMonA = ldms[0], LearnDelMonB = ldms[1], LearnDelMonC = ldms[2], LearnDelMonD = ldms[3], ProvSpecDelMonA = learningDelivery.ProviderSpecDeliveryMonitorings?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "A", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProvSpecDelMonB = learningDelivery.ProviderSpecDeliveryMonitorings?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "B", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProvSpecDelMonC = learningDelivery.ProviderSpecDeliveryMonitorings?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "C", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProvSpecDelMonD = learningDelivery.ProviderSpecDeliveryMonitorings?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "D", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, PartnerUkprn = learningDelivery.PartnerUKPRNNullable, DelLocPostCode = learningDelivery.DelLocPostCode, AreaCodeFactAdj = albLearningDeliveryValue?.AreaCostFactAdj, FundLine = albLearningDeliveryValue?.FundLine, LiabilityDate = albLearningDeliveryValue?.LiabilityDate?.ToString("dd/MM/yyyy"), PlannedNumOnProgInstalm = albLearningDeliveryValue?.PlannedNumOnProgInstalm, ApplicFactDate = albLearningDeliveryValue?.ApplicFactDate?.ToString("dd/MM/yyyy"), Period1AlbCode = albCode?.Period1, Period1AlbPayment = albSupportPaymentObj?.Period1, Period1AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period1 ?? 0, Period1AlbAreaUplift = albAreaUpliftBalPaymentObj?.Period1 ?? 0, Period1AlbTotal = payments?.Sum(x => x.Period1) ?? 0, Period2AlbCode = albCode?.Period2 ?? 0, Period2AlbPayment = albSupportPaymentObj?.Period2 ?? 0, Period2AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period2 ?? 0, Period2AlbBalPayment = albAreaUpliftBalPaymentObj?.Period2 ?? 0, Period2AlbTotal = payments?.Sum(x => x.Period2) ?? 0, Period3AlbCode = albCode?.Period3 ?? 0, Period3AlbPayment = albSupportPaymentObj?.Period3 ?? 0, Period3AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period3 ?? 0, Period3AlbBalPayment = albAreaUpliftBalPaymentObj?.Period3 ?? 0, Period3AlbTotal = payments?.Sum(x => x.Period3) ?? 0, Period4AlbCode = albCode?.Period4 ?? 0, Period4AlbPayment = albSupportPaymentObj?.Period4 ?? 0, Period4AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period4 ?? 0, Period4AlbBalPayment = albAreaUpliftBalPaymentObj?.Period4 ?? 0, Period4AlbTotal = payments?.Sum(x => x.Period4) ?? 0, Period5AlbCode = albCode?.Period5 ?? 0, Period5AlbPayment = albSupportPaymentObj?.Period5 ?? 0, Period5AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period5 ?? 0, Period5AlbBalPayment = albAreaUpliftBalPaymentObj?.Period5 ?? 0, Period5AlbTotal = payments?.Sum(x => x.Period5) ?? 0, Period6AlbCode = albCode?.Period6 ?? 0, Period6AlbPayment = albSupportPaymentObj?.Period6 ?? 0, Period6AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period6 ?? 0, Period6AlbBalPayment = albAreaUpliftBalPaymentObj?.Period6 ?? 0, Period6AlbTotal = payments?.Sum(x => x.Period6) ?? 0, Period7AlbCode = albCode?.Period7 ?? 0, Period7AlbPayment = albSupportPaymentObj?.Period7 ?? 0, Period7AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period7 ?? 0, Period7AlbBalPayment = albAreaUpliftBalPaymentObj?.Period7 ?? 0, Period7AlbTotal = payments?.Sum(x => x.Period7) ?? 0, Period8AlbCode = albCode?.Period8 ?? 0, Period8AlbPayment = albSupportPaymentObj?.Period8 ?? 0, Period8AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period8 ?? 0, Period8AlbBalPayment = albAreaUpliftBalPaymentObj?.Period8 ?? 0, Period8AlbTotal = payments?.Sum(x => x.Period8) ?? 0, Period9AlbCode = albCode?.Period9 ?? 0, Period9AlbPayment = albSupportPaymentObj?.Period9 ?? 0, Period9AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period9 ?? 0, Period9AlbBalPayment = albAreaUpliftBalPaymentObj?.Period9 ?? 0, Period9AlbTotal = payments?.Sum(x => x.Period9) ?? 0, Period10AlbCode = albCode?.Period10 ?? 0, Period10AlbPayment = albSupportPaymentObj?.Period10 ?? 0, Period10AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period10 ?? 0, Period10AlbBalPayment = albAreaUpliftBalPaymentObj?.Period10 ?? 0, Period10AlbTotal = payments?.Sum(x => x.Period10) ?? 0, Period11AlbCode = albCode?.Period11 ?? 0, Period11AlbPayment = albSupportPaymentObj?.Period11 ?? 0, Period11AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period11 ?? 0, Period11AlbBalPayment = albAreaUpliftBalPaymentObj?.Period11 ?? 0, Period11AlbTotal = payments?.Sum(x => x.Period11) ?? 0, Period12AlbCode = albCode?.Period12 ?? 0, Period12AlbPayment = albSupportPaymentObj?.Period12 ?? 0, Period12AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period12 ?? 0, Period12AlbBalPayment = albAreaUpliftBalPaymentObj?.Period12 ?? 0, Period12AlbTotal = payments?.Sum(x => x.Period12) ?? 0, TotalAlbSupportPayment = (albSupportPaymentObj?.Period1 ?? 0) + (albSupportPaymentObj?.Period2 ?? 0) + (albSupportPaymentObj?.Period3 ?? 0) + (albSupportPaymentObj?.Period4 ?? 0) + (albSupportPaymentObj?.Period5 ?? 0) + (albSupportPaymentObj?.Period6 ?? 0) + (albSupportPaymentObj?.Period7 ?? 0) + (albSupportPaymentObj?.Period8 ?? 0) + (albSupportPaymentObj?.Period9 ?? 0) + (albSupportPaymentObj?.Period10 ?? 0) + (albSupportPaymentObj?.Period11 ?? 0) + (albSupportPaymentObj?.Period12 ?? 0), TotalAlbAreaUplift = (albAreaUpliftOnProgPaymentObj?.Period1 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period2 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period3 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period4 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period5 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period6 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period7 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period8 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period9 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period10 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period11 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period12 ?? 0), TotalAlbBalPayment = (albAreaUpliftBalPaymentObj?.Period1 ?? 0) + (albAreaUpliftBalPaymentObj?.Period2 ?? 0) + (albAreaUpliftBalPaymentObj?.Period3 ?? 0) + (albAreaUpliftBalPaymentObj?.Period4 ?? 0) + (albAreaUpliftBalPaymentObj?.Period5 ?? 0) + (albAreaUpliftBalPaymentObj?.Period6 ?? 0) + (albAreaUpliftBalPaymentObj?.Period7 ?? 0) + (albAreaUpliftBalPaymentObj?.Period8 ?? 0) + (albAreaUpliftBalPaymentObj?.Period9 ?? 0) + (albAreaUpliftBalPaymentObj?.Period10 ?? 0) + (albAreaUpliftBalPaymentObj?.Period11 ?? 0) + (albAreaUpliftBalPaymentObj?.Period12 ?? 0), TotalEarnedCash = (albSupportPaymentObj?.Period1 ?? 0) + (albSupportPaymentObj?.Period2 ?? 0) + (albSupportPaymentObj?.Period3 ?? 0) + (albSupportPaymentObj?.Period4 ?? 0) + (albSupportPaymentObj?.Period5 ?? 0) + (albSupportPaymentObj?.Period6 ?? 0) + (albSupportPaymentObj?.Period7 ?? 0) + (albSupportPaymentObj?.Period8 ?? 0) + (albSupportPaymentObj?.Period9 ?? 0) + (albSupportPaymentObj?.Period10 ?? 0) + (albSupportPaymentObj?.Period11 ?? 0) + (albSupportPaymentObj?.Period12 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period1 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period2 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period3 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period4 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period5 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period6 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period7 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period8 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period9 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period10 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period11 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period12 ?? 0) + (albAreaUpliftBalPaymentObj?.Period1 ?? 0) + (albAreaUpliftBalPaymentObj?.Period2 ?? 0) + (albAreaUpliftBalPaymentObj?.Period3 ?? 0) + (albAreaUpliftBalPaymentObj?.Period4 ?? 0) + (albAreaUpliftBalPaymentObj?.Period5 ?? 0) + (albAreaUpliftBalPaymentObj?.Period6 ?? 0) + (albAreaUpliftBalPaymentObj?.Period7 ?? 0) + (albAreaUpliftBalPaymentObj?.Period8 ?? 0) + (albAreaUpliftBalPaymentObj?.Period9 ?? 0) + (albAreaUpliftBalPaymentObj?.Period10 ?? 0) + (albAreaUpliftBalPaymentObj?.Period11 ?? 0) + (albAreaUpliftBalPaymentObj?.Period12 ?? 0) }); } } CheckWarnings(ilrError, larsError, albLearnerError); models.Sort(AllbOccupancyModelComparer); return(WriteResults(models)); }
public async Task <ALBGlobal> GetAllbData(IReportServiceContext reportServiceContext, CancellationToken cancellationToken) { await _getDataLock.WaitAsync(cancellationToken); try { if (_loadedDataAlready) { return(_fundingOutputs); } cancellationToken.ThrowIfCancellationRequested(); _loadedDataAlready = true; int ukPrn = reportServiceContext.Ukprn; _logger.LogWarning($"ReportServiceCollectionName {reportServiceContext.CollectionName};"); if (string.Equals(reportServiceContext.CollectionName, "ILR1819", StringComparison.OrdinalIgnoreCase)) { string albFilename = reportServiceContext.FundingALBOutputKey; _logger.LogWarning($"Reading {albFilename}; Storage is {_storage}; CancellationToken is {cancellationToken}"); using (MemoryStream ms = new MemoryStream()) { await _storage.GetAsync(albFilename, ms, cancellationToken); _fundingOutputs = _jsonSerializationService.Deserialize <ALBGlobal>(ms); } } else { ALBGlobal albGlobal = new ALBGlobal(); using (var ilrContext = _ilrRulebaseContextFactory()) { _logger.LogWarning($"AllbProviderService - Accessing Db;"); var albGlobalDb = await ilrContext.ALB_globals.FirstOrDefaultAsync(x => x.UKPRN == ukPrn, cancellationToken); using (var ilrValidContext = _ilrValidContextFactory()) { ALB_LearningDelivery[] res = await ilrContext.ALB_LearningDeliveries .Where(x => x.UKPRN == ukPrn) .Include(x => x.ALB_LearningDelivery_PeriodisedValues).ToArrayAsync(cancellationToken); IGrouping <string, ALB_LearningDelivery>[] learners = res.GroupBy(x => x.LearnRefNumber).ToArray(); albGlobal.Learners = new System.Collections.Generic.List <ALBLearner>(); foreach (IGrouping <string, ALB_LearningDelivery> albLearningDeliveries in learners) { var learningDeliveryDto = new List <LearningDelivery>(); foreach (var ld in albLearningDeliveries) { var ldPeriodisedValues = ld.ALB_LearningDelivery_PeriodisedValues.Select(ldpv => new LearningDeliveryPeriodisedValue() { AttributeName = ldpv.AttributeName, Period1 = ldpv.Period_1, Period2 = ldpv.Period_2, Period3 = ldpv.Period_3, Period4 = ldpv.Period_4, Period5 = ldpv.Period_5, Period6 = ldpv.Period_6, Period7 = ldpv.Period_7, Period8 = ldpv.Period_8, Period9 = ldpv.Period_9, Period10 = ldpv.Period_10, Period11 = ldpv.Period_11, Period12 = ldpv.Period_12 }).ToList(); learningDeliveryDto.Add(new LearningDelivery() { AimSeqNumber = ld.AimSeqNumber, LearningDeliveryPeriodisedValues = ldPeriodisedValues, LearningDeliveryValue = new LearningDeliveryValue() { FundLine = ld.FundLine // todo: finish the entire LearningDeliveryValue here } }); } ALBLearner learner = new ALBLearner() { LearnRefNumber = albLearningDeliveries.Key, LearningDeliveries = learningDeliveryDto }; albGlobal.Learners.Add(learner); } } if (albGlobalDb != null) { albGlobal.LARSVersion = albGlobalDb.LARSVersion; albGlobal.PostcodeAreaCostVersion = albGlobalDb.PostcodeAreaCostVersion; albGlobal.RulebaseVersion = albGlobalDb.RulebaseVersion; albGlobal.UKPRN = albGlobalDb.UKPRN; } } _fundingOutputs = albGlobal; } } finally { _getDataLock.Release(); } return(_fundingOutputs); }