/// <summary>
 /// Determines whether the specified delivery is excluded.
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if the specified delivery is excluded; otherwise, <c>false</c>.
 /// </returns>
 public bool IsExcluded(ILearningDelivery delivery)
 {
     return(IsApprenticeship(delivery) && (IsProgrammeAim(delivery) || IsCorePartOfAProgramme(delivery)));
 }
Ejemplo n.º 2
0
 public bool Exclude(ILearningDelivery learningDelivery)
 {
     return(_learningDeliveryFAMQueryService.HasLearningDeliveryFAMCodeForType(learningDelivery.LearningDeliveryFAMs, LearningDeliveryFAMTypeConstants.ACT, "1"));
 }
        public TimeSpan SixtyDays => new TimeSpan(60, 0, 0, 0); // 60 days

        /// <summary>
        /// Determines whether [is qualifying programme] [the specified delivery].
        /// </summary>
        /// <param name="delivery">The delivery.</param>
        /// <returns>
        ///   <c>true</c> if [is qualifying programme] [the specified delivery]; otherwise, <c>false</c>.
        /// </returns>
        public bool IsQualifyingProgramme(ILearningDelivery delivery) =>
        It.IsInRange(delivery.ProgTypeNullable, TypeOfLearningProgramme.Traineeship);
 /// <summary>
 /// Determines whether [is in a programme] [the specified delivery].
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if [is in a programme] [the specified delivery]; otherwise, <c>false</c>.
 /// </returns>
 public bool IsInAProgramme(ILearningDelivery delivery) =>
 It.IsInRange(delivery.AimType, TypeOfAim.ProgrammeAim);
 public bool IsQualifyingDelivery(ILearningDelivery thisDelivery) =>
 !_learningDeliveryFAMQueryService.HasLearningDeliveryFAMType(thisDelivery.LearningDeliveryFAMs, LearningDeliveryFAMTypeConstants.RES);
