Exemple #1
0
        public void Condense_NullLearners()
        {
            var globalOne = new FM25Global()
            {
                Learners = null
            };

            var globalTwo = new FM25Global()
            {
                Learners = null
            };

            var globalThree = new FM25Global()
            {
                Learners = null
            };

            var fundingOutputs = new List <FM25Global>()
            {
                globalOne,
                globalTwo,
                globalThree,
            };

            var fundingOutput = NewService().Condense(fundingOutputs, 1, "2021");

            fundingOutput.Should().Be(globalOne);
            fundingOutput.Learners.Should().BeEmpty();
        }
        public static FM25Global BuildTestModel()
        {
            var fm25GlobalObject = new FM25Global();

            fm25GlobalObject.LARSVersion = "Lars - 1.0.0.0";
            fm25GlobalObject.OrgVersion  = "Org - 1.0.0.0";
            fm25GlobalObject.PostcodeDisadvantageVersion = "Postcode - 1.0.0.0";
            fm25GlobalObject.RulebaseVersion             = "Rulebase - 1.0.0.0";
            fm25GlobalObject.UKPRN = 10033670;

            var learners = new List <FM25Learner>();

            learners.Add(
                new FM25Learner
            {
                LearnRefNumber       = "0fm2501",
                FundLine             = "19-24 Students with an EHCP",
                StartFund            = true,
                AreaCostFact1618Hist = 10,
                ProgWeightHist       = 10,
                PrvDisadvPropnHist   = 10,
                PrvHistLrgProgPropn  = 10,
                PrvRetentFactHist    = 10,
                RateBand             = "540+ hours (Band 5)",
                OnProgPayment        = 500
            });

            fm25GlobalObject.Learners = learners;

            return(fm25GlobalObject);
        }
        public void MapFM25()
        {
            var fundLine1 = "FundLine1";
            var fundLine2 = "FundLine2";

            var attribute1 = "Attribute1";
            var attribute2 = "Attribute2";

            var global = new FM25Global()
            {
                Learners = Enumerable.Range(0, 1000)
                           .Select(i => new FM25Learner()
                {
                    FundLine = i % 2 == 0 ? fundLine1 : fundLine2,
                    LearnerPeriodisedValues = Enumerable.Range(0, 16)
                                              .Select(k => new LearnerPeriodisedValues()
                    {
                        AttributeName = k % 2 == 0 ? attribute1 : attribute2
                    }).ToList(),
                }).ToList()
            };

            var mapped = NewProvider().BuildFm25Dictionary(global);

            mapped.Should().HaveCount(2);

            mapped[fundLine1].Should().HaveCount(2);
            mapped[fundLine2].Should().HaveCount(2);

            mapped[fundLine1][attribute1].Should().HaveCount(4000);
            mapped[fundLine1][attribute2].Should().HaveCount(4000);

            mapped[fundLine2][attribute1].Should().HaveCount(4000);
            mapped[fundLine2][attribute2].Should().HaveCount(4000);
        }
 public IEnumerable <FM25_Learner> MapFM25Learners(FM25Global fm25Global)
 {
     return(fm25Global.Learners.Select(l => new FM25_Learner
     {
         UKPRN = fm25Global.UKPRN.Value,
         LearnRefNumber = l.LearnRefNumber,
         AcadMonthPayment = l.AcadMonthPayment,
         OnProgPayment = l.OnProgPayment,
         AcadProg = l.AcadProg,
         ActualDaysILCurrYear = l.ActualDaysILCurrYear,
         AreaCostFact1618Hist = l.AreaCostFact1618Hist,
         Block1DisadvUpliftNew = l.Block1DisadvUpliftNew,
         Block2DisadvElementsNew = l.Block2DisadvElementsNew,
         ConditionOfFundingEnglish = l.ConditionOfFundingEnglish,
         ConditionOfFundingMaths = l.ConditionOfFundingMaths,
         CoreAimSeqNumber = l.CoreAimSeqNumber,
         FullTimeEquiv = l.FullTimeEquiv,
         FundLine = l.FundLine,
         LearnerActEndDate = l.LearnerActEndDate,
         LearnerPlanEndDate = l.LearnerPlanEndDate,
         LearnerStartDate = l.LearnerStartDate,
         NatRate = l.NatRate,
         PlannedDaysILCurrYear = l.PlannedDaysILCurrYear,
         ProgWeightHist = l.ProgWeightHist,
         ProgWeightNew = l.ProgWeightNew,
         PrvDisadvPropnHist = l.PrvDisadvPropnHist,
         PrvHistLrgProgPropn = l.PrvHistLrgProgPropn,
         PrvRetentFactHist = l.PrvRetentFactHist,
         RateBand = l.RateBand,
         RetentNew = l.RetentNew,
         StartFund = l.StartFund,
         ThresholdDays = l.ThresholdDays
     }));
 }
