コード例 #1
0
        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 });
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #5
0
        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);
        }