Ejemplo n.º 6
0
        public void ValidItemDoesNotRaiseValidationMessage(int tnpTotal, int fundingCap, params int[] recordPairs)
        {
            const string LearnRefNumber = "123456789X";
            const int    testStdCode    = 234;

            var records = new List <IAppFinRecord>();

            for (var i = 0; i < recordPairs.Length; i += 2)
            {
                var temp = new Mock <IAppFinRecord>();
                temp.SetupGet(x => x.AFinType).Returns("PMR");
                temp.SetupGet(x => x.AFinCode).Returns(recordPairs[i]);
                temp.SetupGet(x => x.AFinAmount).Returns(recordPairs[i + 1]);

                records.Add(temp.Object);
            }

            var delivery = new Mock <ILearningDelivery>(MockBehavior.Strict);

            delivery
            .SetupGet(x => x.StdCodeNullable)
            .Returns(testStdCode);
            delivery
            .SetupGet(x => x.AppFinRecords)
            .Returns(records);
            delivery
            .SetupGet(x => x.AimType)
            .Returns(1);
            delivery
            .SetupGet(y => y.FundModel)
            .Returns(81);
            delivery
            .SetupGet(x => x.ProgTypeNullable)
            .Returns(25);

            var deliveries = new ILearningDelivery[] { delivery.Object };

            var mockLearner = new Mock <ILearner>();

            mockLearner
            .SetupGet(x => x.LearnRefNumber)
            .Returns(LearnRefNumber);
            mockLearner
            .SetupGet(x => x.LearningDeliveries)
            .Returns(deliveries);

            var handler = new Mock <IValidationErrorHandler>(MockBehavior.Strict);

            var derivedData = new Mock <IDerivedData_17Rule>(MockBehavior.Strict);

            derivedData
            .Setup(x => x.IsTNPMoreThanContributionCapFor(testStdCode, Moq.It.IsAny <IReadOnlyCollection <ILearningDelivery> >()))
            .Returns(true);
            derivedData
            .Setup(x => x.GetTotalTNPPriceFor(deliveries))
            .Returns(tnpTotal);
            derivedData
            .Setup(x => x.GetFundingContributionCapFor(testStdCode, Moq.It.IsAny <IReadOnlyCollection <ILearningDelivery> >()))
            .Returns(fundingCap);

            var sut = new R73Rule(handler.Object, derivedData.Object);

            sut.Validate(mockLearner.Object);

            handler.VerifyAll();
            derivedData.VerifyAll();
        }
 /// <summary>
 /// Determines whether [is not valid] [the specified learner].
 /// </summary>
 /// <param name="learner">The learner.</param>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if [is not valid] [the specified learner]; otherwise, <c>false</c>.
 /// </returns>
 public bool IsNotValid(ILearner learner, ILearningDelivery delivery) =>
 (IsApprenticeship(delivery) || InTraining(delivery)) &&
 IsInAProgramme(delivery) &&
 HasAViableStart(delivery) &&
 !HasAQualifyingEmploymentStatus(learner, delivery);
 public bool ConditionMet(DateTime?dateOfBirth, ILearningDelivery learningDelivery)
 {
     return(FundModelConditionMet(learningDelivery.FundModel) &&
            DateOfBirthConditionMet(dateOfBirth, learningDelivery.LearnStartDate) &&
            LearningDeliveryFAMConditionMet(learningDelivery.LearningDeliveryFAMs));
 }
 public bool LearningDeliveryFilter(ILearningDelivery learningDelivery)
 {
     return(learningDelivery != null && LdmLearningDeliveryFilter(learningDelivery));
 }
 public bool HasWithdrawn(ILearningDelivery delivery) =>
 delivery.CompStatus == CompletionState.HasWithdrawn;
 public bool HasWithdrawReason(ILearningDelivery delivery) =>
 delivery.WithdrawReasonNullable.HasValue;
 /// <summary>
 /// Determines whether the specified delivery is apprenticeship.
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if the specified delivery is apprenticeship; otherwise, <c>false</c>.
 /// </returns>
 public bool IsApprenticeship(ILearningDelivery delivery) =>
 It.IsInRange(delivery.FundModel, TypeOfFunding.ApprenticeshipsFrom1May2017);
 /// <summary>
 /// Determines whether [is apprenticeship contract] [the specified delivery].
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if [is apprenticeship contract] [the specified delivery]; otherwise, <c>false</c>.
 /// </returns>
 public bool IsApprenticeshipContract(ILearningDelivery delivery) =>
 CheckDeliveryFAMs(delivery, IsApprenticeshipContract);
 /// <summary>
 /// Checks the delivery fams.
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <param name="matchCondition">The match condition.</param>
 /// <returns>true if any of the delivery fams match the condition</returns>
 public bool CheckDeliveryFAMs(ILearningDelivery delivery, Func <ILearningDeliveryFAM, bool> matchCondition) =>
 delivery.LearningDeliveryFAMs.SafeAny(matchCondition);
 public void RaiseValidationMessage(string learnRefNumber, ILearningDelivery theDelivery) =>
 HandleValidationError(learnRefNumber, theDelivery.AimSeqNumber, BuildMessageParametersFor(theDelivery));