Exemple #5
0
        public void Build_One()
        {
            var learner = new TestLearner()
            {
                LearnRefNumber     = "LearnRefNumber",
                LearningDeliveries = new List <ILearningDelivery>()
                {
                    new TestLearningDelivery()
                    {
                        FundModel            = 25,
                        LearningDeliveryFAMs = new List <ILearningDeliveryFAM>()
                        {
                            new TestLearningDeliveryFAM()
                            {
                                LearnDelFAMType = "SOF",
                                LearnDelFAMCode = "107",
                            }
                        }
                    }
                }
            };

            var fm25Learner = new FM25Learner()
            {
                LearnRefNumber = "LearnRefNumber",
                StartFund      = true,
                FundLine       = "14-16 Direct Funded Students",
            };

            var message = new TestMessage()
            {
                Learners = new List <ILearner>()
                {
                    learner
                }
            };

            var fm25Global = new FM25Global()
            {
                Learners = new List <FM25Learner>()
                {
                    fm25Learner
                }
            };

            var dependentDataMock = new Mock <IReportServiceDependentData>();

            dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message);
            dependentDataMock.Setup(d => d.Get <FM25Global>()).Returns(fm25Global);

            var models = NewBuilder().Build(null, dependentDataMock.Object).ToList();

            models.Should().HaveCount(1);

            models[0].Learner.Should().Be(learner);
            models[0].FM25Learner.Should().Be(fm25Learner);
        }
Exemple #6
0
        public void Condense_EmptyCollection()
        {
            var global = new FM25Global
            {
                UKPRN = 1
            };

            NewService().Condense(Enumerable.Empty <FM25Global>(), 1, "2021").Should().BeEquivalentTo(global);
        }
Exemple #7
0
 protected IDictionary <string, FM25Learner> BuildFm25LearnerDictionary(FM25Global fm25Global)
 {
     return(fm25Global?
            .Learners?
            .ToDictionary(
                l => l.LearnRefNumber,
                l => l,
                StringComparer.OrdinalIgnoreCase)
            ?? new Dictionary <string, FM25Learner>());
 }
 public IEnumerable <FM25_FM35_Learner_Period> MapFM25_35_LearnerPeriod(FM25Global fm25Global)
 {
     return(fm25Global.Learners.SelectMany(l => l.LearnerPeriods.Select(lp => new FM25_FM35_Learner_Period
     {
         UKPRN = fm25Global.UKPRN.Value,
         LearnRefNumber = l.LearnRefNumber,
         Period = lp.Period.Value,
         LnrOnProgPay = lp.LnrOnProgPay
     })));
 }
Exemple #9
0
 public List <FM25_FM35_global> BuildFM25_35_Global(FM25Global fm25Global, int ukprn)
 {
     return(new List <FM25_FM35_global>()
     {
         new FM25_FM35_global
         {
             UKPRN = ukprn,
             RulebaseVersion = fm25Global.RulebaseVersion
         }
     });
 }
        public async Task <string> Process(FundingDto actorModel, CancellationToken cancellationToken)
        {
            FM25Global results = RunFunding(actorModel, cancellationToken);

            actorModel = null;

            GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
            GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true, true);

            return(BuildFundingOutput(results));
        }
 public IEnumerable <FM25_FM35_global> MapFM25_35_Global(FM25Global fm25Global)
 {
     return(new List <FM25_FM35_global>()
     {
         new FM25_FM35_global
         {
             UKPRN = fm25Global.UKPRN.Value,
             RulebaseVersion = fm25Global.RulebaseVersion
         }
     });
 }
Exemple #12
0
        public void MapData(IDataStoreCache cache, FM25Global fm25Global)
        {
            var learners = fm25Global?.Learners;

            if (learners == null)
            {
                return;
            }

            var ukprn = fm25Global.UKPRN.Value;

            PopulateDataStoreCache(cache, learners, fm25Global, ukprn);
        }
Exemple #13
0
        public void BuildGlobal()
        {
            var ukprn = 1234;

            var global = new FM25Global()
            {
                UKPRN = ukprn
            };

            var dataEntity = NewService().BuildGlobalDataEntity(global);

            dataEntity.EntityName.Should().Be("global");
            dataEntity.Attributes["UKPRN"].Value.Should().Be(ukprn);
        }
Exemple #14
0
 public List <FM25_global> BuildFM25Global(FM25Global fm25Global, int ukprn)
 {
     return(new List <FM25_global>()
     {
         new FM25_global
         {
             UKPRN = ukprn,
             LARSVersion = fm25Global.LARSVersion,
             OrgVersion = fm25Global.OrgVersion,
             PostcodeDisadvantageVersion = fm25Global.PostcodeDisadvantageVersion,
             RulebaseVersion = fm25Global.RulebaseVersion
         }
     });
 }
 public IEnumerable <FM25_global> MapFM25Global(FM25Global fm25Global)
 {
     return(new List <FM25_global>()
     {
         new FM25_global
         {
             UKPRN = fm25Global.UKPRN.Value,
             LARSVersion = fm25Global.LARSVersion,
             OrgVersion = fm25Global.OrgVersion,
             PostcodeDisadvantageVersion = fm25Global.PostcodeDisadvantageVersion,
             RulebaseVersion = fm25Global.RulebaseVersion
         }
     });
 }
Exemple #16
0
        public void Condense()
        {
            var learnerOne   = new FM25Learner();
            var learnerTwo   = new FM25Learner();
            var learnerThree = new FM25Learner();
            var learnerFour  = new FM25Learner();
            var learnerFive  = new FM25Learner();
            var learnerSix   = new FM25Learner();

            var globalOne = new FM25Global()
            {
                Learners = new List <FM25Learner>()
                {
                    learnerOne,
                    learnerTwo,
                },
            };

            var globalTwo = new FM25Global()
            {
                Learners = new List <FM25Learner>
                {
                    learnerThree,
                    learnerFour,
                },
            };

            var globalThree = new FM25Global()
            {
                Learners = new List <FM25Learner>
                {
                    learnerFive,
                    learnerSix,
                },
            };

            var fundingOutputs = new List <FM25Global>()
            {
                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 });
        }
