public void CalculateCompletionEarningsThisFundingYear_Tests()
        {
            var aecApprenticeshipPriceEpisodePeriodisedValuesOne = new AecPriceEpisodePeriodisedValueBuilder()
                                                                   .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                                                   .With(a => a.AimSeqNumber, 1)
                                                                   .With(a => a.Period1, 10)
                                                                   .With(a => a.Period2, 20)
                                                                   .With(a => a.Period3, 30)
                                                                   .Build();


            var aecApprenticeshipPriceEpisodePeriodisedValuesTwo = new AecPriceEpisodePeriodisedValueBuilder()
                                                                   .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                                                   .With(a => a.AimSeqNumber, 2)
                                                                   .With(a => a.Period1, 10)
                                                                   .Build();

            var aecPriceEpisodePeriodisedValues = new List <AECApprenticeshipPriceEpisodePeriodisedValues>()
            {
                aecApprenticeshipPriceEpisodePeriodisedValuesOne,
                aecApprenticeshipPriceEpisodePeriodisedValuesTwo
            };

            var learningDelivery = new LearningDeliveryBuilder()
                                   .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                   .With(a => a.AimSeqNumber, 1)
                                   .Build();

            var completionEarningsThisFundingYear = NewBuilder().CalculateCompletionEarningsThisFundingYear(learningDelivery, aecPriceEpisodePeriodisedValues);

            completionEarningsThisFundingYear.Should().Be(60);
        }
        public void GetTotalPmrBetweenDates_Test()
        {
            var appFinRecords = new List <AppFinRecord>()
            {
                new AppFindRecordBuilder().With(a => a.AFinCode, 1).With <int>(a => a.AFinAmount, 10).Build(),
                new AppFindRecordBuilder().With(a => a.AFinCode, 2).With <int>(a => a.AFinAmount, 100).Build(),
                new AppFindRecordBuilder().With(a => a.AFinCode, 3).With <int>(a => a.AFinAmount, 20).Build(),
                new AppFindRecordBuilder().With(a => a.AFinDate, new DateTime(2020, 07, 31)).With(a => a.AFinCode, 1)
                .With <int>(a => a.AFinAmount, 100).Build(),
            };

            var learningDelivery = new LearningDeliveryBuilder()
                                   .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                   .With(a => a.AimSeqNumber, 1)
                                   .With(ld => ld.AppFinRecords, appFinRecords)
                                   .Build();

            var totalCollectedCurrentYear = NewBuilder().GetTotalPmrBetweenDates(learningDelivery, _academicYearStart, _nextAcademicYearStart);

            totalCollectedCurrentYear.Should().Be(90);

            var totalCollectedPreviousYear = NewBuilder().GetTotalPmrBetweenDates(learningDelivery, null, _academicYearStart);

            totalCollectedPreviousYear.Should().Be(100);
        }
Example #3
0
        public void GetLearningDeliveryForRecordKey()
        {
            var matchingLearningDelivery = new LearningDeliveryBuilder()
                                           .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                           .Build();

            var nonMatchingLearningDelivery = new LearningDeliveryBuilder()
                                              .With(ld => ld.LearnRefNumber, "NotLearningRefNumber")
                                              .Build();

            var learningDeliveries = new List <LearningDelivery>()
            {
                matchingLearningDelivery,
                nonMatchingLearningDelivery,
            };

            var learner = new LearnerBuilder()
                          .With(l => l.LearningDeliveries, learningDeliveries)
                          .Build();

            var recordKey = new AppsCoInvestmentRecordKey(
                "LearnRefNumber",
                new DateTime(2020, 8, 1),
                20,
                40,
                10,
                30);

            NewBuilder().GetLearningDeliveryForRecord(learner, recordKey).Should().BeSameAs(matchingLearningDelivery);
        }
Example #4
0
        public void HasLdm356Or361_Tests(string type, string code, bool result)
        {
            var learningDeliveryFam = new LearningDeliveryFamBuilder()
                                      .With(ldfam => ldfam.Type, type)
                                      .With(ldfam => ldfam.Code, code)
                                      .Build();
            var learningDeliveryFams = new List <LearningDeliveryFam> {
                learningDeliveryFam
            };

            var learningDelivery = new LearningDeliveryBuilder()
                                   .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                   .With(ld => ld.LearningDeliveryFams, learningDeliveryFams)
                                   .Build();

            NewBuilder().HasLdm356Or361(learningDelivery).Should().Be(result);
        }
