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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 10
0
        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
            })));
        }
Exemplo n.º 28
0
        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);
        }
Exemplo n.º 29
0
        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>());
 }