Ejemplo n.º 16
0
        public void InvalidItemRaisesValidationMessage()
        {
            const string LearnRefNumber   = "123456789X";
            var          firstViableStart = DateTime.Parse("2017-05-01");

            var delivery = new Mock <ILearningDelivery>();

            delivery
            .SetupGet(y => y.LearnStartDate)
            .Returns(DateTime.Parse("2017-04-01"));
            delivery
            .SetupGet(y => y.FundModel)
            .Returns(36);

            var deliveries = new ILearningDelivery[] { delivery.Object };

            var learner = new Mock <ILearner>();

            learner
            .SetupGet(x => x.LearnRefNumber)
            .Returns(LearnRefNumber);
            learner
            .SetupGet(x => x.LearningDeliveries)
            .Returns(deliveries);

            var handler = new Mock <IValidationErrorHandler>(MockBehavior.Strict);

            handler
            .Setup(x => x.Handle(RuleNameConstants.UKPRN_10, LearnRefNumber, 0, It.IsAny <IEnumerable <IErrorMessageParameter> >()));
            handler
            .Setup(x => x.BuildErrorMessageParameter("UKPRN", TestProviderID))
            .Returns(new Mock <IErrorMessageParameter>().Object);
            handler
            .Setup(x => x.BuildErrorMessageParameter("FundModel", 36))
            .Returns(new Mock <IErrorMessageParameter>().Object);
            handler
            .Setup(x => x.BuildErrorMessageParameter("LearnDelFAMType", "ACT"))
            .Returns(new Mock <IErrorMessageParameter>().Object);
            handler
            .Setup(x => x.BuildErrorMessageParameter("LearnDelFAMCode", "1"))
            .Returns(new Mock <IErrorMessageParameter>().Object);

            var learningDeliveryFAMQS = new Mock <ILearningDeliveryFAMQueryService>(MockBehavior.Strict);

            learningDeliveryFAMQS
            .Setup(x => x.HasLearningDeliveryFAMCodeForType(
                       delivery.Object.LearningDeliveryFAMs,
                       "ACT",
                       "1"))
            .Returns(true);

            var fileData = new Mock <IFileDataService>(MockBehavior.Strict);

            fileData
            .Setup(x => x.UKPRN())
            .Returns(TestProviderID);

            var academicYear = new Mock <IAcademicYearDataService>(MockBehavior.Strict);

            academicYear
            .Setup(x => x.Start())
            .Returns(TestStartDate);

            var fcsData = new Mock <IFCSDataService>(MockBehavior.Strict);

            fcsData
            .Setup(x => x.GetContractAllocationsFor(TestProviderID))
            .Returns(new IFcsContractAllocation[] { });

            var dateTimeQS = new Mock <IDateTimeQueryService>(MockBehavior.Strict);

            dateTimeQS
            .Setup(x => x.IsDateBetween(delivery.Object.LearnStartDate, firstViableStart, DateTime.MaxValue, true))
            .Returns(true);

            var sut = new UKPRN_10Rule(handler.Object, fileData.Object, academicYear.Object, learningDeliveryFAMQS.Object, fcsData.Object, dateTimeQS.Object);

            sut.Validate(learner.Object);

            handler.VerifyAll();
            learningDeliveryFAMQS.VerifyAll();
            fileData.VerifyAll();
            academicYear.VerifyAll();
            fcsData.VerifyAll();
        }
 /// <summary>
 /// Determines whether the specified delivery is viable.
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if the specified delivery is viable; otherwise, <c>false</c>.
 /// </returns>
 public bool IsViable(ILearningDelivery delivery) =>
 TypeOfLearningProgramme.IsViableApprenticeship(delivery.LearnStartDate);