Exemple #17
0
 public FM25ProviderService(
     ILogger logger,
     IKeyValuePersistenceService storage,
     IJsonSerializationService jsonSerializationService,
     IIntUtilitiesService intUtilitiesService,
     Func <IIlr1819RulebaseContext> ilrRulebaseContextFactory)
 {
     _logger  = logger;
     _storage = storage;
     _jsonSerializationService  = jsonSerializationService;
     _intUtilitiesService       = intUtilitiesService;
     _ilrRulebaseContextFactory = ilrRulebaseContextFactory;
     _fundingOutputs            = null;
     _getDataLock = new SemaphoreSlim(1, 1);
 }
        public IDataEntity GetDataEntityMapperEntity()
        {
            var global = new FM25Global
            {
                UKPRN    = 12345678,
                Learners = new List <FM25Learner>
                {
                    new FM25Learner
                    {
                    }
                }
            };

            return(new PeriodisationDataEntityMapper().BuildGlobalDataEntity(global));
        }
        public FM25Data MapData(FM25Global fm25Global)
        {
            var data = new FM25Data();

            if (fm25Global.Learners != null)
            {
                data.Globals                         = MapFM25Global(fm25Global).ToList();
                data.Learners                        = MapFM25Learners(fm25Global).ToList();
                data.Fm25Fm35Globals                 = MapFM25_35_Global(fm25Global).ToList();
                data.Fm25Fm35LearnerPeriods          = MapFM25_35_LearnerPeriod(fm25Global).ToList();
                data.Fm25Fm35LearnerPeriodisedValues = MapFM25_35_LearnerPeriodisedValues(fm25Global).ToList();
            }

            return(data);
        }
Exemple #20
0
        public void Build_FiftyThousand()
        {
            var count = 50000;

            var message = new TestMessage()
            {
                Learners = Enumerable.Range(0, count)
                           .Select(i => new TestLearner()
                {
                    LearnRefNumber     = i.ToString(),
                    LearningDeliveries = new List <ILearningDelivery>()
                    {
                        new TestLearningDelivery()
                        {
                            FundModel            = 25,
                            LearningDeliveryFAMs = new List <ILearningDeliveryFAM>()
                            {
                                new TestLearningDeliveryFAM()
                                {
                                    LearnDelFAMType = "SOF",
                                    LearnDelFAMCode = "107",
                                }
                            }
                        }
                    }
                }).ToList()
            };

            var fm25Global = new FM25Global()
            {
                Learners = Enumerable.Range(0, count)
                           .Select(i => new FM25Learner()
                {
                    LearnRefNumber = i.ToString(),
                    StartFund      = true,
                    FundLine       = "14-16 Direct Funded Students",
                }).ToList()
            };

            var dependentDataMock = new Mock <IReportServiceDependentData>();

            dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message);
            dependentDataMock.Setup(d => d.Get <FM25Global>()).Returns(fm25Global);

            var models = NewBuilder().Build(null, dependentDataMock.Object).ToList();

            models.Should().HaveCount(count);
        }
        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 FM25Actor       = new Mock <IFM25Actor>();
            var condenserOutput = new FM25Global();

            var jsonSerializationServiceMock      = new Mock <IJsonSerializationService>();
            var fundingActorProviderMock          = new Mock <IActorProvider <IFM25Actor> >();
            var filePersistanceServiceMock        = new Mock <IFilePersistanceService>();
            var fundingOutputCondenserServiceMock = new Mock <IFM25FundingOutputCondenserService <FM25Global, PeriodisationGlobal> >();
            var loggerMock = new Mock <ILogger>();

            FM25Actor.Setup(a => a.Process(fundingActorDtos.FirstOrDefault(), cancellationToken)).Returns(() => Task <string> .Factory.StartNew(() => "string"));
            jsonSerializationServiceMock.Setup(sm => sm.Deserialize <FM25Global>(It.IsAny <string>())).Returns(new FM25Global()).Verifiable();
            fundingActorProviderMock.Setup(pm => pm.Provide()).Returns(FM25Actor.Object).Verifiable();
            filePersistanceServiceMock.Setup(sm => sm.PersistAsync(fundingServiceContextMock.Object.FundingFm25OutputKey, fundingServiceContextMock.Object.Container, condenserOutput, cancellationToken)).Returns(Task.CompletedTask).Verifiable();
            fundingOutputCondenserServiceMock.Setup(sm => sm.Condense(
                                                        It.IsAny <IEnumerable <FM25Global> >(),
                                                        fundingServiceContextMock.Object.Ukprn,
                                                        fundingServiceContextMock.Object.Year)).Returns(condenserOutput).Verifiable();

            await NewTask(
                jsonSerializationServiceMock.Object,
                fundingActorProviderMock.Object,
                filePersistanceServiceMock.Object,
                fundingOutputCondenserServiceMock.Object,
                loggerMock.Object,
                "FM25Actor").Execute(fundingActorDtos, fundingServiceContextMock.Object, cancellationToken);

            fundingActorProviderMock.VerifyAll();
            filePersistanceServiceMock.VerifyAll();
            fundingOutputCondenserServiceMock.VerifyAll();
        }
        public FundingSummaryModel BuildWithFundLine(
            string title,
            FM25Global fm25Global,
            List<string> validLearners,
            string fundLine,
            int period)
        {
            FundingSummaryModel fundingSummaryModel = new FundingSummaryModel(title);

            if (fm25Global?.Learners == null || validLearners == null)
            {
                return fundingSummaryModel;
            }

            FM25Learner[] fundLineObject = fm25Global.Learners.Where(x =>
                string.Equals(x.FundLine, fundLine, StringComparison.OrdinalIgnoreCase) &&
                validLearners.Contains(x.LearnRefNumber)).ToArray();

            LearnerPeriodisedValues[] periodisedValues = fundLineObject.SelectMany(x => x.LearnerPeriodisedValues)
                .Where(x => string.Equals(x.AttributeName, "LnrOnProgPay")).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;
        }