Example #5
0
        public void PMRAppFinRecordFilter_Test()
        {
            var appFinRecordsPmr = new List <AppFinRecord>()
            {
                new AppFindRecordBuilder().With(a => a.AFinType, "PMR").With(a => a.AFinCode, 1).Build(),
                new AppFindRecordBuilder().With(a => a.AFinType, "PMR").With(a => a.AFinCode, 2).Build()
            };

            var appFinRecordsNonPmr = new List <AppFinRecord>()
            {
                new AppFindRecordBuilder().With(a => a.AFinType, "TNP").With(a => a.AFinCode, 1).With <int>(a => a.AFinAmount, 10).Build(),
            };

            var learningDeliveryOne = new LearningDeliveryBuilder()
                                      .With(ld => ld.LearnRefNumber, "LearningRefNumber1")
                                      .With(ld => ld.FundModel, 36)
                                      .With(a => a.AimSeqNumber, 1)
                                      .With(ld => ld.AppFinRecords, appFinRecordsPmr)
                                      .Build();

            var learningDeliveryTwo = new LearningDeliveryBuilder()
                                      .With(ld => ld.LearnRefNumber, "LearningRefNumber2")
                                      .With(ld => ld.FundModel, 36)
                                      .With(a => a.AimSeqNumber, 2)
                                      .Build();

            var nonPmrlearningDelivery = new LearningDeliveryBuilder()
                                         .With(ld => ld.LearnRefNumber, "LearningRefNumber3")
                                         .With(ld => ld.FundModel, 36)
                                         .With(ld => ld.AppFinRecords, appFinRecordsNonPmr)
                                         .Build();

            var learningDeliveries = new List <LearningDelivery>()
            {
                learningDeliveryOne,
                learningDeliveryTwo,
                nonPmrlearningDelivery
            };

            var nonPmrLearningDeliveries = new List <LearningDelivery>
            {
                nonPmrlearningDelivery
            };

            var learnerOne = new LearnerBuilder()
                             .With(l => l.LearnRefNumber, "LearningRefNumber1")
                             .With(l => l.LearningDeliveries, learningDeliveries)
                             .Build();

            var learnerTwo = new LearnerBuilder()
                             .With(l => l.LearnRefNumber, "LearningRefNumber2")
                             .With(l => l.LearningDeliveries, learningDeliveries)
                             .Build();

            var learnerThree = new LearnerBuilder()
                               .With(l => l.LearnRefNumber, "LearningRefNumber3")
                               .With(l => l.LearningDeliveries, nonPmrLearningDeliveries)
                               .Build();

            var learnerFour = new LearnerBuilder()
                              .With(l => l.LearnRefNumber, "LearningRefNumber4")
                              .Build();

            var learners = new List <Learner>
            {
                learnerOne,
                learnerTwo,
                learnerThree,
                learnerFour
            };

            NewBuilder().PMRAppFinRecordFilter(learners, "LearningRefNumber1").Should().BeTrue();
            NewBuilder().PMRAppFinRecordFilter(learners, "LearningRefNumber2").Should().BeTrue();
            NewBuilder().PMRAppFinRecordFilter(learners, "LearningRefNumber3").Should().BeFalse();
            NewBuilder().PMRAppFinRecordFilter(learners, "LearningRefNumber4").Should().BeFalse();
        }
