public void Condense_NullLearners() { var globalOne = new FM35Global() { Learners = null }; var globalTwo = new FM35Global() { Learners = null }; var globalThree = new FM35Global() { Learners = null }; var fundingOutputs = new List <FM35Global>() { globalOne, globalTwo, globalThree, }; var fundingOutput = NewService().Condense(fundingOutputs); fundingOutput.Should().Be(globalOne); fundingOutput.Learners.Should().BeEmpty(); }
private async Task <IList <SummaryOfFm35FundingModel> > GetSummaryOfFm35FundingModels(IReportServiceContext reportServiceContext, CancellationToken cancellationToken) { Task <FM35Global> fm35Task = _fm35ProviderService.GetFM35Data(reportServiceContext, cancellationToken); await Task.WhenAll(fm35Task); cancellationToken.ThrowIfCancellationRequested(); List <SummaryOfFm35FundingModel> summaryOfFm35FundingModels = new List <SummaryOfFm35FundingModel>(); FM35Global fm35Data = fm35Task.Result; if (fm35Data?.Learners == null) { _logger.LogWarning($"No Fm35 data for {nameof(SummaryOfFm35FundingReport)}"); return(summaryOfFm35FundingModels); } foreach (FM35Learner learnerAttribute in fm35Data.Learners) { foreach (LearningDelivery fundLineData in learnerAttribute.LearningDeliveries) { summaryOfFm35FundingModels.AddRange(_summaryOfFm35FundingModelBuilder.BuildModel(fundLineData)); } } summaryOfFm35FundingModels.Sort(comparer); return(summaryOfFm35FundingModels); }
public IEnumerable <FM35_Learner> MapLearners(FM35Global fm35Global) { return(fm35Global.Learners.Select(l => new FM35_Learner { UKPRN = fm35Global.UKPRN, LearnRefNumber = l.LearnRefNumber })); }
public void Condense_EmptyCollection() { var global = new FM35Global { UKPRN = 1, CurFundYr = "1920" }; NewService().Condense(Enumerable.Empty <FM35Global>(), 1, "1920").Should().BeEquivalentTo(global); }
public async Task <string> Process(FundingDto actorModel, CancellationToken cancellationToken) { FM35Global results = RunFunding(actorModel, cancellationToken); actorModel = null; GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true, true); return(BuildFundingOutput(results)); }
public async Task GetFM35DataTest() { string fm35OutputKey = "FundingFm35OutputEmpty.json"; Mock <ILogger> logger = new Mock <ILogger>(); Mock <IStreamableKeyValuePersistenceService> redis = new Mock <IStreamableKeyValuePersistenceService>(); IJsonSerializationService jsonSerializationService = new JsonSerializationService(); IIntUtilitiesService intUtilitiesService = new IntUtilitiesService(); DataStoreConfiguration dataStoreConfiguration = new DataStoreConfiguration() { ILRDataStoreConnectionString = string.Empty, ILRDataStoreValidConnectionString = string.Empty }; IIlr1819ValidContext IlrValidContextFactory() { var options = new DbContextOptionsBuilder <ILR1819_DataStoreEntitiesValid>().UseSqlServer(dataStoreConfiguration.ILRDataStoreValidConnectionString).Options; return(new ILR1819_DataStoreEntitiesValid(options)); } IIlr1819RulebaseContext IlrRulebaseContextFactory() { var options = new DbContextOptionsBuilder <ILR1819_DataStoreEntities>().UseSqlServer(dataStoreConfiguration.ILRDataStoreConnectionString).Options; return(new ILR1819_DataStoreEntities(options)); } Mock <IReportServiceContext> reportServiceContextMock = new Mock <IReportServiceContext>(); reportServiceContextMock.SetupGet(x => x.JobId).Returns(1); reportServiceContextMock.SetupGet(x => x.SubmissionDateTimeUtc).Returns(DateTime.UtcNow); reportServiceContextMock.SetupGet(x => x.Ukprn).Returns(10033670); reportServiceContextMock.SetupGet(x => x.Filename).Returns("ILR-10033670-1819-20180704-120055-03"); reportServiceContextMock.SetupGet(x => x.FundingFM35OutputKey).Returns(fm35OutputKey); reportServiceContextMock.SetupGet(x => x.CollectionName).Returns("ILR1819"); redis.Setup(x => x.ContainsAsync(fm35OutputKey, It.IsAny <CancellationToken>())).ReturnsAsync(true); redis.Setup(x => x.GetAsync(fm35OutputKey, It.IsAny <Stream>(), It.IsAny <CancellationToken>())).Callback <string, Stream, CancellationToken>((st, sr, ct) => File.OpenRead(@"Service\FundingFm35OutputEmpty.json").CopyTo(sr)).Returns(Task.CompletedTask); FM35ProviderService fm35ProviderService = new FM35ProviderService( logger.Object, redis.Object, jsonSerializationService, intUtilitiesService, IlrValidContextFactory, IlrRulebaseContextFactory); FM35Global fm35Data = await fm35ProviderService.GetFM35Data(reportServiceContextMock.Object, CancellationToken.None); fm35Data.Learners.Should().BeNullOrEmpty(); }
public void MapData(IDataStoreCache cache, FM35Global fm35Global) { var learners = fm35Global?.Learners; if (learners == null) { return; } var ukprn = fm35Global.UKPRN; PopulateDataStoreCache(cache, learners, fm35Global, ukprn); }
public void Condense() { var learnerOne = new FM35Learner(); var learnerTwo = new FM35Learner(); var learnerThree = new FM35Learner(); var learnerFour = new FM35Learner(); var learnerFive = new FM35Learner(); var learnerSix = new FM35Learner(); var globalOne = new FM35Global() { Learners = new List <FM35Learner>() { learnerOne, learnerTwo, }, }; var globalTwo = new FM35Global() { Learners = new List <FM35Learner> { learnerThree, learnerFour, }, }; var globalThree = new FM35Global() { Learners = new List <FM35Learner> { learnerFive, learnerSix, }, }; var fundingOutputs = new List <FM35Global>() { 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 FM35Data MapData(FM35Global fm35Global) { var data = new FM35Data(); if (fm35Global.Learners != null) { data.Globals = MapGlobals(fm35Global).ToList(); data.Learners = MapLearners(fm35Global).ToList(); data.LearningDeliveries = MapLearningDeliveries(fm35Global).ToList(); data.LearningDeliveryPeriods = MapLearningDeliveryPeriods(fm35Global).ToList(); data.LearningDeliveryPeriodisedValues = MapLearningDeliveryPeriodisedValues(fm35Global).ToList(); } return(data); }
public IEnumerable <FM35_global> MapGlobals(FM35Global fm35Global) { return(new List <FM35_global>() { new FM35_global { CurFundYr = fm35Global.CurFundYr, LARSVersion = fm35Global.LARSVersion, UKPRN = fm35Global.UKPRN, RulebaseVersion = fm35Global.RulebaseVersion, OrgVersion = fm35Global.OrgVersion, PostcodeDisadvantageVersion = fm35Global.PostcodeDisadvantageVersion } }); }
public List <FM35_global> BuildGlobals(FM35Global fm35Global, int ukprn) { return(new List <FM35_global>() { new FM35_global { CurFundYr = fm35Global.CurFundYr, LARSVersion = fm35Global.LARSVersion, UKPRN = ukprn, RulebaseVersion = fm35Global.RulebaseVersion, OrgVersion = fm35Global.OrgVersion, PostcodeDisadvantageVersion = fm35Global.PostcodeDisadvantageVersion } }); }
public FundingSummaryModel BuildWithFundLine(string title, FM35Global fm35Global, List <string> validLearners, string[] fundLines, string[] attributes, int period) { FundingSummaryModel fundingSummaryModel = new FundingSummaryModel(title); if (fm35Global?.Learners == null || validLearners == null) { return(fundingSummaryModel); } LearningDelivery[] learningDeliveries = _cacheProviderService.Get(fundLines.GetHashCode()); if (learningDeliveries == null) { FM35Learner[] learners = fm35Global.Learners.Where(x => validLearners.Contains(x.LearnRefNumber)).ToArray(); learningDeliveries = learners.SelectMany(x => x.LearningDeliveries).Where(x => fundLines.Contains(x.LearningDeliveryValue.FundLine)).ToArray(); _cacheProviderService.Set(fundLines.GetHashCode(), learningDeliveries); } LearningDeliveryPeriodisedValue[] periodisedValues = learningDeliveries.SelectMany(x => x.LearningDeliveryPeriodisedValues) .Where(x => attributes.Contains(x.AttributeName)).ToArray(); fundingSummaryModel.Period1 = periodisedValues.Sum(x => x.Period1 ?? 0); fundingSummaryModel.Period2 = periodisedValues.Sum(x => x.Period2 ?? 0); fundingSummaryModel.Period3 = periodisedValues.Sum(x => x.Period3 ?? 0); fundingSummaryModel.Period4 = periodisedValues.Sum(x => x.Period4 ?? 0); fundingSummaryModel.Period5 = periodisedValues.Sum(x => x.Period5 ?? 0); fundingSummaryModel.Period6 = periodisedValues.Sum(x => x.Period6 ?? 0); fundingSummaryModel.Period7 = periodisedValues.Sum(x => x.Period7 ?? 0); fundingSummaryModel.Period8 = periodisedValues.Sum(x => x.Period8 ?? 0); fundingSummaryModel.Period9 = periodisedValues.Sum(x => x.Period9 ?? 0); fundingSummaryModel.Period10 = periodisedValues.Sum(x => x.Period10 ?? 0); fundingSummaryModel.Period11 = periodisedValues.Sum(x => x.Period11 ?? 0); fundingSummaryModel.Period12 = periodisedValues.Sum(x => x.Period12 ?? 0); fundingSummaryModel.Period1_8 = fundingSummaryModel.Period1 + fundingSummaryModel.Period2 + fundingSummaryModel.Period3 + fundingSummaryModel.Period4 + fundingSummaryModel.Period5 + fundingSummaryModel.Period6 + fundingSummaryModel.Period7 + fundingSummaryModel.Period8; fundingSummaryModel.Period9_12 = fundingSummaryModel.Period9 + fundingSummaryModel.Period10 + fundingSummaryModel.Period11 + fundingSummaryModel.Period12; fundingSummaryModel.YearToDate = GetYearToDate(fundingSummaryModel, period - 1); fundingSummaryModel.Total = GetYearToDate(fundingSummaryModel, 12); return(fundingSummaryModel); }
public FM35ProviderService( ILogger logger, IStreamableKeyValuePersistenceService storage, IJsonSerializationService jsonSerializationService, IIntUtilitiesService intUtilitiesService, Func <IIlr1819ValidContext> ilrValidContextFactory, Func <IIlr1819RulebaseContext> ilrRulebaseContextFactory) { _logger = logger; _storage = storage; _jsonSerializationService = jsonSerializationService; _intUtilitiesService = intUtilitiesService; _ilrValidContextFactory = ilrValidContextFactory; _ilrRulebaseContextFactory = ilrRulebaseContextFactory; _fundingOutputs = null; _getDataLock = new SemaphoreSlim(1, 1); }
public async Task Execute() { var cancellationToken = CancellationToken.None; var fundingServiceContextMock = new Mock <IFundingServiceContext>(); fundingServiceContextMock.Setup(f => f.JobId).Returns(1); fundingServiceContextMock.Setup(f => f.Container).Returns("Container"); fundingServiceContextMock.Setup(f => f.FundingFm36OutputKey).Returns("Key"); fundingServiceContextMock.Setup(f => f.Ukprn).Returns(12345678); fundingServiceContextMock.Setup(f => f.Year).Returns("1920"); IEnumerable <FundingDto> fundingActorDtos = new List <FundingDto> { new FundingDto() }; var FM35Actor = new Mock <IFM35Actor>(); var condenserOutput = new FM35Global(); var jsonSerializationServiceMock = new Mock <IJsonSerializationService>(); var fundingActorProviderMock = new Mock <IActorProvider <IFM35Actor> >(); var filePersistanceServiceMock = new Mock <IFilePersistanceService>(); var fundingOutputCondenserServiceMock = new Mock <IFundingOutputCondenserService <FM35Global> >(); var loggerMock = new Mock <ILogger>(); FM35Actor.Setup(a => a.Process(fundingActorDtos.FirstOrDefault(), cancellationToken)).Returns(() => Task <string> .Factory.StartNew(() => "string")); jsonSerializationServiceMock.Setup(sm => sm.Deserialize <FM35Global>(It.IsAny <string>())).Returns(new FM35Global()).Verifiable(); fundingActorProviderMock.Setup(pm => pm.Provide()).Returns(FM35Actor.Object).Verifiable(); filePersistanceServiceMock.Setup(sm => sm.PersistAsync(fundingServiceContextMock.Object.FundingFm35OutputKey, fundingServiceContextMock.Object.Container, condenserOutput, cancellationToken)).Returns(Task.CompletedTask).Verifiable(); fundingOutputCondenserServiceMock.Setup(sm => sm.Condense( It.IsAny <IEnumerable <FM35Global> >(), fundingServiceContextMock.Object.Ukprn, fundingServiceContextMock.Object.Year)).Returns(condenserOutput).Verifiable(); await NewTask( jsonSerializationServiceMock.Object, fundingActorProviderMock.Object, filePersistanceServiceMock.Object, fundingOutputCondenserServiceMock.Object, loggerMock.Object, "FM35Actor").Execute(fundingActorDtos, fundingServiceContextMock.Object, cancellationToken); fundingActorProviderMock.VerifyAll(); filePersistanceServiceMock.VerifyAll(); fundingOutputCondenserServiceMock.VerifyAll(); }
public void MapFM35() { var fundLine1 = "FundLine1"; var fundLine2 = "FundLine2"; var attribute1 = "Attribute1"; var attribute2 = "Attribute2"; var global = new FM35Global() { Learners = Enumerable.Range(0, 1000) .Select(i => new FM35Learner() { LearningDeliveries = Enumerable.Range(0, 3) .Select(j => new LearningDelivery() { LearningDeliveryValue = new LearningDeliveryValue() { FundLine = j % 2 == 0 ? fundLine1 : fundLine2 }, LearningDeliveryPeriodisedValues = Enumerable.Range(0, 16) .Select(k => new LearningDeliveryPeriodisedValue() { AttributeName = k % 2 == 0 ? attribute1 : attribute2 }).ToList(), }).ToList(), }).ToList() }; var mapped = NewProvider().BuildFm35Dictionary(global); mapped.Should().HaveCount(2); mapped[fundLine1].Should().HaveCount(2); mapped[fundLine2].Should().HaveCount(2); mapped[fundLine1][attribute1].Should().HaveCount(16000); mapped[fundLine1][attribute2].Should().HaveCount(16000); mapped[fundLine2][attribute1].Should().HaveCount(8000); mapped[fundLine2][attribute2].Should().HaveCount(8000); }
public IEnumerable <FM35_LearningDelivery_Period> MapLearningDeliveryPeriods(FM35Global fm35Global) { var periodisedValues = fm35Global.Learners .SelectMany(l => l.LearningDeliveries.Select(ld => new FundModelLearningDeliveryPeriodisedValue <List <LearningDeliveryPeriodisedValue> >(fm35Global.UKPRN, l.LearnRefNumber, ld.AimSeqNumber.Value, ld.LearningDeliveryPeriodisedValues))); var learningDeliveryPeriods = new List <FM35_LearningDelivery_Period>(); for (var i = 1; i < 13; i++) { learningDeliveryPeriods.AddRange( periodisedValues.Select(pv => new FM35_LearningDelivery_Period { UKPRN = pv.Ukprn, LearnRefNumber = pv.LearnRefNumber, AimSeqNumber = pv.AimSeqNumber, Period = i, AchievePayPct = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.AchievePayPct), i), AchievePayPctTrans = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.AchievePayPctTrans), i), AchievePayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.AchievePayment), i), BalancePayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.BalancePayment), i), BalancePaymentUncapped = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.BalancePaymentUncapped), i), BalancePct = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.BalancePct), i), BalancePctTrans = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.BalancePctTrans), i), EmpOutcomePay = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.EmpOutcomePay), i), EmpOutcomePct = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.EmpOutcomePct), i), EmpOutcomePctTrans = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.EmpOutcomePctTrans), i), InstPerPeriod = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, int?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.InstPerPeriod), i), LearnSuppFund = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, bool?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.LearnSuppFund), i), LearnSuppFundCash = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.LearnSuppFundCash), i), OnProgPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.OnProgPayment), i), OnProgPayPct = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.OnProgPayPct), i), OnProgPayPctTrans = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.OnProgPayPctTrans), i), OnProgPaymentUncapped = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.OnProgPaymentUncapped), i), TransInstPerPeriod = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, int?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM35Constants.TransInstPerPeriod), i) })); } return(learningDeliveryPeriods); }
private static List <FM35LearningDeliveryValues> GetFM35LearningDeliveryPeriodisedValues(FM35Global fm35Global, int ukPrn) { var result = new List <FM35LearningDeliveryValues>(); if (fm35Global?.Learners == null) { return(result); } foreach (var learner in fm35Global.Learners) { if (learner.LearningDeliveries == null) { continue; } foreach (var ld in learner.LearningDeliveries) { if (ld.LearningDeliveryPeriodisedValues == null) { continue; } foreach (var ldpv in ld.LearningDeliveryPeriodisedValues) { result.Add(new FM35LearningDeliveryValues { AimSeqNumber = ld.AimSeqNumber ?? 0, LearnRefNumber = learner.LearnRefNumber, AttributeName = ldpv.AttributeName, Period1 = ldpv.Period1, Period2 = ldpv.Period2, Period3 = ldpv.Period3, Period4 = ldpv.Period4, Period5 = ldpv.Period5, Period6 = ldpv.Period6, Period7 = ldpv.Period7, Period8 = ldpv.Period8, Period9 = ldpv.Period9, Period10 = ldpv.Period10, Period11 = ldpv.Period11, Period12 = ldpv.Period12, UKPRN = ukPrn, FundLine = ld.LearningDeliveryValue?.FundLine }); } } } return(result); }
public IEnumerable <FM35_LearningDelivery_PeriodisedValue> MapLearningDeliveryPeriodisedValues(FM35Global fm35Global) { var periodisedValues = fm35Global.Learners .SelectMany(l => l.LearningDeliveries.Select(ld => new FundModelLearningDeliveryPeriodisedValue <List <LearningDeliveryPeriodisedValue> >(fm35Global.UKPRN, l.LearnRefNumber, ld.AimSeqNumber.Value, ld.LearningDeliveryPeriodisedValues))); return (periodisedValues.SelectMany(pv => pv.LearningDeliveryPeriodisedValue .Select(p => new FM35_LearningDelivery_PeriodisedValue { UKPRN = pv.Ukprn, AimSeqNumber = pv.AimSeqNumber, LearnRefNumber = pv.LearnRefNumber, AttributeName = p.AttributeName, Period_1 = p.Period1, Period_2 = p.Period2, Period_3 = p.Period3, Period_4 = p.Period4, Period_5 = p.Period5, Period_6 = p.Period6, Period_7 = p.Period7, Period_8 = p.Period8, Period_9 = p.Period9, Period_10 = p.Period10, Period_11 = p.Period11, Period_12 = p.Period12 }))); }
public AdultFundingClaimModel BuildAdultFundingClaimModel( ILogger logger, IReportServiceContext reportServiceContext, FM35Global fm35Global, List <EasSubmissionValues> easSubmissionValues, ALBGlobal albGlobal, string providerName, ILRSourceFileInfo ilrSourceFileInfo, IDateTimeProvider dateTimeProvider, IIntUtilitiesService intUtilitiesService, IMessage message, IVersionInfo versionInfo, string orgData, string largeEmployersData, string postcodeData, string larsData) { var adultFundingClaimModel = new AdultFundingClaimModel(); try { var ilrfileName = reportServiceContext.OriginalFilename ?? reportServiceContext.Filename; // FM35 decimal otherLearningProgramFunding6MonthsFm35 = 0; decimal otherLearningProgramFunding12MonthsFm35 = 0; decimal otherLearningSupport6MonthsFm35 = 0; decimal otherLearningSupport12MonthsFm35 = 0; decimal traineeShips1924ProgrammeFunding6MonthsFm35 = 0; decimal traineeShips1924ProgrammeFunding12MonthsFm35 = 0; decimal traineeShips1924LearningSupport6MonthsFm35 = 0; decimal traineeShips1924LearningSupport12MonthsFm35 = 0; // EAS decimal otherLearningProgramFunding6MonthsEas = 0; decimal otherLearningProgramFunding12MonthsEas = 0; decimal otherLearningSupport6MonthsEas = 0; decimal otherLearningSupport12MonthsEas = 0; decimal traineeShips1924ProgrammeFunding6MonthsEas = 0; decimal traineeShips1924ProgrammeFunding12MonthsEas = 0; decimal traineeShips1924LearningSupport6MonthsEas = 0; decimal traineeShips1924LearningSupport12MonthsEas = 0; decimal traineeShips1924LearnerSupport6MonthsEas = 0; decimal traineeShips1924LearnerSupport12MonthsEas = 0; decimal loansAreasCosts6MonthsEas = 0; decimal loansAreasCosts12MonthsEas = 0; decimal loansExcessSupport6MonthsEas = 0; decimal loansExcessSupport12MonthsEas = 0; // ALB decimal loansBursaryFunding6Months = 0; decimal loansBursaryFunding12Months = 0; decimal loansAreaCosts6Months = 0; decimal loansAreaCosts12Months = 0; var ukPrn = reportServiceContext.Ukprn; // FM35 var fm35LearningDeliveryPeriodisedValues = GetFM35LearningDeliveryPeriodisedValues(fm35Global, ukPrn); otherLearningProgramFunding6MonthsFm35 = Fm35DeliveryValues6Months(fm35LearningDeliveryPeriodisedValues, new[] { "OnProgPayment", "BalancePayment", "AchievePayment", "EmpOutcomePay" }, new[] { "AEB - Other Learning", "AEB - Other Learning (non-procured)" }); otherLearningProgramFunding12MonthsFm35 = Fm35DeliveryValues12Months(fm35LearningDeliveryPeriodisedValues, new[] { "OnProgPayment", "BalancePayment", "AchievePayment", "EmpOutcomePay" }, new[] { "AEB - Other Learning", "AEB - Other Learning (non-procured)" }); otherLearningSupport6MonthsFm35 = Fm35DeliveryValues6Months(fm35LearningDeliveryPeriodisedValues, new[] { "LearnSuppFundCash" }, new[] { "AEB - Other Learning", "AEB - Other Learning (non-procured)" }); otherLearningSupport12MonthsFm35 = Fm35DeliveryValues12Months(fm35LearningDeliveryPeriodisedValues, new[] { "LearnSuppFundCash" }, new[] { "AEB - Other Learning", "AEB - Other Learning (non-procured)" }); traineeShips1924ProgrammeFunding6MonthsFm35 = Fm35DeliveryValues6Months(fm35LearningDeliveryPeriodisedValues, new[] { "OnProgPayment", "BalancePayment", "AchievePayment", "EmpOutcomePay" }, new[] { "19-24 Traineeship’", "19-24 Traineeship (non-procured)" }); traineeShips1924ProgrammeFunding12MonthsFm35 = Fm35DeliveryValues12Months(fm35LearningDeliveryPeriodisedValues, new[] { "OnProgPayment", "BalancePayment", "AchievePayment", "EmpOutcomePay" }, new[] { "19-24 Traineeship’", "19-24 Traineeship (non-procured)" }); traineeShips1924LearningSupport6MonthsFm35 = Fm35DeliveryValues6Months(fm35LearningDeliveryPeriodisedValues, new[] { "LearnSuppFundCash" }, new[] { "19-24 Traineeship’", "19-24 Traineeship (non-procured)" }); traineeShips1924LearningSupport12MonthsFm35 = Fm35DeliveryValues12Months(fm35LearningDeliveryPeriodisedValues, new[] { "LearnSuppFundCash" }, new[] { "19-24 Traineeship’", "19-24 Traineeship (non-procured)" }); // ALB var albLearningDeliveryPeriodisedValues = GetAlbLearningDeliveryPeriodisedValues(albGlobal, ukPrn); loansBursaryFunding6Months = AlbDeliveryValues6Months(albLearningDeliveryPeriodisedValues, new[] { "ALBSupportPayment" }, new[] { "Advanced Learner Loans Bursary" }); loansBursaryFunding12Months = AlbDeliveryValues12Months(albLearningDeliveryPeriodisedValues, new[] { "ALBSupportPayment" }, new[] { "Advanced Learner Loans Bursary" }); loansAreaCosts6Months = AlbDeliveryValues6Months(albLearningDeliveryPeriodisedValues, new[] { "AreaUpliftBalPayment", "AreaUpliftOnProgPayment" }, new[] { "Advanced Learner Loans Bursary" }); loansAreaCosts12Months = AlbDeliveryValues12Months(albLearningDeliveryPeriodisedValues, new[] { "AreaUpliftBalPayment", "AreaUpliftOnProgPayment" }, new[] { "Advanced Learner Loans Bursary" }); // EAS otherLearningProgramFunding6MonthsEas = easSubmissionValues.Where(x => new[] { "Authorised Claims: AEB-Other Learning", "Princes Trust: AEB-Other Learning" }.Contains(x.PaymentTypeName) && First6MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); otherLearningProgramFunding12MonthsEas = easSubmissionValues.Where(x => new[] { "Authorised Claims: AEB-Other Learning", "Princes Trust: AEB-Other Learning" }.Contains(x.PaymentTypeName) && First12MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); otherLearningSupport6MonthsEas = easSubmissionValues.Where(x => new[] { "Excess Learning Support: AEB-Other Learning" }.Contains(x.PaymentTypeName) && First6MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); otherLearningSupport12MonthsEas = easSubmissionValues.Where(x => new[] { "Excess Learning Support: AEB-Other Learning" }.Contains(x.PaymentTypeName) && First12MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); traineeShips1924ProgrammeFunding6MonthsEas = easSubmissionValues.Where(x => new[] { "Authorised Claims: 19-24 Traineeships" }.Contains(x.PaymentTypeName) && First6MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); traineeShips1924ProgrammeFunding12MonthsEas = easSubmissionValues.Where(x => new[] { "Authorised Claims: 19-24 Traineeships" }.Contains(x.PaymentTypeName) && First12MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); traineeShips1924LearningSupport6MonthsEas = easSubmissionValues.Where(x => new[] { "Excess Learning Support: 19-24 Traineeships" }.Contains(x.PaymentTypeName) && First6MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); traineeShips1924LearningSupport12MonthsEas = easSubmissionValues.Where(x => new[] { "Excess Learning Support: 19-24 Traineeships" }.Contains(x.PaymentTypeName) && First12MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); traineeShips1924LearnerSupport6MonthsEas = easSubmissionValues.Where(x => new[] { "Learner Support: 19-24 Traineeships" }.Contains(x.PaymentTypeName) && First6MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); traineeShips1924LearnerSupport12MonthsEas = easSubmissionValues.Where(x => new[] { "Learner Support: 19-24 Traineeships" }.Contains(x.PaymentTypeName) && First12MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); loansAreasCosts6MonthsEas = easSubmissionValues.Where(x => new[] { "Authorised Claims: Advanced Learner Loans Bursary" }.Contains(x.PaymentTypeName) && First6MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); loansAreasCosts12MonthsEas = easSubmissionValues.Where(x => new[] { "Authorised Claims: Advanced Learner Loans Bursary" }.Contains(x.PaymentTypeName) && First12MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); loansExcessSupport6MonthsEas = easSubmissionValues.Where(x => new[] { "Excess Support: Advanced Learner Loans Bursary" }.Contains(x.PaymentTypeName) && First6MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); loansExcessSupport12MonthsEas = easSubmissionValues.Where(x => new[] { "Excess Support: Advanced Learner Loans Bursary" }.Contains(x.PaymentTypeName) && First12MonthsArray.Contains(x.CollectionPeriod)).Sum(y => y.PaymentValue); adultFundingClaimModel.OtherLearningProgrammeFunding6Months = otherLearningProgramFunding6MonthsFm35 + otherLearningProgramFunding6MonthsEas; adultFundingClaimModel.OtherLearningProgrammeFunding12Months = otherLearningProgramFunding12MonthsFm35 + otherLearningProgramFunding12MonthsEas; adultFundingClaimModel.OtherLearningLearningSupport6Months = otherLearningSupport6MonthsFm35 + otherLearningSupport6MonthsEas; adultFundingClaimModel.OtherLearningLearningSupport12Months = otherLearningSupport12MonthsFm35 + otherLearningSupport12MonthsEas; adultFundingClaimModel.Traineeships1924ProgrammeFunding6Months = traineeShips1924ProgrammeFunding6MonthsFm35 + traineeShips1924ProgrammeFunding6MonthsEas; adultFundingClaimModel.Traineeships1924ProgrammeFunding12Months = traineeShips1924ProgrammeFunding12MonthsFm35 + traineeShips1924ProgrammeFunding12MonthsEas; adultFundingClaimModel.Traineeships1924LearningSupport6Months = traineeShips1924LearningSupport6MonthsFm35 + traineeShips1924LearningSupport6MonthsEas; adultFundingClaimModel.Traineeships1924LearningSupport12Months = traineeShips1924LearningSupport12MonthsFm35 + traineeShips1924LearningSupport12MonthsEas; adultFundingClaimModel.Traineeships1924LearnerSupport6Months = traineeShips1924LearnerSupport6MonthsEas; adultFundingClaimModel.Traineeships1924LearnerSupport12Months = traineeShips1924LearnerSupport12MonthsEas; adultFundingClaimModel.LoansBursaryFunding6Months = loansBursaryFunding6Months; adultFundingClaimModel.LoansBursaryFunding12Months = loansBursaryFunding12Months; adultFundingClaimModel.LoansAreaCosts6Months = loansAreaCosts6Months + loansAreasCosts6MonthsEas; adultFundingClaimModel.LoansAreaCosts12Months = loansAreaCosts12Months + loansAreasCosts12MonthsEas; adultFundingClaimModel.LoansExcessSupport6Months = loansExcessSupport6MonthsEas; adultFundingClaimModel.LoansExcessSupport12Months = loansExcessSupport12MonthsEas; adultFundingClaimModel.ProviderName = providerName ?? "Unknown"; adultFundingClaimModel.Ukprn = ukPrn; adultFundingClaimModel.ReportGeneratedAt = "Report generated at: " + dateTimeProvider.GetNowUtc().ToString("hh:mm:ss tt") + " on " + dateTimeProvider.GetNowUtc().ToString("dd/MM/yyyy"); if (message == null) // NON - ILR Submission. { if (ilrSourceFileInfo.Filename == null) { adultFundingClaimModel.IlrFile = "NA"; adultFundingClaimModel.FilePreparationDate = "NA"; } else { adultFundingClaimModel.IlrFile = ilrSourceFileInfo.Filename; adultFundingClaimModel.FilePreparationDate = ilrSourceFileInfo.FilePreparationDate.GetValueOrDefault().ToString("dd/MM/yyyy"); } } else { adultFundingClaimModel.IlrFile = ilrfileName; adultFundingClaimModel.FilePreparationDate = message.HeaderEntity.CollectionDetailsEntity.FilePreparationDate.ToString("dd/MM/yyyy"); } adultFundingClaimModel.ApplicationVersion = versionInfo.ServiceReleaseVersion; adultFundingClaimModel.ComponentSetVersion = "NA"; adultFundingClaimModel.LargeEmployerData = largeEmployersData; adultFundingClaimModel.OrganisationData = orgData; adultFundingClaimModel.PostcodeData = postcodeData; adultFundingClaimModel.LarsData = larsData; } catch (Exception ex) { logger.LogError($"Failed building Adult funding claim report, ex: {ex}"); throw; } return(adultFundingClaimModel); }
public void MapFM35Data(IDataStoreCache cache, FM35Global fm35Global) => _fm35Mapper.MapData(cache, fm35Global);
public Dictionary <string, Dictionary <string, decimal?[][]> > BuildFm35Dictionary(FM35Global fm35Global) { return(fm35Global? .Learners? .SelectMany(l => l.LearningDeliveries) .GroupBy(ld => ld.LearningDeliveryValue.FundLine, StringComparer.OrdinalIgnoreCase) .ToDictionary(k => k.Key, v => v.SelectMany(ld => ld.LearningDeliveryPeriodisedValues) .GroupBy(ldpv => ldpv.AttributeName, StringComparer.OrdinalIgnoreCase) .ToDictionary(k => k.Key, value => value.Select(pvGroup => new decimal?[] { pvGroup.Period1, pvGroup.Period2, pvGroup.Period3, pvGroup.Period4, pvGroup.Period5, pvGroup.Period6, pvGroup.Period7, pvGroup.Period8, pvGroup.Period9, pvGroup.Period10, pvGroup.Period11, pvGroup.Period12, }).ToArray(), StringComparer.OrdinalIgnoreCase), StringComparer.OrdinalIgnoreCase) ?? new Dictionary <string, Dictionary <string, decimal?[][]> >()); }
public FM35Data MapFM35Data(FM35Global fm35Global) => _fm35Mapper.MapData(fm35Global);
protected IDictionary <string, Dictionary <int, LearningDelivery> > BuildFm35LearningDeliveryDictionary(FM35Global fm35Global) { return(fm35Global? .Learners? .ToDictionary( l => l.LearnRefNumber, l => l.LearningDeliveries .Where(ld => ld.AimSeqNumber.HasValue) .ToDictionary( ld => ld.AimSeqNumber.Value, ld => ld), StringComparer.OrdinalIgnoreCase) ?? new Dictionary <string, Dictionary <int, LearningDelivery> >()); }
public IEnumerable <FM35_LearningDelivery> MapLearningDeliveries(FM35Global fm35Global) { return(fm35Global.Learners .SelectMany(l => l.LearningDeliveries.Select(ld => new FM35_LearningDelivery { UKPRN = fm35Global.UKPRN, LearnRefNumber = l.LearnRefNumber, AimSeqNumber = ld.AimSeqNumber.Value, AchApplicDate = ld.LearningDeliveryValue.AchApplicDate, Achieved = ld.LearningDeliveryValue.Achieved, AchieveElement = ld.LearningDeliveryValue.AchieveElement, AchievePayElig = ld.LearningDeliveryValue.AchievePayElig, AchievePayPctPreTrans = ld.LearningDeliveryValue.AchievePayPctPreTrans, AchPayTransHeldBack = ld.LearningDeliveryValue.AchPayTransHeldBack, ActualDaysIL = ld.LearningDeliveryValue.ActualDaysIL, ActualNumInstalm = ld.LearningDeliveryValue.ActualNumInstalm, ActualNumInstalmPreTrans = ld.LearningDeliveryValue.ActualNumInstalmPreTrans, ActualNumInstalmTrans = ld.LearningDeliveryValue.ActualNumInstalmTrans, AdjLearnStartDate = ld.LearningDeliveryValue.AdjLearnStartDate, AdltLearnResp = ld.LearningDeliveryValue.AdltLearnResp, AgeAimStart = ld.LearningDeliveryValue.AgeAimStart, AimValue = ld.LearningDeliveryValue.AimValue, AppAdjLearnStartDate = ld.LearningDeliveryValue.AppAdjLearnStartDate, AppAgeFact = ld.LearningDeliveryValue.AppAgeFact, AppATAGTA = ld.LearningDeliveryValue.AppATAGTA, AppCompetency = ld.LearningDeliveryValue.AppCompetency, AppFuncSkill = ld.LearningDeliveryValue.AppFuncSkill, AppFuncSkill1618AdjFact = ld.LearningDeliveryValue.AppFuncSkill1618AdjFact, AppKnowl = ld.LearningDeliveryValue.AppKnowl, AppLearnStartDate = ld.LearningDeliveryValue.AppLearnStartDate, ApplicEmpFactDate = ld.LearningDeliveryValue.ApplicEmpFactDate, ApplicFactDate = ld.LearningDeliveryValue.ApplicFactDate, ApplicFundRateDate = ld.LearningDeliveryValue.ApplicFundRateDate, ApplicProgWeightFact = ld.LearningDeliveryValue.ApplicProgWeightFact, ApplicUnweightFundRate = ld.LearningDeliveryValue.ApplicUnweightFundRate, ApplicWeightFundRate = ld.LearningDeliveryValue.ApplicWeightFundRate, AppNonFund = ld.LearningDeliveryValue.AppNonFund, AreaCostFactAdj = ld.LearningDeliveryValue.AreaCostFactAdj, BalInstalmPreTrans = ld.LearningDeliveryValue.BalInstalmPreTrans, BaseValueUnweight = ld.LearningDeliveryValue.BaseValueUnweight, CapFactor = ld.LearningDeliveryValue.CapFactor, DisUpFactAdj = ld.LearningDeliveryValue.DisUpFactAdj, EmpOutcomePayElig = ld.LearningDeliveryValue.EmpOutcomePayElig, EmpOutcomePctHeldBackTrans = ld.LearningDeliveryValue.EmpOutcomePctHeldBackTrans, EmpOutcomePctPreTrans = ld.LearningDeliveryValue.EmpOutcomePctPreTrans, EmpRespOth = ld.LearningDeliveryValue.EmpRespOth, ESOL = ld.LearningDeliveryValue.ESOL, FullyFund = ld.LearningDeliveryValue.FullyFund, FundLine = ld.LearningDeliveryValue.FundLine, FundStart = ld.LearningDeliveryValue.FundStart, LargeEmployerID = ld.LearningDeliveryValue.LargeEmployerID, LargeEmployerFM35Fctr = ld.LearningDeliveryValue.LargeEmployerFM35Fctr, LargeEmployerStatusDate = ld.LearningDeliveryValue.LargeEmployerStatusDate, LTRCUpliftFctr = ld.LearningDeliveryValue.LTRCUpliftFctr, NonGovCont = ld.LearningDeliveryValue.NonGovCont, OLASSCustody = ld.LearningDeliveryValue.OLASSCustody, OnProgPayPctPreTrans = ld.LearningDeliveryValue.OnProgPayPctPreTrans, OutstndNumOnProgInstalm = ld.LearningDeliveryValue.OutstndNumOnProgInstalm, OutstndNumOnProgInstalmTrans = ld.LearningDeliveryValue.OutstndNumOnProgInstalmTrans, PlannedNumOnProgInstalm = ld.LearningDeliveryValue.PlannedNumOnProgInstalm, PlannedNumOnProgInstalmTrans = ld.LearningDeliveryValue.PlannedNumOnProgInstalmTrans, PlannedTotalDaysIL = ld.LearningDeliveryValue.PlannedTotalDaysIL, PlannedTotalDaysILPreTrans = ld.LearningDeliveryValue.PlannedTotalDaysILPreTrans, PropFundRemain = ld.LearningDeliveryValue.PropFundRemain, PropFundRemainAch = ld.LearningDeliveryValue.PropFundRemainAch, PrscHEAim = ld.LearningDeliveryValue.PrscHEAim, Residential = ld.LearningDeliveryValue.Residential, Restart = ld.LearningDeliveryValue.Restart, SpecResUplift = ld.LearningDeliveryValue.SpecResUplift, StartPropTrans = ld.LearningDeliveryValue.StartPropTrans, ThresholdDays = ld.LearningDeliveryValue.ThresholdDays, Traineeship = ld.LearningDeliveryValue.Traineeship, Trans = ld.LearningDeliveryValue.Trans, TrnAdjLearnStartDate = ld.LearningDeliveryValue.TrnAdjLearnStartDate, TrnWorkPlaceAim = ld.LearningDeliveryValue.TrnWorkPlaceAim, TrnWorkPrepAim = ld.LearningDeliveryValue.TrnWorkPrepAim, UnWeightedRateFromESOL = ld.LearningDeliveryValue.UnWeightedRateFromESOL, UnweightedRateFromLARS = ld.LearningDeliveryValue.UnweightedRateFromLARS, WeightedRateFromESOL = ld.LearningDeliveryValue.WeightedRateFromESOL, WeightedRateFromLARS = ld.LearningDeliveryValue.WeightedRateFromLARS }))); }
public async Task <FM35Global> GetFM35Data( IReportServiceContext reportServiceContext, CancellationToken cancellationToken) { await _getDataLock.WaitAsync(cancellationToken); try { if (_loadedDataAlready) { return(_fundingOutputs); } cancellationToken.ThrowIfCancellationRequested(); _loadedDataAlready = true; int ukPrn = reportServiceContext.Ukprn; if (string.Equals(reportServiceContext.CollectionName, "ILR1819", StringComparison.OrdinalIgnoreCase)) { string fm35Filename = reportServiceContext.FundingFM35OutputKey; _logger.LogWarning($"Reading {fm35Filename}; Storage is {_storage}; CancellationToken is {cancellationToken}"); if (await _storage.ContainsAsync(fm35Filename, cancellationToken)) { _logger.LogWarning($"Available {fm35Filename}"); using (MemoryStream ms = new MemoryStream()) { await _storage.GetAsync(fm35Filename, ms, cancellationToken); _logger.LogWarning($"Deserialising {fm35Filename} with {ms.Length}"); _fundingOutputs = _jsonSerializationService.Deserialize <FM35Global>(ms); } } _logger.LogWarning($"Finished {fm35Filename}"); } else { FM35Global fm35Global = new FM35Global(); using (var ilrContext = _ilrRulebaseContextFactory()) { var fm35GlobalDb = await ilrContext.FM35_globals.FirstOrDefaultAsync(x => x.UKPRN == ukPrn, cancellationToken); FM35_LearningDelivery[] res = await ilrContext.FM35_LearningDeliveries.Where(x => x.UKPRN == ukPrn) .Include(x => x.FM35_LearningDelivery_PeriodisedValues).ToArrayAsync(cancellationToken); IGrouping <string, FM35_LearningDelivery>[] learners = res.GroupBy(x => x.LearnRefNumber).ToArray(); fm35Global.Learners = new List <FM35Learner>(); foreach (IGrouping <string, FM35_LearningDelivery> fm35LearningDeliveries in learners) { var learningDeliveryDto = new List <LearningDelivery>(); foreach (var ld in fm35LearningDeliveries) { var ldPeriodisedValues = ld.FM35_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, AchApplicDate = ld.AchApplicDate // todo: finish the entire LearningDeliveryValue here } }); } FM35Learner learner = new FM35Learner() { LearnRefNumber = fm35LearningDeliveries.Key, LearningDeliveries = learningDeliveryDto }; fm35Global.Learners.Add(learner); } if (fm35GlobalDb != null) { fm35Global.LARSVersion = fm35GlobalDb.LARSVersion; fm35Global.OrgVersion = fm35GlobalDb.OrgVersion; fm35Global.PostcodeDisadvantageVersion = fm35GlobalDb.PostcodeDisadvantageVersion; fm35Global.RulebaseVersion = fm35GlobalDb.RulebaseVersion; fm35Global.UKPRN = fm35GlobalDb.UKPRN; } } _fundingOutputs = fm35Global; } } finally { _getDataLock.Release(); } return(_fundingOutputs); }
public void GetFM35LearningDeliveryPeriodisedValues() { var learner1 = new FM35Learner { LearnRefNumber = "Learner1", LearningDeliveries = new List <LearningDelivery> { new LearningDelivery { AimSeqNumber = 1, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1618 }, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash), } }, new LearningDelivery { AimSeqNumber = 2, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1923 }, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment), } }, } }; var learner2 = new FM35Learner { LearnRefNumber = "Learner2", LearningDeliveries = new List <LearningDelivery> { new LearningDelivery { AimSeqNumber = 1, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1618 }, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash), } }, new LearningDelivery { AimSeqNumber = 2, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1923 }, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment), } }, } }; var global = new FM35Global { Learners = new List <FM35Learner> { learner1, learner2 } }; var expectedModel = new List <FM35LearningDeliveryValues> { BuildFM35PeriodisedValuesForAttribute(1, "Learner1", 1, FundLineConstants.Apprenticeship1618, AttributeConstants.Fm35BalancePayment), BuildFM35PeriodisedValuesForAttribute(1, "Learner1", 1, FundLineConstants.Apprenticeship1618, AttributeConstants.Fm35LearnSuppFundCash), BuildFM35PeriodisedValuesForAttribute(1, "Learner1", 2, FundLineConstants.Apprenticeship1923, AttributeConstants.Fm35EmpOutcomePay), BuildFM35PeriodisedValuesForAttribute(1, "Learner1", 2, FundLineConstants.Apprenticeship1923, AttributeConstants.Fm35OnProgPayment), BuildFM35PeriodisedValuesForAttribute(1, "Learner2", 1, FundLineConstants.Apprenticeship1618, AttributeConstants.Fm35BalancePayment), BuildFM35PeriodisedValuesForAttribute(1, "Learner2", 1, FundLineConstants.Apprenticeship1618, AttributeConstants.Fm35LearnSuppFundCash), BuildFM35PeriodisedValuesForAttribute(1, "Learner2", 2, FundLineConstants.Apprenticeship1923, AttributeConstants.Fm35EmpOutcomePay), BuildFM35PeriodisedValuesForAttribute(1, "Learner2", 2, FundLineConstants.Apprenticeship1923, AttributeConstants.Fm35OnProgPayment), }; NewBuilder().GetFM35LearningDeliveryPeriodisedValues(global, 1).Should().BeEquivalentTo(expectedModel); }
public async Task GenerateReport(IReportServiceContext reportServiceContext, ZipArchive archive, bool isFis, CancellationToken cancellationToken) { Task <IMessage> ilrFileTask = _ilrProviderService.GetIlrFile(reportServiceContext, cancellationToken); Task <FM25Global> fm25Task = _fm25ProviderService.GetFM25Data(reportServiceContext, cancellationToken); Task <FM35Global> fm35Task = _fm35ProviderService.GetFM35Data(reportServiceContext, cancellationToken); Task <List <string> > validLearnersTask = _validLearnersService.GetLearnersAsync(reportServiceContext, cancellationToken); await Task.WhenAll(ilrFileTask, fm25Task, fm35Task, validLearnersTask); if (cancellationToken.IsCancellationRequested) { return; } List <ILearner> learners = ilrFileTask.Result?.Learners?.Where(x => validLearnersTask.Result.Contains(x.LearnRefNumber)).ToList(); if (learners == null) { _logger.LogWarning("Failed to get learners for Main Occupancy Report"); return; } string[] learnAimRefs = learners.SelectMany(x => x.LearningDeliveries).Select(x => x.LearnAimRef).Distinct().ToArray(); Task <Dictionary <string, LarsLearningDelivery> > larsLearningDeliveriesTask = _larsProviderService.GetLearningDeliveriesAsync(learnAimRefs, cancellationToken); Task <List <LearnerAndDeliveries> > larsFrameworkAimsTask = _larsProviderService.GetFrameworkAimsAsync(learnAimRefs, learners, cancellationToken); await Task.WhenAll(larsLearningDeliveriesTask, larsFrameworkAimsTask); if (larsLearningDeliveriesTask.Result == null || larsFrameworkAimsTask.Result == null) { _logger.LogWarning("Failed to get LARS data for Main Occupancy Report"); return; } if (cancellationToken.IsCancellationRequested) { return; } List <string> larsErrors = new List <string>(); List <MainOccupancyModel> mainOccupancyModels = new List <MainOccupancyModel>(); foreach (var learner in learners) { if (learner.LearningDeliveries == null) { continue; } FM25Global fm25Data = fm25Task.Result; FM35Global fm35Data = fm35Task.Result; foreach (ILearningDelivery learningDelivery in learner.LearningDeliveries) { if (!CheckIsApplicableLearner(learningDelivery)) { continue; } if (!larsLearningDeliveriesTask.Result.TryGetValue(learningDelivery.LearnAimRef, out LarsLearningDelivery larsModel)) { larsErrors.Add(learningDelivery.LearnAimRef); continue; } LearningDelivery frameworkAim = larsFrameworkAimsTask.Result?.SingleOrDefault(x => string.Equals(x.LearnerLearnRefNumber, learner.LearnRefNumber, StringComparison.OrdinalIgnoreCase)) ?.LearningDeliveries?.SingleOrDefault(x => string.Equals(x.LearningDeliveryLearnAimRef, learningDelivery.LearnAimRef, StringComparison.OrdinalIgnoreCase) && x.LearningDeliveryAimSeqNumber == learningDelivery.AimSeqNumber); if (frameworkAim == null) { larsErrors.Add(learningDelivery.LearnAimRef); continue; } if (learningDelivery.FundModel == 35) { ILR.FundingService.FM35.FundingOutput.Model.Output.LearningDelivery learnerFm35Data = fm35Data ?.Learners?.SingleOrDefault(l => string.Equals(l.LearnRefNumber, learner.LearnRefNumber, StringComparison.OrdinalIgnoreCase)) ?.LearningDeliveries?.SingleOrDefault(l => l.AimSeqNumber == learningDelivery.AimSeqNumber); if (learnerFm35Data != null) { mainOccupancyModels.Add(_mainOccupancyReportModelBuilder.BuildFm35Model( learner, learningDelivery, larsModel, frameworkAim, learnerFm35Data, _stringUtilitiesService)); } } if (learningDelivery.FundModel != 25) { continue; } FM25Learner learnerFm25Data = fm25Data?.Learners?.SingleOrDefault(l => string.Equals(l.LearnRefNumber, learner.LearnRefNumber, StringComparison.OrdinalIgnoreCase)); mainOccupancyModels.Add(_mainOccupancyReportModelBuilder.BuildFm25Model( learner, learningDelivery, learnerFm25Data)); } } LogWarnings(larsErrors); mainOccupancyModels.Sort(MainOccupancyModelComparer); string csv = GetReportCsv(mainOccupancyModels); var jobId = reportServiceContext.JobId; var ukPrn = reportServiceContext.Ukprn.ToString(); var externalFileName = GetExternalFilename(ukPrn, jobId, reportServiceContext.SubmissionDateTimeUtc); var fileName = GetFilename(ukPrn, jobId, reportServiceContext.SubmissionDateTimeUtc); await _streamableKeyValuePersistenceService.SaveAsync($"{externalFileName}.csv", csv, cancellationToken); await WriteZipEntry(archive, $"{fileName}.csv", csv); }
public void Build() { ICollection <string> _attributes = new HashSet <string> { AttributeConstants.Fm35OnProgPayment, AttributeConstants.Fm35BalancePayment, AttributeConstants.Fm35EmpOutcomePay, AttributeConstants.Fm35AchievePayment, AttributeConstants.Fm35LearnSuppFundCash }; var learningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35AchievePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash), }; var learner1 = new FM35Learner { LearnRefNumber = "Learner1", LearningDeliveries = new List <LearningDelivery> { new LearningDelivery { AimSeqNumber = 1, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1618 }, LearningDeliveryPeriodisedValues = learningDeliveryPeriodisedValues }, new LearningDelivery { AimSeqNumber = 2, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1923 }, LearningDeliveryPeriodisedValues = learningDeliveryPeriodisedValues }, } }; var learner2 = new FM35Learner { LearnRefNumber = "Learner2", LearningDeliveries = new List <LearningDelivery> { new LearningDelivery { AimSeqNumber = 1, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1618 }, LearningDeliveryPeriodisedValues = learningDeliveryPeriodisedValues }, new LearningDelivery { AimSeqNumber = 2, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1923 }, LearningDeliveryPeriodisedValues = learningDeliveryPeriodisedValues }, } }; var global = new FM35Global { Learners = new List <FM35Learner> { learner1, learner2 } }; var context = new Mock <IReportServiceContext>(); var reportServiceDependentData = new Mock <IReportServiceDependentData>(); context.Setup(c => c.Ukprn).Returns(1); reportServiceDependentData.Setup(r => r.Get <FM35Global>()).Returns(global); var result = NewBuilder().Build(context.Object, reportServiceDependentData.Object); result.Should().HaveCount(84); result.Select(f => f.FundingLineType).Distinct().Should().BeEquivalentTo(NewBuilder().FundLines); result.Where(f => f.FundingLineType == FundLineConstants.Apprenticeship1618 && f.Period == 1).FirstOrDefault().Total.Should().Be(11.11m); }
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); }
private void PopulateDataStoreCache(IDataStoreCache cache, IEnumerable <FM35Learner> learners, FM35Global fm35Global, int ukprn) { cache.AddRange(BuildGlobals(fm35Global, ukprn)); learners.NullSafeForEach(learner => { var learnRefNumber = learner.LearnRefNumber; cache.Add(BuildLearner(ukprn, learnRefNumber)); learner.LearningDeliveries.NullSafeForEach(learningDelivery => cache.Add(BuildLearningDelivery(learningDelivery, ukprn, learnRefNumber))); }); var learningDeliveryPeriodisedValues = learners.SelectMany(l => l.LearningDeliveries.Select(ld => new FundModelLearningDeliveryPeriodisedValue <List <LearningDeliveryPeriodisedValue> >(ukprn, l.LearnRefNumber, ld.AimSeqNumber.Value, ld.LearningDeliveryPeriodisedValues))); cache.AddRange(BuildLearningDeliveryPeriods(learningDeliveryPeriodisedValues)); learningDeliveryPeriodisedValues.NullSafeForEach(ldpv => ldpv.LearningDeliveryPeriodisedValue.NullSafeForEach(learningDeliveryPeriodisedValue => cache.Add(BuildLearningDeliveryPeriodisedValues(learningDeliveryPeriodisedValue, ldpv.AimSeqNumber, ukprn, ldpv.LearnRefNumber)))); }