Exemple #23
0
        public void BuildTest()
        {
            var dependentDataMock = new Mock <IReportServiceDependentData>();

            var learningDeliveryFam = new Mock <ILearningDeliveryFAM>();

            learningDeliveryFam.SetupGet(fam => fam.LearnDelFAMType).Returns("SOF");
            learningDeliveryFam.SetupGet(fam => fam.LearnDelFAMCode).Returns("107");

            var albLearningDeliveryFam = new Mock <ILearningDeliveryFAM>();

            albLearningDeliveryFam.SetupGet(fam => fam.LearnDelFAMType).Returns("ALB");

            var learningDeliveryFams = new List <ILearningDeliveryFAM>()
            {
                learningDeliveryFam.Object,
                albLearningDeliveryFam.Object
            };

            var learningDelivery = new TestLearningDelivery()
            {
                FundModel            = 25,
                LearnAimRef          = "learnAimRef",
                AimSeqNumber         = 1,
                LearningDeliveryFAMs = learningDeliveryFams,
                StdCodeNullable      = 1,
            };
            var message = new TestMessage()
            {
                Learners     = BuildLearners(learningDelivery),
                HeaderEntity = new TestHeader()
                {
                    CollectionDetailsEntity = new MessageHeaderCollectionDetails()
                    {
                        FilePreparationDate = new DateTime(2019, 11, 06)
                    }
                }
            };

            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"
                        },
                        CoFVersion = new CoFVersion()
                        {
                            Version = "5.5.5.5"
                        }
                    }
                }
            };

            var fm25Global = new FM25Global()
            {
                Learners = BuildFm25Learners()
            };

            dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message);
            dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot);
            dependentDataMock.Setup(d => d.Get <FM25Global>()).Returns(fm25Global);

            var submissionDateTime       = new DateTime(2019, 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-1920-20191005-151322-01.xml");

            dateTimeProvider.Setup(p => p.ConvertUtcToUk(submissionDateTime)).Returns(ukDateTime);
            dateTimeProvider.Setup(p => p.GetNowUtc()).Returns(submissionDateTime);

            var result = NewBuilder(dateTimeProvider.Object).Build(reportServiceContextMock.Object, dependentDataMock.Object);

            result.ApplicationVersion.Should().Be("11.22.3300.4321");
            result.ComponentSetVersion.Should().Be("NA");
            result.FilePreparationDate.Should().Be("06/11/2019");
            result.IlrFile.Should().Be("ILR-12345678-1920-20191005-151322-01.xml");
            result.LargeEmployerData.Should().Be("2.2.2.2");
            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.CofRemovalData.Should().Be("5.5.5.5");
            result.ProviderName.Should().Be("Provider XYZ");
            result.ReportGeneratedAt.Should().Be("Report generated at: 01:01:01 on 01/01/2020");

            result.Ukprn.Should().Be("987654321");
            result.Year.Should().Be("2020/21");
            result.CofRemoval.Should().Be((decimal) - 4500.12);
            result.ReferenceDate.Should().Be("(ALL)");

            result.FundingFactor.PrvRetentFactHist.Should().Be("0.79600");
            result.FundingFactor.ProgWeightHist.Should().Be("1.06100");
            result.FundingFactor.AreaCostFact1618Hist.Should().Be("1.00000");
            result.FundingFactor.PrvDisadvPropnHist.Should().Be("0.34500");
            result.FundingFactor.PrvHistLrgProgPropn.Should().Be("0.21300");
            result.FundingFactor.PrvHistL3ProgMathEngProp.Should().Be("0.21300");

            result.DirectFundingStudents.Band1StudentNumbers.Should().Be(0);
            result.DirectFundingStudents.Band2StudentNumbers.Should().Be(0);
            result.DirectFundingStudents.Band3StudentNumbers.Should().Be(0);
            result.DirectFundingStudents.Band4aStudentNumbers.Should().Be(1);
            result.DirectFundingStudents.Band4bStudentNumbers.Should().Be(0);
            result.DirectFundingStudents.Band5StudentNumbers.Should().Be(1);
            result.DirectFundingStudents.Band6StudentNumbers.Should().Be(0);
            result.DirectFundingStudents.Band7StudentNumbers.Should().Be(0);
            result.DirectFundingStudents.Band8StudentNumbers.Should().Be(0);
            result.DirectFundingStudents.Band9StudentNumbers.Should().Be(0);
            result.DirectFundingStudents.Band1To5StudentNumbersTLevel.Should().Be(0);


            result.StudentsIncludingHNS.Band1StudentNumbers.Should().Be(0);
            result.StudentsIncludingHNS.Band1TotalFunding.Should().Be(0);
            result.StudentsIncludingHNS.Band2StudentNumbers.Should().Be(0);
            result.StudentsIncludingHNS.Band2TotalFunding.Should().Be(0);
            result.StudentsIncludingHNS.Band3StudentNumbers.Should().Be(1);
            result.StudentsIncludingHNS.Band3TotalFunding.Should().Be((decimal)25815.43);
            result.StudentsIncludingHNS.Band4aStudentNumbers.Should().Be(0);
            result.StudentsIncludingHNS.Band4aTotalFunding.Should().Be(0);
            result.StudentsIncludingHNS.Band4bStudentNumbers.Should().Be(1);
            result.StudentsIncludingHNS.Band4bTotalFunding.Should().Be((decimal)2589915.43);
            result.StudentsIncludingHNS.Band5StudentNumbers.Should().Be(0);
            result.StudentsIncludingHNS.Band5TotalFunding.Should().Be(0);
            result.StudentsIncludingHNS.Band6StudentNumbers.Should().Be(0);
            result.StudentsIncludingHNS.Band6TotalFunding.Should().Be(0);
            result.StudentsIncludingHNS.Band7StudentNumbers.Should().Be(0);
            result.StudentsIncludingHNS.Band7TotalFunding.Should().Be(0);
            result.StudentsIncludingHNS.Band8StudentNumbers.Should().Be(0);
            result.StudentsIncludingHNS.Band8TotalFunding.Should().Be(0);
            result.StudentsIncludingHNS.Band9StudentNumbers.Should().Be(0);
            result.StudentsIncludingHNS.Band9TotalFunding.Should().Be(0);
            result.StudentsIncludingHNS.Band1To5StudentNumbersTLevel.Should().Be(0);
            result.StudentsIncludingHNS.Band1To5TotalFundingTLevel.Should().Be(0);

            result.StudentsWithEHCPlan.Band1StudentNumbers.Should().Be(1);
            result.StudentsWithEHCPlan.Band1TotalFunding.Should().Be((decimal)125.67);
            result.StudentsWithEHCPlan.Band2StudentNumbers.Should().Be(1);
            result.StudentsWithEHCPlan.Band2TotalFunding.Should().Be((decimal)555.12);
            result.StudentsWithEHCPlan.Band3StudentNumbers.Should().Be(0);
            result.StudentsWithEHCPlan.Band3TotalFunding.Should().Be(0);
            result.StudentsWithEHCPlan.Band4aStudentNumbers.Should().Be(0);
            result.StudentsWithEHCPlan.Band4aTotalFunding.Should().Be(0);
            result.StudentsWithEHCPlan.Band4bStudentNumbers.Should().Be(0);
            result.StudentsWithEHCPlan.Band4bTotalFunding.Should().Be(0);
            result.StudentsWithEHCPlan.Band5StudentNumbers.Should().Be(0);
            result.StudentsWithEHCPlan.Band5TotalFunding.Should().Be(0);
            result.StudentsWithEHCPlan.Band6StudentNumbers.Should().Be(0);
            result.StudentsWithEHCPlan.Band6TotalFunding.Should().Be(0);
            result.StudentsWithEHCPlan.Band7StudentNumbers.Should().Be(1);
            result.StudentsWithEHCPlan.Band7TotalFunding.Should().Be((decimal)125.67);
            result.StudentsWithEHCPlan.Band8StudentNumbers.Should().Be(0);
            result.StudentsWithEHCPlan.Band8TotalFunding.Should().Be(0);
            result.StudentsWithEHCPlan.Band9StudentNumbers.Should().Be(0);
            result.StudentsWithEHCPlan.Band9TotalFunding.Should().Be(0);
            result.StudentsWithEHCPlan.Band1To5StudentNumbersTLevel.Should().Be(0);
            result.StudentsWithEHCPlan.Band1To5TotalFundingTLevel.Should().Be(0);

            result.ContinuingStudentsExcludingEHCPlan.Band1StudentNumbers.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band1TotalFunding.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band2StudentNumbers.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band2TotalFunding.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band3StudentNumbers.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band3TotalFunding.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band4aStudentNumbers.Should().Be(1);
            result.ContinuingStudentsExcludingEHCPlan.Band4aTotalFunding.Should().Be((decimal)855.55);
            result.ContinuingStudentsExcludingEHCPlan.Band4bStudentNumbers.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band4bTotalFunding.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band5StudentNumbers.Should().Be(1);
            result.ContinuingStudentsExcludingEHCPlan.Band5TotalFunding.Should().Be((decimal)56425.99);
            result.ContinuingStudentsExcludingEHCPlan.Band6StudentNumbers.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band6TotalFunding.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band7StudentNumbers.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band7TotalFunding.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band8StudentNumbers.Should().Be(1);
            result.ContinuingStudentsExcludingEHCPlan.Band8TotalFunding.Should().Be((decimal)56425.99);
            result.ContinuingStudentsExcludingEHCPlan.Band9StudentNumbers.Should().Be(1);
            result.ContinuingStudentsExcludingEHCPlan.Band9TotalFunding.Should().Be((decimal)855.55);
            result.ContinuingStudentsExcludingEHCPlan.Band1To5StudentNumbersTLevel.Should().Be(0);
            result.ContinuingStudentsExcludingEHCPlan.Band1To5TotalFundingTLevel.Should().Be(0);
        }