Example #6
0
        public void GetRelevantLearners_Test()
        {
            var appFinRecordsPmr = new List <AppFinRecord>()
            {
                new AppFindRecordBuilder().With(a => a.AFinType, "PMR").With(a => a.AFinCode, 1).Build(),
                new AppFindRecordBuilder().With(a => a.AFinType, "PMR").With(a => a.AFinCode, 2).Build()
            };

            var appFinRecordsNonPmr = new List <AppFinRecord>()
            {
                new AppFindRecordBuilder().With(a => a.AFinType, "TNP").With(a => a.AFinCode, 1).With <int>(a => a.AFinAmount, 10).Build(),
            };

            var learningDeliveryOne = new LearningDeliveryBuilder()
                                      .With(ld => ld.LearnRefNumber, "LearningRefNumber1")
                                      .With(ld => ld.FundModel, 36)
                                      .With(a => a.AimSeqNumber, 1)
                                      .With(ld => ld.AppFinRecords, appFinRecordsPmr)
                                      .Build();

            var learningDeliveryTwo = new LearningDeliveryBuilder()
                                      .With(ld => ld.LearnRefNumber, "LearningRefNumber2")
                                      .With(ld => ld.FundModel, 36)
                                      .With(a => a.AimSeqNumber, 2)
                                      .Build();

            var nonPmrlearningDelivery = new LearningDeliveryBuilder()
                                         .With(ld => ld.LearnRefNumber, "LearningRefNumber3")
                                         .With(ld => ld.FundModel, 36)
                                         .With(ld => ld.AppFinRecords, appFinRecordsNonPmr)
                                         .Build();

            var learningDeliveries = new List <LearningDelivery>()
            {
                learningDeliveryOne,
                learningDeliveryTwo,
                nonPmrlearningDelivery
            };

            var nonPmrLearningDeliveries = new List <LearningDelivery>
            {
                nonPmrlearningDelivery
            };

            var paymentOne = new PaymentBuilder()
                             .With(p => p.LearnerReferenceNumber, "LearningRefNumber3")
                             .With <byte>(p => p.FundingSource, 3)
                             .With <byte>(p => p.CollectionPeriod, 1).Build();

            var paymentTwo = new PaymentBuilder()
                             .With(p => p.LearnerReferenceNumber, "LearningRefNumber4")
                             .With <byte>(p => p.FundingSource, 3)
                             .With <byte>(p => p.CollectionPeriod, 1).Build();

            var paymentThree = new PaymentBuilder()
                               .With(p => p.LearnerReferenceNumber, "LearningRefNumber5")
                               .With <byte>(p => p.FundingSource, 2)
                               .With <byte>(p => p.CollectionPeriod, 1).Build();

            var payments = new List <Payment>()
            {
                paymentOne,
                paymentTwo,
                paymentThree
            };

            var learnerOne = new LearnerBuilder()
                             .With(l => l.LearnRefNumber, "LearningRefNumber1")
                             .With(l => l.LearningDeliveries, learningDeliveries)
                             .Build();

            var learnerTwo = new LearnerBuilder()
                             .With(l => l.LearnRefNumber, "LearningRefNumber2")
                             .With(l => l.LearningDeliveries, learningDeliveries)
                             .Build();

            var learnerThree = new LearnerBuilder()
                               .With(l => l.LearnRefNumber, "LearningRefNumber3")
                               .With(l => l.LearningDeliveries, nonPmrLearningDeliveries)
                               .Build();

            var learnerFour = new LearnerBuilder()
                              .With(l => l.LearnRefNumber, "LearningRefNumber4")
                              .Build();

            var learnerFive = new LearnerBuilder()
                              .With(l => l.LearnRefNumber, "LearningRefNumber5")
                              .Build();

            var learners = new List <Learner>
            {
                learnerOne,
                learnerTwo,
                learnerThree,
                learnerFour,
                learnerFive
            };

            var relevantLearners = NewBuilder().GetRelevantLearners(learners, payments).ToList();

            relevantLearners.Count().Should().Be(3);
            relevantLearners.Contains(learnerOne.LearnRefNumber).Should().BeTrue();
            relevantLearners.Contains(learnerTwo.LearnRefNumber).Should().BeTrue();
            relevantLearners.Contains(learnerThree.LearnRefNumber).Should().BeTrue();
            relevantLearners.Contains(learnerFour.LearnRefNumber).Should().BeFalse();
            relevantLearners.Contains(learnerFive.LearnRefNumber).Should().BeFalse();
        }