Ejemplo n.º 18
0
        public void ValidItemDoesNotRaiseValidationMessage(string candidate)
        {
            const string LearnRefNumber   = "123456789X";
            var          firstViableStart = DateTime.Parse("2017-05-01");

            var delivery = new Mock <ILearningDelivery>();

            delivery
            .SetupGet(y => y.LearnStartDate)
            .Returns(DateTime.Parse("2017-04-01"));
            delivery
            .SetupGet(y => y.FundModel)
            .Returns(36);

            var deliveries = new ILearningDelivery[] { delivery.Object };

            var learner = new Mock <ILearner>();

            learner
            .SetupGet(x => x.LearnRefNumber)
            .Returns(LearnRefNumber);
            learner
            .SetupGet(x => x.LearningDeliveries)
            .Returns(deliveries);

            var handler = new Mock <IValidationErrorHandler>(MockBehavior.Strict);

            var learningDeliveryFAMQS = new Mock <ILearningDeliveryFAMQueryService>(MockBehavior.Strict);

            learningDeliveryFAMQS
            .Setup(x => x.HasLearningDeliveryFAMCodeForType(
                       delivery.Object.LearningDeliveryFAMs,
                       "ACT",
                       "1"))
            .Returns(true);

            var fileData = new Mock <IFileDataService>(MockBehavior.Strict);

            fileData
            .Setup(x => x.UKPRN())
            .Returns(TestProviderID);

            var academicYear = new Mock <IAcademicYearDataService>(MockBehavior.Strict);

            academicYear
            .Setup(x => x.Start())
            .Returns(TestStartDate);

            var allocation = new Mock <IFcsContractAllocation>(MockBehavior.Strict);

            allocation
            .SetupGet(x => x.FundingStreamPeriodCode)
            .Returns(candidate);

            var fcsData = new Mock <IFCSDataService>(MockBehavior.Strict);

            fcsData
            .Setup(x => x.GetContractAllocationsFor(TestProviderID))
            .Returns(new IFcsContractAllocation[] { allocation.Object });

            var dateTimeQS = new Mock <IDateTimeQueryService>(MockBehavior.Strict);

            dateTimeQS
            .Setup(x => x.IsDateBetween(delivery.Object.LearnStartDate, firstViableStart, DateTime.MaxValue, true))
            .Returns(true);

            var sut = new UKPRN_10Rule(handler.Object, fileData.Object, academicYear.Object, learningDeliveryFAMQS.Object, fcsData.Object, dateTimeQS.Object);

            sut.Validate(learner.Object);

            handler.VerifyAll();
            learningDeliveryFAMQS.VerifyAll();
            fileData.VerifyAll();
            academicYear.VerifyAll();
            fcsData.VerifyAll();
        }
 /// <summary>
 /// Determines whether [has a qualifying employment status] [the specified learner].
 /// </summary>
 /// <param name="learner">The learner.</param>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if [has qualifying employment status] [the specified learner]; otherwise, <c>false</c>.
 /// </returns>
 public bool HasAQualifyingEmploymentStatus(ILearner learner, ILearningDelivery delivery) =>
 learner.LearnerEmploymentStatuses.SafeAny(x => HasAQualifyingEmploymentStatus(x, delivery.LearnStartDate));
 public bool IsNotValid(ILearningDelivery theDelivery) =>
 HasNoRestartFamType(theDelivery.LearningDeliveryFAMs) &&
 HasQualifyingModel(theDelivery) &&
 IsTraineeship(theDelivery) &&
 IsESFAAdultFunding(theDelivery) &&
 HasDisQualifyingFundingRelationship(x => HasStartedAfterStopDate(x, theDelivery));
 /// <summary>
 /// Determines whether the specified delivery is apprenticeship.
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if the specified delivery is apprenticeship; otherwise, <c>false</c>.
 /// </returns>
 public bool IsApprenticeship(ILearningDelivery delivery) =>
 _derivedData07.IsApprenticeship(delivery.ProgTypeNullable);
 public bool HasQualifyingModel(ILearningDelivery theDelivery) =>
 theDelivery.FundModel == FundModels.Age16To19ExcludingApprenticeships;
 /// <summary>
 /// Determines whether [has a viable start] [the specified delivery].
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if [has a viable start] [the specified delivery]; otherwise, <c>false</c>.
 /// </returns>
 public bool HasAViableStart(ILearningDelivery delivery) =>
 delivery.LearnStartDate > LastInviableDate;
 public bool IsTraineeship(ILearningDelivery theDelivery) =>
 theDelivery.ProgTypeNullable == ProgTypes.Traineeship;
 public void CheckDeliveryFAMs(ILearningDelivery learningDelivery, Action <ILearningDeliveryFAM> raiseMessage)
 {
     learningDelivery.LearningDeliveryFAMs
     .ForAny(x => IsNotCurrent(x, learningDelivery.LearnStartDate), raiseMessage);
 }
 public bool IsESFAAdultFunding(ILearningDelivery theDelivery) =>
 _learningDeliveryFAMQueryService.HasLearningDeliveryFAMCodeForType(
     theDelivery.LearningDeliveryFAMs,
     LearningDeliveryFAMTypeConstants.SOF,
     LearningDeliveryFAMCodeConstants.SOF_ESFA_Adult);
 /// <summary>
 /// Raises the validation message.
 /// </summary>
 /// <param name="learnRefNumber">The learn reference number.</param>
 /// <param name="thisDelivery">this delivery.</param>
 public void RaiseValidationMessage(string learnRefNumber, ILearningDelivery thisDelivery)
 {
     HandleValidationError(learnRefNumber, thisDelivery.AimSeqNumber, BuildErrorMessageParameters());
 }
 public bool HasStartedAfterStopDate(IFcsContractAllocation theAllocation, ILearningDelivery theDelivery) =>
 theDelivery.LearnStartDate >= theAllocation.StopNewStartsFromDate;
 /// <summary>
 /// Determines whether [is not valid] [the specified delivery].
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if [is not valid] [the specified delivery]; otherwise, <c>false</c>.
 /// </returns>
 public bool IsNotValid(ILearningDelivery delivery) =>
 IsQualifyingProgramme(delivery) &&
 delivery.LearningDeliveryWorkPlacements.SafeAny(IsNotValid);
 /// <summary>
 /// Determines whether [is core part of a programme] [the specified delivery].
 /// </summary>
 /// <param name="delivery">The delivery.</param>
 /// <returns>
 ///   <c>true</c> if [is core part of a programme] [the specified delivery]; otherwise, <c>false</c>.
 /// </returns>
 public bool IsCorePartOfAProgramme(ILearningDelivery delivery) =>
 IsComponentAim(delivery) && IsBasicSkillsLearner(delivery);