Exemple #24
0
        public void Build()
        {
            var dependentDataMock = new Mock <IReportServiceDependentData>();

            var learningDeliveryFam = new Mock <ILearningDeliveryFAM>();

            learningDeliveryFam.SetupGet(fam => fam.LearnDelFAMType).Returns("SOF");
            learningDeliveryFam.SetupGet(fam => fam.LearnDelFAMCode).Returns("107");

            var albLearningDeliveryFam = new Mock <ILearningDeliveryFAM>();

            albLearningDeliveryFam.SetupGet(fam => fam.LearnDelFAMType).Returns("ALB");

            var learningDeliveryFams = new List <ILearningDeliveryFAM>()
            {
                learningDeliveryFam.Object,
                albLearningDeliveryFam.Object
            };

            var learningDelivery = new TestLearningDelivery()
            {
                FundModel            = 25,
                LearnAimRef          = "learnAimRef",
                AimSeqNumber         = 1,
                LearningDeliveryFAMs = learningDeliveryFams,
                StdCodeNullable      = 1
            };

            var message = new TestMessage()
            {
                Learners     = BuildLearners(learningDelivery),
                HeaderEntity = new TestHeader()
                {
                    CollectionDetailsEntity = new MessageHeaderCollectionDetails()
                    {
                        FilePreparationDate = new DateTime(2019, 11, 06)
                    }
                }
            };

            var referenceDataRoot = new ReferenceDataRoot()
            {
                Organisations = new List <Organisation>()
                {
                    new Organisation()
                    {
                        UKPRN = 987654321,
                        Name  = "Provider XYZ"
                    }
                },
                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"
                        }
                    }
                }
            };

            var fm25Global = new FM25Global()
            {
                Learners = BuildFm25Learners()
            };

            dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message);
            dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot);
            dependentDataMock.Setup(d => d.Get <FM25Global>()).Returns(fm25Global);

            var submissionDateTime       = new DateTime(2019, 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-1920-20191005-151322-01.xml");

            dateTimeProvider.Setup(p => p.ConvertUtcToUk(submissionDateTime)).Returns(ukDateTime);
            dateTimeProvider.Setup(p => p.GetNowUtc()).Returns(submissionDateTime);

            var result = NewBuilder(dateTimeProvider.Object).Build(reportServiceContextMock.Object, dependentDataMock.Object);

            result.ApplicationVersion.Should().Be("11.22.3300.4321");
            result.ComponentSetVersion.Should().Be("NA");
            result.FilePreparationDate.Should().Be("06/11/2019");
            result.IlrFile.Should().Be("ILR-12345678-1920-20191005-151322-01.xml");
            result.LargeEmployerData.Should().Be("2.2.2.2");
            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.ProviderName.Should().Be("Provider XYZ");
            result.ReportGeneratedAt.Should().Be("Report generated at: 01:01:01 on 01/01/2020");

            result.StudyProgramme.DirectFunded1416StudentsTotal.WithEHCP.Should().Be(1);
            result.StudyProgramme.DirectFunded1416StudentsTotal.WithoutEHCP.Should().Be(0);
            result.StudyProgramme.DirectFunded1416StudentsTotal.HNSWithoutEHCP.Should().Be(0);
            result.StudyProgramme.DirectFunded1416StudentsTotal.EHCPWithHNS.Should().Be(1);
            result.StudyProgramme.DirectFunded1416StudentsTotal.EHCPWithoutHNS.Should().Be(0);
            result.StudyProgramme.DirectFunded1416StudentsTotal.TotalFundineStudents.Should().Be(1);

            result.StudyProgramme.IncludingHNS1619StudentsTotal.WithEHCP.Should().Be(2);
            result.StudyProgramme.IncludingHNS1619StudentsTotal.WithoutEHCP.Should().Be(0);
            result.StudyProgramme.IncludingHNS1619StudentsTotal.HNSWithoutEHCP.Should().Be(0);
            result.StudyProgramme.IncludingHNS1619StudentsTotal.EHCPWithHNS.Should().Be(1);
            result.StudyProgramme.IncludingHNS1619StudentsTotal.EHCPWithoutHNS.Should().Be(1);
            result.StudyProgramme.IncludingHNS1619StudentsTotal.TotalFundineStudents.Should().Be(2);

            result.StudyProgramme.EHCP1924StudentsTotal.WithEHCP.Should().Be(0);
            result.StudyProgramme.EHCP1924StudentsTotal.WithoutEHCP.Should().Be(0);
            result.StudyProgramme.EHCP1924StudentsTotal.HNSWithoutEHCP.Should().Be(0);
            result.StudyProgramme.EHCP1924StudentsTotal.EHCPWithHNS.Should().Be(0);
            result.StudyProgramme.EHCP1924StudentsTotal.EHCPWithoutHNS.Should().Be(0);
            result.StudyProgramme.EHCP1924StudentsTotal.TotalFundineStudents.Should().Be(0);

            result.StudyProgramme.Continuing19PlusExcludingEHCPStudentsTotal.WithEHCP.Should().Be(0);
            result.StudyProgramme.Continuing19PlusExcludingEHCPStudentsTotal.WithoutEHCP.Should().Be(0);
            result.StudyProgramme.Continuing19PlusExcludingEHCPStudentsTotal.HNSWithoutEHCP.Should().Be(0);
            result.StudyProgramme.Continuing19PlusExcludingEHCPStudentsTotal.EHCPWithHNS.Should().Be(0);
            result.StudyProgramme.Continuing19PlusExcludingEHCPStudentsTotal.EHCPWithoutHNS.Should().Be(0);
            result.StudyProgramme.Continuing19PlusExcludingEHCPStudentsTotal.TotalFundineStudents.Should().Be(0);

            result.TLevel.DirectFunded1416StudentsTotal.WithEHCP.Should().Be(1);
            result.TLevel.DirectFunded1416StudentsTotal.WithoutEHCP.Should().Be(0);
            result.TLevel.DirectFunded1416StudentsTotal.HNSWithoutEHCP.Should().Be(0);
            result.TLevel.DirectFunded1416StudentsTotal.EHCPWithHNS.Should().Be(0);
            result.TLevel.DirectFunded1416StudentsTotal.EHCPWithoutHNS.Should().Be(1);
            result.TLevel.DirectFunded1416StudentsTotal.TotalFundineStudents.Should().Be(1);

            result.TLevel.IncludingHNS1619StudentsTotal.WithEHCP.Should().Be(0);
            result.TLevel.IncludingHNS1619StudentsTotal.WithoutEHCP.Should().Be(0);
            result.TLevel.IncludingHNS1619StudentsTotal.HNSWithoutEHCP.Should().Be(0);
            result.TLevel.IncludingHNS1619StudentsTotal.EHCPWithHNS.Should().Be(0);
            result.TLevel.IncludingHNS1619StudentsTotal.EHCPWithoutHNS.Should().Be(0);
            result.TLevel.IncludingHNS1619StudentsTotal.TotalFundineStudents.Should().Be(0);

            result.TLevel.EHCP1924StudentsTotal.WithEHCP.Should().Be(2);
            result.TLevel.EHCP1924StudentsTotal.WithoutEHCP.Should().Be(0);
            result.TLevel.EHCP1924StudentsTotal.HNSWithoutEHCP.Should().Be(0);
            result.TLevel.EHCP1924StudentsTotal.EHCPWithHNS.Should().Be(1);
            result.TLevel.EHCP1924StudentsTotal.EHCPWithoutHNS.Should().Be(1);
            result.TLevel.EHCP1924StudentsTotal.TotalFundineStudents.Should().Be(2);

            result.TLevel.Continuing19PlusExcludingEHCPStudentsTotal.WithEHCP.Should().Be(2);
            result.TLevel.Continuing19PlusExcludingEHCPStudentsTotal.WithoutEHCP.Should().Be(0);
            result.TLevel.Continuing19PlusExcludingEHCPStudentsTotal.HNSWithoutEHCP.Should().Be(0);
            result.TLevel.Continuing19PlusExcludingEHCPStudentsTotal.EHCPWithHNS.Should().Be(1);
            result.TLevel.Continuing19PlusExcludingEHCPStudentsTotal.EHCPWithoutHNS.Should().Be(1);
            result.TLevel.Continuing19PlusExcludingEHCPStudentsTotal.TotalFundineStudents.Should().Be(2);

            result.Ukprn.Should().Be("987654321");
            result.Year.Should().Be("2020/21");
        }
        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 <List <string> > validLearnersTask = _validLearnersService.GetLearnersAsync(reportServiceContext, cancellationToken);

            await Task.WhenAll(ilrFileTask, fm25Task, 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 High Needs Students Detail Report");
                return;
            }

            if (cancellationToken.IsCancellationRequested)
            {
                return;
            }

            List <HNSModel> hnsModels = new List <HNSModel>();

            foreach (var learner in learners)
            {
                if (learner.LearningDeliveries == null)
                {
                    continue;
                }

                FM25Global fm25Data = fm25Task.Result;

                foreach (ILearningDelivery learningDelivery in learner.LearningDeliveries)
                {
                    FM25Learner fm25Learner =
                        fm25Data?.Learners?.SingleOrDefault(l => string.Equals(l.LearnRefNumber, learner.LearnRefNumber, StringComparison.OrdinalIgnoreCase));

                    if (fm25Learner == null)
                    {
                        continue;
                    }

                    if (!CheckIsApplicableLearner(learningDelivery, fm25Learner))
                    {
                        continue;
                    }

                    hnsModels.Add(_hnsReportModelBuilder.BuildModel(
                                      learner,
                                      learningDelivery,
                                      fm25Learner));
                }
            }

            hnsModels.Sort(_hnsModelComparer);

            string csv = GetReportCsv(hnsModels);

            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 FM25Data MapFM25Data(FM25Global fm25Global) => _fm25Mapper.MapData(fm25Global);