Example #7
0
 private void PopulateLearningDelivery(int ukprn, ILearner learner, ILearningDelivery learningDelivery, int learnerId, int deliveryId, InvalidLearnerData invalidLearnerData)
 {
     invalidLearnerData.RecordsInvalidLearningDeliverys.Add(LearningDeliveryBuilder.BuildInvalidLearningDelivery(ukprn, learner, learningDelivery, learnerId, deliveryId));
 }
        public void BuildEarningsAndPayments()
        {
            var paymentOne = new PaymentBuilder()
                             .With <byte>(p => p.FundingSource, 2)
                             .With <byte>(p => p.TransactionType, 3)
                             .With(p => p.Amount, 10)
                             .With <short>(p => p.AcademicYear, 1920)
                             .With <byte>(p => p.DeliveryPeriod, 1)
                             .With <byte>(p => p.CollectionPeriod, 1).Build();

            var paymentTwo = new PaymentBuilder()
                             .With <byte>(p => p.FundingSource, 2)
                             .With <byte>(p => p.TransactionType, 2)
                             .With(p => p.Amount, 20)
                             .With <short>(p => p.AcademicYear, 1920)
                             .With <byte>(p => p.DeliveryPeriod, 1)
                             .With <byte>(p => p.CollectionPeriod, 1).Build();

            var paymentThree = new PaymentBuilder()
                               .With <byte>(p => p.TransactionType, 1)
                               .With(p => p.Amount, 30)
                               .With <short>(p => p.AcademicYear, 1920)
                               .With <byte>(p => p.DeliveryPeriod, 2)
                               .With <byte>(p => p.CollectionPeriod, 1).Build();

            var paymentFour = new PaymentBuilder()
                              .With <byte>(p => p.TransactionType, 3)
                              .With(p => p.Amount, 40)
                              .With <short>(p => p.AcademicYear, 1920)
                              .With <byte>(p => p.DeliveryPeriod, 2)
                              .With <byte>(p => p.CollectionPeriod, 2).Build();

            var paymentFive = new PaymentBuilder()
                              .With <byte>(p => p.TransactionType, 2)
                              .With(p => p.Amount, 50)
                              .With <short>(p => p.AcademicYear, 2021)
                              .With <byte>(p => p.DeliveryPeriod, 2)
                              .With <byte>(p => p.CollectionPeriod, 1).Build();

            var paymentSix = new PaymentBuilder()
                             .With <byte>(p => p.TransactionType, 3)
                             .With(p => p.Amount, 60)
                             .With <short>(p => p.AcademicYear, 2021)
                             .With <byte>(p => p.DeliveryPeriod, 2)
                             .With <byte>(p => p.CollectionPeriod, 2).Build();

            var allPayments = new List <Payment>()
            {
                paymentOne,
                paymentTwo,
                paymentThree,
                paymentFour,
                paymentFive,
                paymentSix
            };

            var filteredPayments = new List <Payment>()
            {
                paymentThree,
                paymentFour,
                paymentFive,
                paymentSix
            };

            var aecApprenticeshipPriceEpisodePeriodisedValuesOne = new AecPriceEpisodePeriodisedValueBuilder()
                                                                   .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                                                   .With(a => a.AimSeqNumber, 1)
                                                                   .With(a => a.Period1, 10)
                                                                   .With(a => a.Period2, 20)
                                                                   .With(a => a.Period3, 30)
                                                                   .Build();


            var aecApprenticeshipPriceEpisodePeriodisedValuesTwo = new AecPriceEpisodePeriodisedValueBuilder()
                                                                   .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                                                   .With(a => a.AimSeqNumber, 2)
                                                                   .With(a => a.Period1, 10)
                                                                   .Build();
            var aecPriceEpisodePeriodisedValues = new List <AECApprenticeshipPriceEpisodePeriodisedValues>()
            {
                aecApprenticeshipPriceEpisodePeriodisedValuesOne,
                aecApprenticeshipPriceEpisodePeriodisedValuesTwo
            };

            var appFinRecords = new List <AppFinRecord>()
            {
                new AppFindRecordBuilder().With(a => a.AFinCode, 1).With <int>(a => a.AFinAmount, 10).Build(),
                new AppFindRecordBuilder().With(a => a.AFinCode, 2).With <int>(a => a.AFinAmount, 100).Build(),
                new AppFindRecordBuilder().With(a => a.AFinCode, 3).With <int>(a => a.AFinAmount, 20).Build(),
                new AppFindRecordBuilder().With(a => a.AFinDate, new DateTime(2020, 07, 31)).With(a => a.AFinCode, 1)
                .With <int>(a => a.AFinAmount, 100).Build(),
            };

            var learningDelivery = new LearningDeliveryBuilder()
                                   .With(ld => ld.LearnRefNumber, "LearningRefNumber")
                                   .With(a => a.AimSeqNumber, 1)
                                   .With(ld => ld.AppFinRecords, appFinRecords)
                                   .Build();

            var earningsAndPayments = NewBuilder().BuildEarningsAndPayments(filteredPayments, allPayments, learningDelivery,
                                                                            aecPriceEpisodePeriodisedValues, _currentAcademicYear, _academicYearStart, _nextAcademicYearStart, _previousYearClosedReturnPeriod);

            earningsAndPayments.CoInvestmentPaymentsDueFromEmployer.August.Should().Be(50);
            earningsAndPayments.CoInvestmentPaymentsDueFromEmployer.September.Should().Be(60);
            earningsAndPayments.CompletionEarningThisFundingYear.Should().Be(60);
            earningsAndPayments.CompletionPaymentsThisFundingYear.Should().Be(50);
            earningsAndPayments.TotalCoInvestmentDueFromEmployerInPreviousFundingYears.Should().Be(70);
            earningsAndPayments.TotalCoInvestmentDueFromEmployerThisFundingYear.Should().Be(110);
            earningsAndPayments.TotalPMRPreviousFundingYears.Should().Be(100);
            earningsAndPayments.TotalPMRThisFundingYear.Should().Be(90);
            earningsAndPayments.EmployerCoInvestmentPercentage.Should().Be(10.00m);
            Math.Round(earningsAndPayments.PercentageOfCoInvestmentCollected, 2).Should().Be(105.56m);
        }
 private void PopulateLearningDelivery(int ukprn, ILearner learner, ILearningDelivery learningDelivery, ValidLearnerData validLearnerData)
 {
     validLearnerData.RecordsValidLearningDeliverys.Add(LearningDeliveryBuilder.BuildValidLearningDelivery(ukprn, learner, learningDelivery));
 }