public void Condense() { var learnerOne = new FM35Learner(); var learnerTwo = new FM35Learner(); var learnerThree = new FM35Learner(); var learnerFour = new FM35Learner(); var learnerFive = new FM35Learner(); var learnerSix = new FM35Learner(); var globalOne = new FM35Global() { Learners = new List <FM35Learner>() { learnerOne, learnerTwo, }, }; var globalTwo = new FM35Global() { Learners = new List <FM35Learner> { learnerThree, learnerFour, }, }; var globalThree = new FM35Global() { Learners = new List <FM35Learner> { learnerFive, learnerSix, }, }; var fundingOutputs = new List <FM35Global>() { globalOne, globalTwo, globalThree, }; var fundingOutput = NewService().Condense(fundingOutputs); fundingOutput.Should().Be(globalOne); fundingOutput.Learners.Should().HaveCount(6); fundingOutput.Learners.Should().Contain(new[] { learnerOne, learnerTwo, learnerThree, learnerFour, learnerFive, learnerSix }); }
public void BuildTest() { var dependentDataMock = new Mock <IReportServiceDependentData>(); var referenceDataRoot = new ReferenceDataRoot() { Organisations = new List <Organisation>() { new Organisation() { UKPRN = 987654321, Name = "Provider XYZ", OrganisationCoFRemovals = new List <OrganisationCoFRemoval>() { new OrganisationCoFRemoval() { EffectiveFrom = new DateTime(2019, 01, 01), CoFRemoval = (decimal)4500.12 } }, } }, MetaDatas = new MetaData() { ReferenceDataVersions = new ReferenceDataVersion() { OrganisationsVersion = new OrganisationsVersion { Version = "1.1.1.1" }, Employers = new EmployersVersion { Version = "2.2.2.2" }, LarsVersion = new LarsVersion { Version = "3.3.3.3" }, PostcodesVersion = new PostcodesVersion { Version = "4.4.4.4" }, CampusIdentifierVersion = new CampusIdentifierVersion() { Version = "5.5.5.5" }, EasFileDetails = new EasFileDetails { UploadDateTime = new DateTime(2020, 1, 1, 1, 1, 1) } } } }; var easFundingLines = BuildEasFundingLines(); var fm35Learner = new FM35Learner { LearnRefNumber = "Learner1", LearningDeliveries = BuildFm35LearningDeliveries() }; var fm35Global = new FM35Global() { Learners = new List <FM35Learner>() { fm35Learner } }; var albLearner = new ALBLearner() { LearnRefNumber = "Learner1", LearningDeliveries = BuildAlbLearningDeliveries() }; var albGlobal = new ALBGlobal() { Learners = new List <ALBLearner>() { albLearner } }; dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot); dependentDataMock.Setup(d => d.Get <FM35Global>()).Returns(fm35Global); dependentDataMock.Setup(d => d.Get <ALBGlobal>()).Returns(albGlobal); dependentDataMock.Setup(d => d.Get <List <EasFundingLine> >()).Returns(easFundingLines); var submissionDateTime = new DateTime(2020, 1, 1, 1, 1, 1); var ukDateTime = new DateTime(2020, 1, 1, 1, 1, 1); var dateTimeProvider = new Mock <IDateTimeProvider>(); var reportServiceContextMock = new Mock <IReportServiceContext>(); reportServiceContextMock.SetupGet(c => c.Ukprn).Returns(987654321); reportServiceContextMock.SetupGet(c => c.SubmissionDateTimeUtc).Returns(submissionDateTime); reportServiceContextMock.SetupGet(c => c.ServiceReleaseVersion).Returns("11.22.3300.4321"); reportServiceContextMock.SetupGet(c => c.IlrReportingFilename).Returns("ILR-12345678-2021-20201005-151322-01.xml"); reportServiceContextMock.SetupGet(c => c.EasReportingFilename).Returns("EAS-12345678-2021-20201005-151322-01.csv"); dateTimeProvider.Setup(p => p.GetNowUtc()).Returns(submissionDateTime); dateTimeProvider.SetupSequence(p => p.ConvertUtcToUk(It.IsAny <DateTime>())) .Returns(ukDateTime) .Returns(new DateTime(2020, 1, 1, 1, 1, 1)); var result = NewBuilder(dateTimeProvider.Object).Build(reportServiceContextMock.Object, dependentDataMock.Object); result.ProviderName.Should().Be("Provider XYZ"); result.Ukprn.Should().Be("987654321"); result.IlrFile.Should().Be("ILR-12345678-2021-20201005-151322-01.xml"); result.EasFile.Should().Be("EAS-12345678-2021-20201005-151322-01.csv"); result.Year.Should().Be("2020/21"); result.ReportGeneratedAt.Should().Be("Report generated at: 01:01:01 on 01/01/2020"); result.ApplicationVersion.Should().Be("11.22.3300.4321"); result.LarsData.Should().Be("3.3.3.3"); result.OrganisationData.Should().Be("1.1.1.1"); result.PostcodeData.Should().Be("4.4.4.4"); result.CampusIdData.Should().Be("5.5.5.5"); result.AEBProgrammeFunding.MidYearClaims.Should().Be(135.324m); result.AEBProgrammeFunding.YearEndClaims.Should().Be(350.384m); result.AEBProgrammeFunding.FinalClaims.Should().Be(489.3132m); result.AEBLearningSupport.MidYearClaims.Should().Be(44.331m); result.AEBLearningSupport.YearEndClaims.Should().Be(115.096m); result.AEBLearningSupport.FinalClaims.Should().Be(161.3283m); result.AEBProgrammeFunding1924.MidYearClaims.Should().Be(114.324m); result.AEBProgrammeFunding1924.YearEndClaims.Should().Be(295.384m); result.AEBProgrammeFunding1924.FinalClaims.Should().Be(411.3132m); result.AEBLearningSupport1924.MidYearClaims.Should().Be(44.331m); result.AEBLearningSupport1924.YearEndClaims.Should().Be(115.096m); result.AEBLearningSupport1924.FinalClaims.Should().Be(161.3283m); result.ALBBursaryFunding.MidYearClaims.Should().Be(23.331m); result.ALBBursaryFunding.YearEndClaims.Should().Be(60.096m); result.ALBBursaryFunding.FinalClaims.Should().Be(83.3283m); result.ALBAreaCosts.MidYearClaims.Should().Be(67.662m); result.ALBAreaCosts.YearEndClaims.Should().Be(175.192m); result.ALBAreaCosts.FinalClaims.Should().Be(244.6566m); result.ALBExcessSupport.MidYearClaims.Should().Be(21m); result.ALBExcessSupport.YearEndClaims.Should().Be(55m); result.ALBExcessSupport.FinalClaims.Should().Be(78m); }
public void Build() { ICollection <string> _attributes = new HashSet <string> { AttributeConstants.Fm35OnProgPayment, AttributeConstants.Fm35BalancePayment, AttributeConstants.Fm35EmpOutcomePay, AttributeConstants.Fm35AchievePayment, AttributeConstants.Fm35LearnSuppFundCash }; var learningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35AchievePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash), }; var learner1 = new FM35Learner { LearnRefNumber = "Learner1", LearningDeliveries = new List <LearningDelivery> { new LearningDelivery { AimSeqNumber = 1, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1618 }, LearningDeliveryPeriodisedValues = learningDeliveryPeriodisedValues }, new LearningDelivery { AimSeqNumber = 2, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1923 }, LearningDeliveryPeriodisedValues = learningDeliveryPeriodisedValues }, } }; var learner2 = new FM35Learner { LearnRefNumber = "Learner2", LearningDeliveries = new List <LearningDelivery> { new LearningDelivery { AimSeqNumber = 1, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1618 }, LearningDeliveryPeriodisedValues = learningDeliveryPeriodisedValues }, new LearningDelivery { AimSeqNumber = 2, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1923 }, LearningDeliveryPeriodisedValues = learningDeliveryPeriodisedValues }, } }; var global = new FM35Global { Learners = new List <FM35Learner> { learner1, learner2 } }; var context = new Mock <IReportServiceContext>(); var reportServiceDependentData = new Mock <IReportServiceDependentData>(); context.Setup(c => c.Ukprn).Returns(1); reportServiceDependentData.Setup(r => r.Get <FM35Global>()).Returns(global); var result = NewBuilder().Build(context.Object, reportServiceDependentData.Object); result.Should().HaveCount(84); result.Select(f => f.FundingLineType).Distinct().Should().BeEquivalentTo(NewBuilder().FundLines); result.Where(f => f.FundingLineType == FundLineConstants.Apprenticeship1618 && f.Period == 1).FirstOrDefault().Total.Should().Be(11.11m); }
public async Task <FM35Global> GetFM35Data( IReportServiceContext reportServiceContext, CancellationToken cancellationToken) { await _getDataLock.WaitAsync(cancellationToken); try { if (_loadedDataAlready) { return(_fundingOutputs); } cancellationToken.ThrowIfCancellationRequested(); _loadedDataAlready = true; int ukPrn = reportServiceContext.Ukprn; if (string.Equals(reportServiceContext.CollectionName, "ILR1819", StringComparison.OrdinalIgnoreCase)) { string fm35Filename = reportServiceContext.FundingFM35OutputKey; _logger.LogWarning($"Reading {fm35Filename}; Storage is {_storage}; CancellationToken is {cancellationToken}"); if (await _storage.ContainsAsync(fm35Filename, cancellationToken)) { _logger.LogWarning($"Available {fm35Filename}"); using (MemoryStream ms = new MemoryStream()) { await _storage.GetAsync(fm35Filename, ms, cancellationToken); _logger.LogWarning($"Deserialising {fm35Filename} with {ms.Length}"); _fundingOutputs = _jsonSerializationService.Deserialize <FM35Global>(ms); } } _logger.LogWarning($"Finished {fm35Filename}"); } else { FM35Global fm35Global = new FM35Global(); using (var ilrContext = _ilrRulebaseContextFactory()) { var fm35GlobalDb = await ilrContext.FM35_globals.FirstOrDefaultAsync(x => x.UKPRN == ukPrn, cancellationToken); FM35_LearningDelivery[] res = await ilrContext.FM35_LearningDeliveries.Where(x => x.UKPRN == ukPrn) .Include(x => x.FM35_LearningDelivery_PeriodisedValues).ToArrayAsync(cancellationToken); IGrouping <string, FM35_LearningDelivery>[] learners = res.GroupBy(x => x.LearnRefNumber).ToArray(); fm35Global.Learners = new List <FM35Learner>(); foreach (IGrouping <string, FM35_LearningDelivery> fm35LearningDeliveries in learners) { var learningDeliveryDto = new List <LearningDelivery>(); foreach (var ld in fm35LearningDeliveries) { var ldPeriodisedValues = ld.FM35_LearningDelivery_PeriodisedValues.Select(ldpv => new LearningDeliveryPeriodisedValue() { AttributeName = ldpv.AttributeName, Period1 = ldpv.Period_1, Period2 = ldpv.Period_2, Period3 = ldpv.Period_3, Period4 = ldpv.Period_4, Period5 = ldpv.Period_5, Period6 = ldpv.Period_6, Period7 = ldpv.Period_7, Period8 = ldpv.Period_8, Period9 = ldpv.Period_9, Period10 = ldpv.Period_10, Period11 = ldpv.Period_11, Period12 = ldpv.Period_12 }).ToList(); learningDeliveryDto.Add(new LearningDelivery() { AimSeqNumber = ld.AimSeqNumber, LearningDeliveryPeriodisedValues = ldPeriodisedValues, LearningDeliveryValue = new LearningDeliveryValue() { FundLine = ld.FundLine, AchApplicDate = ld.AchApplicDate // todo: finish the entire LearningDeliveryValue here } }); } FM35Learner learner = new FM35Learner() { LearnRefNumber = fm35LearningDeliveries.Key, LearningDeliveries = learningDeliveryDto }; fm35Global.Learners.Add(learner); } if (fm35GlobalDb != null) { fm35Global.LARSVersion = fm35GlobalDb.LARSVersion; fm35Global.OrgVersion = fm35GlobalDb.OrgVersion; fm35Global.PostcodeDisadvantageVersion = fm35GlobalDb.PostcodeDisadvantageVersion; fm35Global.RulebaseVersion = fm35GlobalDb.RulebaseVersion; fm35Global.UKPRN = fm35GlobalDb.UKPRN; } } _fundingOutputs = fm35Global; } } finally { _getDataLock.Release(); } return(_fundingOutputs); }
public void GetFM35LearningDeliveryPeriodisedValues() { var learner1 = new FM35Learner { LearnRefNumber = "Learner1", LearningDeliveries = new List <LearningDelivery> { new LearningDelivery { AimSeqNumber = 1, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1618 }, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash), } }, new LearningDelivery { AimSeqNumber = 2, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1923 }, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment), } }, } }; var learner2 = new FM35Learner { LearnRefNumber = "Learner2", LearningDeliveries = new List <LearningDelivery> { new LearningDelivery { AimSeqNumber = 1, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1618 }, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash), } }, new LearningDelivery { AimSeqNumber = 2, LearningDeliveryValue = new LearningDeliveryValue { FundLine = FundLineConstants.Apprenticeship1923 }, LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue> { BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay), BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment), } }, } }; var global = new FM35Global { Learners = new List <FM35Learner> { learner1, learner2 } }; var expectedModel = new List <FM35LearningDeliveryValues> { BuildFM35PeriodisedValuesForAttribute(1, "Learner1", 1, FundLineConstants.Apprenticeship1618, AttributeConstants.Fm35BalancePayment), BuildFM35PeriodisedValuesForAttribute(1, "Learner1", 1, FundLineConstants.Apprenticeship1618, AttributeConstants.Fm35LearnSuppFundCash), BuildFM35PeriodisedValuesForAttribute(1, "Learner1", 2, FundLineConstants.Apprenticeship1923, AttributeConstants.Fm35EmpOutcomePay), BuildFM35PeriodisedValuesForAttribute(1, "Learner1", 2, FundLineConstants.Apprenticeship1923, AttributeConstants.Fm35OnProgPayment), BuildFM35PeriodisedValuesForAttribute(1, "Learner2", 1, FundLineConstants.Apprenticeship1618, AttributeConstants.Fm35BalancePayment), BuildFM35PeriodisedValuesForAttribute(1, "Learner2", 1, FundLineConstants.Apprenticeship1618, AttributeConstants.Fm35LearnSuppFundCash), BuildFM35PeriodisedValuesForAttribute(1, "Learner2", 2, FundLineConstants.Apprenticeship1923, AttributeConstants.Fm35EmpOutcomePay), BuildFM35PeriodisedValuesForAttribute(1, "Learner2", 2, FundLineConstants.Apprenticeship1923, AttributeConstants.Fm35OnProgPayment), }; NewBuilder().GetFM35LearningDeliveryPeriodisedValues(global, 1).Should().BeEquivalentTo(expectedModel); }