Exemple #27
0
        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 Dictionary <string, Dictionary <string, decimal?[][]> > BuildFm25Dictionary(FM25Global fm25Global)
 {
     return(fm25Global
            .Learners?
            .GroupBy(ld => ld.FundLine, StringComparer.OrdinalIgnoreCase)
            .ToDictionary(k => k.Key,
                          v => v.SelectMany(ld => ld.LearnerPeriodisedValues)
                          .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?[][]> >());
 }
Exemple #29
0
        public async Task <FM25Global> GetFM25Data(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 fm25Filename = reportServiceContext.FundingFM25OutputKey;
                    string fm25         = await _storage.GetAsync(fm25Filename, cancellationToken);

                    if (string.IsNullOrEmpty(fm25))
                    {
                        _fundingOutputs = null;
                        return(_fundingOutputs);
                    }

                    _fundingOutputs = _jsonSerializationService.Deserialize <FM25Global>(fm25);
                }
                else
                {
                    FM25Global fm25Global = new FM25Global();

                    using (var ilrContext = _ilrRulebaseContextFactory())
                    {
                        var fm25GlobalDb = await ilrContext.FM25_globals.FirstOrDefaultAsync(x => x.UKPRN == ukPrn, cancellationToken);

                        FM25_Learner[] learners = await ilrContext.FM25_Learners.Where(x => x.UKPRN == ukPrn).Include(x => x.FM25_FM35_Learner_PeriodisedValues).ToArrayAsync(cancellationToken);

                        fm25Global.Learners = new List <FM25Learner>();

                        foreach (FM25_Learner fm25Learner in learners)
                        {
                            List <LearnerPeriodisedValues> learnerPeriodisedValues = new List <LearnerPeriodisedValues>();
                            foreach (var learnerPeriodisedValue in fm25Learner.FM25_FM35_Learner_PeriodisedValues)
                            {
                                learnerPeriodisedValues.Add(new LearnerPeriodisedValues
                                {
                                    AttributeName  = learnerPeriodisedValue.AttributeName,
                                    LearnRefNumber = learnerPeriodisedValue.LearnRefNumber,
                                    Period1        = learnerPeriodisedValue.Period_1,
                                    Period2        = learnerPeriodisedValue.Period_2,
                                    Period3        = learnerPeriodisedValue.Period_3,
                                    Period4        = learnerPeriodisedValue.Period_4,
                                    Period5        = learnerPeriodisedValue.Period_5,
                                    Period6        = learnerPeriodisedValue.Period_6,
                                    Period7        = learnerPeriodisedValue.Period_7,
                                    Period8        = learnerPeriodisedValue.Period_8,
                                    Period9        = learnerPeriodisedValue.Period_9,
                                    Period10       = learnerPeriodisedValue.Period_10,
                                    Period11       = learnerPeriodisedValue.Period_11,
                                    Period12       = learnerPeriodisedValue.Period_12
                                });
                            }

                            fm25Global.Learners.Add(new FM25Learner
                            {
                                FundLine = fm25Learner.FundLine,
                                LearnerPeriodisedValues = learnerPeriodisedValues
                            });
                        }

                        if (fm25GlobalDb != null)
                        {
                            fm25Global.LARSVersion = fm25GlobalDb.LARSVersion;
                            fm25Global.OrgVersion  = fm25GlobalDb.OrgVersion;
                            fm25Global.PostcodeDisadvantageVersion = fm25GlobalDb.PostcodeDisadvantageVersion;
                            fm25Global.RulebaseVersion             = fm25GlobalDb.RulebaseVersion;
                            fm25Global.UKPRN = fm25GlobalDb.UKPRN;
                        }
                    }

                    _fundingOutputs = fm25Global;
                }
            }
            finally
            {
                _getDataLock.Release();
            }

            return(_fundingOutputs);
        }
