public IEnumerable <TBL_LearningDelivery> MapLearningDeliveries(FM81Global fm81Global) { return(fm81Global.Learners.SelectMany(l => l.LearningDeliveries.Select(ld => new TBL_LearningDelivery { UKPRN = fm81Global.UKPRN, LearnRefNumber = l.LearnRefNumber, AimSeqNumber = ld.AimSeqNumber.Value, AchApplicDate = ld.LearningDeliveryValues.AchApplicDate, AchEligible = ld.LearningDeliveryValues.AchEligible, Achieved = ld.LearningDeliveryValues.Achieved, AchievementApplicVal = ld.LearningDeliveryValues.AchievementApplicVal, AchPayment = ld.LearningDeliveryValues.AchPayment, ActualDaysIL = ld.LearningDeliveryValues.ActualDaysIL, ActualNumInstalm = ld.LearningDeliveryValues.ActualNumInstalm, AdjProgStartDate = ld.LearningDeliveryValues.AdjProgStartDate, AgeStandardStart = ld.LearningDeliveryValues.AgeStandardStart, ApplicFundValDate = ld.LearningDeliveryValues.ApplicFundValDate, CombinedAdjProp = ld.LearningDeliveryValues.CombinedAdjProp, CoreGovContCapApplicVal = ld.LearningDeliveryValues.CoreGovContCapApplicVal, CoreGovContPayment = ld.LearningDeliveryValues.CoreGovContPayment, CoreGovContUncapped = ld.LearningDeliveryValues.CoreGovContUncapped, EmpIdAchDate = ld.LearningDeliveryValues.EmpIdAchDate, EmpIdFirstDayStandard = ld.LearningDeliveryValues.EmpIdFirstDayStandard, EmpIdFirstYoungAppDate = ld.LearningDeliveryValues.EmpIdFirstYoungAppDate, EmpIdSecondYoungAppDate = ld.LearningDeliveryValues.EmpIdSecondYoungAppDate, EmpIdSmallBusDate = ld.LearningDeliveryValues.EmpIdSmallBusDate, FundLine = ld.LearningDeliveryValues.FundLine, InstPerPeriod = ld.LearningDeliveryValues.InstPerPeriod, LearnDelDaysIL = ld.LearningDeliveryValues.LearnDelDaysIL, LearnDelStandardAccDaysIL = ld.LearningDeliveryValues.LearnDelStandardAccDaysIL, LearnDelStandardPrevAccDaysIL = ld.LearningDeliveryValues.LearnDelStandardPrevAccDaysIL, LearnDelStandardTotalDaysIL = ld.LearningDeliveryValues.LearnDelStandardTotalDaysIL, LearnSuppFund = ld.LearningDeliveryValues.LearnSuppFund, LearnSuppFundCash = ld.LearningDeliveryValues.LearnSuppFundCash, MathEngAimValue = ld.LearningDeliveryValues.MathEngAimValue, MathEngBalPayment = ld.LearningDeliveryValues.MathEngBalPayment, MathEngBalPct = ld.LearningDeliveryValues.MathEngBalPct, MathEngLSFFundStart = ld.LearningDeliveryValues.MathEngLSFFundStart, MathEngLSFThresholdDays = ld.LearningDeliveryValues.MathEngLSFThresholdDays, MathEngOnProgPayment = ld.LearningDeliveryValues.MathEngOnProgPayment, MathEngOnProgPct = ld.LearningDeliveryValues.MathEngOnProgPct, OutstandNumOnProgInstalm = ld.LearningDeliveryValues.OutstandNumOnProgInstalm, PlannedNumOnProgInstalm = ld.LearningDeliveryValues.PlannedNumOnProgInstalm, PlannedTotalDaysIL = ld.LearningDeliveryValues.PlannedTotalDaysIL, ProgStandardStartDate = ld.LearningDeliveryValues.ProgStandardStartDate, SmallBusApplicVal = ld.LearningDeliveryValues.SmallBusApplicVal, SmallBusEligible = ld.LearningDeliveryValues.SmallBusEligible, SmallBusPayment = ld.LearningDeliveryValues.SmallBusPayment, SmallBusStatusFirstDayStandard = ld.LearningDeliveryValues.SmallBusStatusFirstDayStandard, SmallBusStatusThreshold = ld.LearningDeliveryValues.SmallBusStatusThreshold, YoungAppApplicVal = ld.LearningDeliveryValues.YoungAppApplicVal, YoungAppEligible = ld.LearningDeliveryValues.YoungAppEligible, YoungAppFirstPayment = ld.LearningDeliveryValues.YoungAppFirstPayment, YoungAppFirstThresholdDate = ld.LearningDeliveryValues.YoungAppFirstThresholdDate, YoungAppPayment = ld.LearningDeliveryValues.YoungAppPayment, YoungAppSecondPayment = ld.LearningDeliveryValues.YoungAppSecondPayment, YoungAppSecondThresholdDate = ld.LearningDeliveryValues.YoungAppSecondThresholdDate }))); }
public void Condense_NullLearners() { var globalOne = new FM81Global() { Learners = null }; var globalTwo = new FM81Global() { Learners = null }; var globalThree = new FM81Global() { Learners = null }; var fundingOutputs = new List <FM81Global>() { globalOne, globalTwo, globalThree, }; var fundingOutput = NewService().Condense(fundingOutputs, 1, "2021"); fundingOutput.Should().Be(globalOne); fundingOutput.Learners.Should().BeEmpty(); }
public IEnumerable <int> BuildFm81EmployersCollection(FM81Global fm81Global) { var employerIdHashSet = new HashSet <int>(); foreach (var learner in fm81Global?.Learners?.Where(l => l != null) ?? Enumerable.Empty <FM81Learner>()) { foreach (var learningDelivery in learner.LearningDeliveries?.Where(ld => ld?.LearningDeliveryValues != null) ?? Enumerable.Empty <LearningDelivery>()) { if (learningDelivery.LearningDeliveryValues.EmpIdSmallBusDate.HasValue) { employerIdHashSet.Add(learningDelivery.LearningDeliveryValues.EmpIdSmallBusDate.Value); } if (learningDelivery.LearningDeliveryValues.EmpIdFirstYoungAppDate.HasValue) { employerIdHashSet.Add(learningDelivery.LearningDeliveryValues.EmpIdFirstYoungAppDate.Value); } if (learningDelivery.LearningDeliveryValues.EmpIdSecondYoungAppDate.HasValue) { employerIdHashSet.Add(learningDelivery.LearningDeliveryValues.EmpIdSecondYoungAppDate.Value); } if (learningDelivery.LearningDeliveryValues.EmpIdAchDate.HasValue) { employerIdHashSet.Add(learningDelivery.LearningDeliveryValues.EmpIdAchDate.Value); } } } return(employerIdHashSet); }
public IEnumerable <TBL_Learner> MapLearners(FM81Global fm81Global) { return(fm81Global.Learners.Select(l => new TBL_Learner { UKPRN = fm81Global.UKPRN, LearnRefNumber = l.LearnRefNumber, })); }
public void Condense_EmptyCollection() { var global = new FM81Global { UKPRN = 1, CurFundYr = "2021" }; NewService().Condense(Enumerable.Empty <FM81Global>(), 1, "2021").Should().BeEquivalentTo(global); }
public async Task <string> Process(FundingDto actorModel, CancellationToken cancellationToken) { FM81Global results = RunFunding(actorModel, cancellationToken); actorModel = null; GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true, true); return(BuildFundingOutput(results)); }
public IEnumerable <TBL_global> BuildGlobals(FM81Global fm81Global, int ukprn) { return(new List <TBL_global>() { new TBL_global { UKPRN = ukprn, CurFundYr = fm81Global.CurFundYr, LARSVersion = fm81Global.LARSVersion, RulebaseVersion = fm81Global.RulebaseVersion, } }); }
public IEnumerable <TBL_global> MapGlobals(FM81Global fm81Global) { return(new List <TBL_global>() { new TBL_global { UKPRN = fm81Global.UKPRN, CurFundYr = fm81Global.CurFundYr, LARSVersion = fm81Global.LARSVersion, RulebaseVersion = fm81Global.RulebaseVersion, } }); }
public void MapData(IDataStoreCache cache, FM81Global fm81Global) { var learners = fm81Global?.Learners; if (learners == null) { return; } var ukprn = fm81Global.UKPRN; PopulateDataStoreCache(cache, learners, fm81Global, ukprn); }
public FundingSummaryModel BuildWithFundLine(string title, FM81Global fm81Global, List <string> validLearners, string fundLine, string[] attributes, int period) { FundingSummaryModel fundingSummaryModel = new FundingSummaryModel(title); if (fm81Global?.Learners == null || validLearners == null) { return(fundingSummaryModel); } LearningDelivery[] learningDeliveries = _cacheProviderService.Get(fundLine); if (learningDeliveries == null) { FM81Learner[] learners = fm81Global.Learners.Where(x => validLearners.Contains(x.LearnRefNumber)).ToArray(); learningDeliveries = learners.SelectMany(x => x.LearningDeliveries) .Where(x => string.Equals(fundLine, x.LearningDeliveryValues.FundLine, StringComparison.OrdinalIgnoreCase)).ToArray(); _cacheProviderService.Set(fundLine, 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 void Condense() { var learnerOne = new FM81Learner(); var learnerTwo = new FM81Learner(); var learnerThree = new FM81Learner(); var learnerFour = new FM81Learner(); var learnerFive = new FM81Learner(); var learnerSix = new FM81Learner(); var globalOne = new FM81Global() { Learners = new List <FM81Learner>() { learnerOne, learnerTwo, }, }; var globalTwo = new FM81Global() { Learners = new List <FM81Learner> { learnerThree, learnerFour, }, }; var globalThree = new FM81Global() { Learners = new List <FM81Learner> { learnerFive, learnerSix, }, }; var fundingOutputs = new List <FM81Global>() { globalOne, globalTwo, globalThree, }; var fundingOutput = NewService().Condense(fundingOutputs, 1, "2021"); fundingOutput.Should().Be(globalOne); fundingOutput.Learners.Should().HaveCount(6); fundingOutput.Learners.Should().Contain(new[] { learnerOne, learnerTwo, learnerThree, learnerFour, learnerFive, learnerSix }); }
public FM81Data MapData(FM81Global fm81Global) { var data = new FM81Data(); if (fm81Global.Learners != null) { data.Globals = MapGlobals(fm81Global).ToList(); data.Learners = MapLearners(fm81Global).ToList(); data.LearningDeliveries = MapLearningDeliveries(fm81Global).ToList(); data.LearningDeliveryPeriods = MapLearningDeliveryPeriods(fm81Global).ToList(); data.LearningDeliveryPeriodisedValues = MapLearningDeliveryPeriodisedValues(fm81Global).ToList(); } return(data); }
public FM81TrailBlazerProviderService( ILogger logger, IKeyValuePersistenceService 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 FM81Actor = new Mock <IFM81Actor>(); var condenserOutput = new FM81Global(); var jsonSerializationServiceMock = new Mock <IJsonSerializationService>(); var fundingActorProviderMock = new Mock <IActorProvider <IFM81Actor> >(); var filePersistanceServiceMock = new Mock <IFilePersistanceService>(); var fundingOutputCondenserServiceMock = new Mock <IFundingOutputCondenserService <FM81Global> >(); var loggerMock = new Mock <ILogger>(); FM81Actor.Setup(a => a.Process(fundingActorDtos.FirstOrDefault(), cancellationToken)).Returns(() => Task <string> .Factory.StartNew(() => "string")); jsonSerializationServiceMock.Setup(sm => sm.Deserialize <FM81Global>(It.IsAny <string>())).Returns(new FM81Global()).Verifiable(); fundingActorProviderMock.Setup(pm => pm.Provide()).Returns(FM81Actor.Object).Verifiable(); filePersistanceServiceMock.Setup(sm => sm.PersistAsync(fundingServiceContextMock.Object.FundingFm81OutputKey, fundingServiceContextMock.Object.Container, condenserOutput, cancellationToken)).Returns(Task.CompletedTask).Verifiable(); fundingOutputCondenserServiceMock.Setup(sm => sm.Condense( It.IsAny <IEnumerable <FM81Global> >(), fundingServiceContextMock.Object.Ukprn, fundingServiceContextMock.Object.Year)).Returns(condenserOutput).Verifiable(); await NewTask( jsonSerializationServiceMock.Object, fundingActorProviderMock.Object, filePersistanceServiceMock.Object, fundingOutputCondenserServiceMock.Object, loggerMock.Object, "FM81Actor").Execute(fundingActorDtos, fundingServiceContextMock.Object, cancellationToken); fundingActorProviderMock.VerifyAll(); filePersistanceServiceMock.VerifyAll(); fundingOutputCondenserServiceMock.VerifyAll(); }
public void MapFM81() { var fundLine1 = "FundLine1"; var fundLine2 = "FundLine2"; var attribute1 = "Attribute1"; var attribute2 = "Attribute2"; var global = new FM81Global() { Learners = Enumerable.Range(0, 1000) .Select(i => new FM81Learner() { LearningDeliveries = Enumerable.Range(0, 3) .Select(j => new ESFA.DC.ILR.ReportService.Models.Fm81.LearningDelivery() { LearningDeliveryValues = new ESFA.DC.ILR.ReportService.Models.Fm81.LearningDeliveryValue() { FundLine = j % 2 == 0 ? fundLine1 : fundLine2 }, LearningDeliveryPeriodisedValues = Enumerable.Range(0, 16) .Select(k => new ESFA.DC.ILR.ReportService.Models.Fm81.LearningDeliveryPeriodisedValue() { AttributeName = k % 2 == 0 ? attribute1 : attribute2 }).ToList(), }).ToList(), }).ToList() }; var mapped = NewProvider().BuildFm81Dictionary(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 <TBL_LearningDelivery_Period> MapLearningDeliveryPeriods(FM81Global fm81Global) { var periodisedValues = fm81Global.Learners .SelectMany(l => l.LearningDeliveries.Select(ld => new FundModelLearningDeliveryPeriodisedValue <List <LearningDeliveryPeriodisedValue> >(fm81Global.UKPRN, l.LearnRefNumber, ld.AimSeqNumber.Value, ld.LearningDeliveryPeriodisedValues))); var learningDeliveryPeriods = new List <TBL_LearningDelivery_Period>(); for (var i = 1; i < 13; i++) { learningDeliveryPeriods.AddRange( periodisedValues.Select(pv => new TBL_LearningDelivery_Period { UKPRN = pv.Ukprn, LearnRefNumber = pv.LearnRefNumber, AimSeqNumber = pv.AimSeqNumber, Period = i, AchPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.AchPayment), i), CoreGovContPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.CoreGovContPayment), i), CoreGovContUncapped = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.CoreGovContUncapped), i), InstPerPeriod = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, int?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.InstPerPeriod), i), LearnSuppFund = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, bool?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.LearnSuppFund), i), LearnSuppFundCash = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.LearnSuppFundCash), i), MathEngBalPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.MathEngBalPayment), i), MathEngBalPct = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.MathEngBalPct), i), MathEngOnProgPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.MathEngOnProgPayment), i), MathEngOnProgPct = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.MathEngOnProgPct), i), SmallBusPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.SmallBusPayment), i), YoungAppFirstPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.YoungAppFirstPayment), i), YoungAppPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.YoungAppPayment), i), YoungAppSecondPayment = PeriodisedValueHelper.GetPeriodValue <LearningDeliveryPeriodisedValue, decimal?>(pv.LearningDeliveryPeriodisedValue.FirstOrDefault(a => a.AttributeName == FM81Constants.YoungAppSecondPayment), i), })); } return(learningDeliveryPeriods); }
public async Task <FM81Global> GetFM81Data(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 fm81Filename = reportServiceContext.FundingFM81OutputKey; string fm81 = await _storage.GetAsync(fm81Filename, cancellationToken); if (string.IsNullOrEmpty(fm81)) { _fundingOutputs = null; return(_fundingOutputs); } _fundingOutputs = _jsonSerializationService.Deserialize <FM81Global>(fm81); } else { FM81Global fm81Global = new FM81Global(); using (var ilrContext = _ilrRulebaseContextFactory()) { var fm81GlobalDb = await ilrContext.TBL_globals.FirstOrDefaultAsync(x => x.UKPRN == ukPrn, cancellationToken); using (var ilrValidContext = _ilrValidContextFactory()) { TBL_LearningDelivery[] res = await ilrContext.TBL_LearningDeliveries.Where(x => x.UKPRN == ukPrn) .Include(x => x.TBL_LearningDelivery_PeriodisedValues).ToArrayAsync(cancellationToken); IGrouping <string, TBL_LearningDelivery>[] learners = res.GroupBy(x => x.LearnRefNumber).ToArray(); fm81Global.Learners = new List <FM81Learner>(); foreach (IGrouping <string, TBL_LearningDelivery> fm81LearningDeliveries in learners) { var learningDeliveryDto = new List <ILR.FundingService.FM81.FundingOutput.Model.Output.LearningDelivery>(); foreach (var ld in fm81LearningDeliveries) { var ldPeriodisedValues = ld.TBL_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, LearningDeliveryValues = new LearningDeliveryValue() { FundLine = ld.FundLine, AchApplicDate = ld.AchApplicDate // todo: finish the entire LearningDeliveryValue here } }); } FM81Learner learner = new FM81Learner() { LearnRefNumber = fm81LearningDeliveries.Key, LearningDeliveries = learningDeliveryDto }; fm81Global.Learners.Add(learner); } } if (fm81GlobalDb != null) { fm81Global.LARSVersion = fm81GlobalDb.LARSVersion; fm81Global.CurFundYr = fm81GlobalDb.CurFundYr; fm81Global.RulebaseVersion = fm81GlobalDb.RulebaseVersion; fm81Global.UKPRN = fm81GlobalDb.UKPRN; } } _fundingOutputs = fm81Global; } } finally { _getDataLock.Release(); } return(_fundingOutputs); }
public Dictionary <string, Dictionary <string, decimal?[][]> > BuildFm81Dictionary(FM81Global fm81Global) { return(fm81Global .Learners? .SelectMany(l => l.LearningDeliveries) .GroupBy(ld => ld.LearningDeliveryValues.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?[][]> >()); }
private Dictionary <string, Dictionary <int?, LearningDelivery> > BuildFm81LearningDeliveryDictionary(FM81Global fm81Global) { return(fm81Global? .Learners? .ToDictionary( l => l.LearnRefNumber, l => l.LearningDeliveries .ToDictionary( ld => ld.AimSeqNumber, ld => ld), StringComparer.OrdinalIgnoreCase) ?? new Dictionary <string, Dictionary <int?, LearningDelivery> >()); }
public FM81Data MapFM81Data(FM81Global fm81Global) => _fm81Mapper.MapData(fm81Global);
public void MapData(IDataStoreCache cache, FM81Global fm81Global) { }
public IEnumerable <TBL_global> MapGlobals(FM81Global fm81Global) { return(new List <TBL_global>()); }
public IEnumerable <TBL_Learner> MapLearners(FM81Global fm81Global) { return(new List <TBL_Learner>()); }
public IEnumerable <TBL_LearningDelivery> MapLearningDeliveries(FM81Global fm81Global) { return(new List <TBL_LearningDelivery>()); }
public IEnumerable <TBL_LearningDelivery_PeriodisedValue> MapLearningDeliveryPeriodisedValues(FM81Global fm81Global) { return(new List <TBL_LearningDelivery_PeriodisedValue>()); }
public void MapFM81Data(IDataStoreCache cache, FM81Global fm81Global) => _fm81Mapper.MapData(cache, fm81Global);
public IEnumerable <TBL_LearningDelivery_PeriodisedValue> MapLearningDeliveryPeriodisedValues(FM81Global fm81Global) { var periodisedValues = fm81Global.Learners .SelectMany(l => l.LearningDeliveries.Select(ld => new FundModelLearningDeliveryPeriodisedValue <List <LearningDeliveryPeriodisedValue> >(fm81Global.UKPRN, l.LearnRefNumber, ld.AimSeqNumber.Value, ld.LearningDeliveryPeriodisedValues))); return (periodisedValues.SelectMany(pv => pv.LearningDeliveryPeriodisedValue .Select(p => new TBL_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 void Build_SingleRow() { var reportServiceContext = Mock.Of <IReportServiceContext>(); var dependentDataMock = new Mock <IReportServiceDependentData>(); var learningDeliveryFams = new List <ILearningDeliveryFAM>() { new TestLearningDeliveryFAM() }; var providerSpecDeliveryMonitorings = new List <IProviderSpecDeliveryMonitoring>() { new TestProviderSpecDeliveryMonitoring(), }; var appFinRecords = new List <IAppFinRecord>() { new TestAppFinRecord(), }; var learningDelivery = new TestLearningDelivery() { FundModel = 81, LearnAimRef = "learnAimRef", AimSeqNumber = 1, AimType = 1, ProgTypeNullable = 25, LearningDeliveryFAMs = learningDeliveryFams, ProviderSpecDeliveryMonitorings = providerSpecDeliveryMonitorings, AppFinRecords = appFinRecords }; var providerSpecLearnerMonitorings = new List <IProviderSpecLearnerMonitoring>() { new TestProviderSpecLearnerMonitoring(), }; var learner = new TestLearner() { LearnRefNumber = "LearnRefNumber", LearningDeliveries = new List <ILearningDelivery>() { learningDelivery }, ProviderSpecLearnerMonitorings = providerSpecLearnerMonitorings, }; var message = new TestMessage() { Learners = new List <ILearner>() { learner } }; var larsLearningDelivery = new LARSLearningDelivery() { LearnAimRef = "learnAimRef" }; var referenceDataRoot = new ReferenceDataRoot() { LARSLearningDeliveries = new List <LARSLearningDelivery>() { larsLearningDelivery } }; var fm81LearningDeliveryValue = new LearningDeliveryValue(); var fm81LearningDelivery = new LearningDelivery() { AimSeqNumber = 1, LearningDeliveryValues = fm81LearningDeliveryValue, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue>() { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81CoreGovContPayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81MathEngOnProgPayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81MathEngBalPayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81LearnSuppFundCash), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81SmallBusPayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81YoungAppPayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81AchPayment), } }; var fm81Global = new FM81Global() { Learners = new List <FM81Learner>() { new FM81Learner() { LearnRefNumber = "LearnRefNumber", LearningDeliveries = new List <LearningDelivery>() { fm81LearningDelivery, } } } }; dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message); dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot); dependentDataMock.Setup(d => d.Get <FM81Global>()).Returns(fm81Global); var providerSpecDeliveryMonitoringModel = new ProviderSpecDeliveryMonitoringModel(); var providerSpecLearnerMonitoringModel = new ProviderSpecLearnerMonitoringModel(); var learningDeliveryFamsModel = new LearningDeliveryFAMsModel(); var ilrModelMapperMock = new Mock <IIlrModelMapper>(); ilrModelMapperMock.Setup(m => m.MapLearningDeliveryFAMs(learningDeliveryFams)).Returns(learningDeliveryFamsModel); ilrModelMapperMock.Setup(m => m.MapProviderSpecDeliveryMonitorings(providerSpecDeliveryMonitorings)).Returns(providerSpecDeliveryMonitoringModel); ilrModelMapperMock.Setup(m => m.MapProviderSpecLearnerMonitorings(providerSpecLearnerMonitorings)).Returns(providerSpecLearnerMonitoringModel); var result = NewBuilder(ilrModelMapperMock.Object).Build(reportServiceContext, dependentDataMock.Object).ToList(); result.Should().HaveCount(1); var row = result[0]; row.Learner.Should().Be(learner); row.LearningDelivery.Should().Be(learningDelivery); row.LarsLearningDelivery.Should().Be(larsLearningDelivery); row.Fm81LearningDelivery.Should().Be(fm81LearningDeliveryValue); row.ProviderSpecDeliveryMonitoring.Should().Be(providerSpecDeliveryMonitoringModel); row.ProviderSpecLearnerMonitoring.Should().Be(providerSpecLearnerMonitoringModel); row.PeriodisedValues.Should().NotBeNull(); row.LearningDeliveryFAMs.Should().Be(learningDeliveryFamsModel); }
public void Build_FiftyThousandLearners() { var reportServiceContext = Mock.Of <IReportServiceContext>(); var dependentDataMock = new Mock <IReportServiceDependentData>(); var ilrModelMapperMock = new Mock <IIlrModelMapper>(); var providerSpecDeliveryMonitoring = new ProviderSpecDeliveryMonitoringModel(); var providerSpecLearnMonitoring = new ProviderSpecLearnerMonitoringModel(); var famModel = new LearningDeliveryFAMsModel(); ilrModelMapperMock.Setup(m => m.MapProviderSpecDeliveryMonitorings(It.IsAny <IEnumerable <IProviderSpecDeliveryMonitoring> >())).Returns(providerSpecDeliveryMonitoring); ilrModelMapperMock.Setup(m => m.MapProviderSpecLearnerMonitorings(It.IsAny <IEnumerable <IProviderSpecLearnerMonitoring> >())).Returns(providerSpecLearnMonitoring); ilrModelMapperMock.Setup(m => m.MapLearningDeliveryFAMs(It.IsAny <IEnumerable <ILearningDeliveryFAM> >())).Returns(famModel); var learnerCount = 50000; var message = new TestMessage() { Learners = Enumerable.Range(0, learnerCount).Select( l => new TestLearner() { LearnRefNumber = "LearnRefNumber" + l, LearningDeliveries = new List <ILearningDelivery>() { new TestLearningDelivery() { FundModel = 81, LearnAimRef = "learnAimRef" + l, AimSeqNumber = 1, ProgTypeNullable = 25, } } }).ToList() }; var referenceDataRoot = new ReferenceDataRoot() { LARSLearningDeliveries = Enumerable.Range(0, learnerCount) .Select(ld => new LARSLearningDelivery() { LearnAimRef = "learnAimRef" + ld }).ToList() }; var albGlobal = new FM81Global() { Learners = Enumerable.Range(0, learnerCount) .Select( l => new FM81Learner() { LearnRefNumber = "LearnRefNumber" + l, LearningDeliveries = new List <LearningDelivery>() { new LearningDelivery() { AimSeqNumber = 1, LearningDeliveryValues = new LearningDeliveryValue(), LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue>() { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35AchievePayPct), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35AchievePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash), } } } }).ToList() }; dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message); dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot); dependentDataMock.Setup(d => d.Get <FM81Global>()).Returns(albGlobal); var result = NewBuilder(ilrModelMapperMock.Object).Build(reportServiceContext, dependentDataMock.Object).ToList(); result.Should().HaveCount(learnerCount); }
public IEnumerable <TrailblazerLearningDeliveryPeriodisedValues> BuildFm81PeriodisedValuesList(FM81Global fm81Global) { return(fm81Global .Learners? .SelectMany(l => l.LearningDeliveries.SelectMany(ld => ld.LearningDeliveryPeriodisedValues.Select(ldpv => new TrailblazerLearningDeliveryPeriodisedValues { EmployerIds = new Dictionary <string, int?> { { AttributeConstants.Fm81SmallBusPayment, ld.LearningDeliveryValues.EmpIdSmallBusDate }, { AttributeConstants.Fm81YoungAppFirstPayment, ld.LearningDeliveryValues.EmpIdFirstYoungAppDate }, { AttributeConstants.Fm81YoungAppSecondPayment, ld.LearningDeliveryValues.EmpIdSecondYoungAppDate }, { AttributeConstants.Fm81AchPayment, ld.LearningDeliveryValues.EmpIdAchDate } }, AttributeName = ldpv.AttributeName, Values = new[] { ldpv.Period1, ldpv.Period2, ldpv.Period3, ldpv.Period4, ldpv.Period5, ldpv.Period6, ldpv.Period7, ldpv.Period8, ldpv.Period9, ldpv.Period10, ldpv.Period11, ldpv.Period12 } }) )) ?? Enumerable.Empty <TrailblazerLearningDeliveryPeriodisedValues>()); }