Exemple #30
0
        public void Build_NoLearners()
        {
            var dependentDataMock = new Mock <IReportServiceDependentData>();

            var message = new TestMessage()
            {
                Learners     = new List <TestLearner>(),
                HeaderEntity = new TestHeader()
                {
                    CollectionDetailsEntity = new MessageHeaderCollectionDetails()
                    {
                        FilePreparationDate = new DateTime(2019, 11, 06)
                    }
                }
            };

            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"
                        },
                        CoFVersion = new CoFVersion()
                        {
                            Version = "5.5.5.5"
                        }
                    }
                }
            };

            var fm25Global = new FM25Global()
            {
                Learners = new List <FM25Learner>()
            };

            dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message);
            dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot);
            dependentDataMock.Setup(d => d.Get <FM25Global>()).Returns(fm25Global);

            var submissionDateTime       = new DateTime(2019, 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-1920-20191005-151322-01.xml");

            dateTimeProvider.Setup(p => p.ConvertUtcToUk(submissionDateTime)).Returns(ukDateTime);
            dateTimeProvider.Setup(p => p.GetNowUtc()).Returns(submissionDateTime);

            var result = NewBuilder(dateTimeProvider.Object).Build(reportServiceContextMock.Object, dependentDataMock.Object);

            result.ApplicationVersion.Should().Be("11.22.3300.4321");
            result.ComponentSetVersion.Should().Be("NA");
            result.FilePreparationDate.Should().Be("06/11/2019");
            result.IlrFile.Should().Be("ILR-12345678-1920-20191005-151322-01.xml");
            result.LargeEmployerData.Should().Be("2.2.2.2");
            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.CofRemovalData.Should().Be("5.5.5.5");
            result.ProviderName.Should().Be("Provider XYZ");
            result.ReportGeneratedAt.Should().Be("Report generated at: 01:01:01 on 01/01/2020");

            result.Ukprn.Should().Be("987654321");
            result.Year.Should().Be("2020/21");
            result.CofRemoval.Should().Be((decimal) - 4500.12);
        }