public EarningPeriodsValidationProcessor(ICourseValidationProcessor courseValidationProcessor, IFunctionalSkillValidationProcessor functionalSkillValidationProcessor, ICalculatePeriodStartAndEndDate calculatePeriodStartAndEndDate) { this.courseValidationProcessor = courseValidationProcessor ?? throw new ArgumentNullException(nameof(courseValidationProcessor)); this.functionalSkillValidationProcessor = functionalSkillValidationProcessor ?? throw new ArgumentNullException(nameof(functionalSkillValidationProcessor)); this.calculatePeriodStartAndEndDate = calculatePeriodStartAndEndDate ?? throw new ArgumentNullException(nameof(calculatePeriodStartAndEndDate)); }
public OnProgrammeAndIncentiveEarningPeriodsValidationProcessor( IStartDateValidator startDateValidator, IOnProgrammeAndIncentiveStoppedValidator onProgrammeAndIncentiveStoppedValidator, ICompletionStoppedValidator completionStoppedValidator, ICourseValidationProcessor courseValidationProcessor) { this.startDateValidator = startDateValidator; this.onProgrammeAndIncentiveStoppedValidator = onProgrammeAndIncentiveStoppedValidator; this.completionStoppedValidator = completionStoppedValidator; this.courseValidationProcessor = courseValidationProcessor; }
private (List <EarningPeriod> ValidPeriods, List <EarningPeriod> InValidPeriods) ValidateEarningPeriods( long ukprn, long uln, List <PriceEpisode> priceEpisodes, List <EarningPeriod> periods, TransactionType transactionType, List <ApprenticeshipModel> apprenticeships, LearningAim aim, int academicYear, ICourseValidationProcessor processor) { var validPeriods = new List <EarningPeriod>(); var invalidPeriods = new List <EarningPeriod>(); foreach (var period in periods) { if (period.Amount == decimal.Zero) { validPeriods.Add(period); continue; } var apprenticeshipsToUseThisPeriod = GetApprenticeshipsToUseThisPeriod(ukprn, apprenticeships, academicYear, period); if (!apprenticeshipsToUseThisPeriod.Any()) { continue; } foreach (var apprenticeship in apprenticeshipsToUseThisPeriod) { var validationModel = new DataLockValidationModel { EarningPeriod = period, Apprenticeship = apprenticeship, PriceEpisode = IsFunctionalSkillTransactionType(transactionType) ? null : priceEpisodes.SingleOrDefault(o => o.Identifier.Equals(period.PriceEpisodeIdentifier, StringComparison.OrdinalIgnoreCase)) ?? throw new InvalidOperationException($"Failed to find price episode: {period.PriceEpisodeIdentifier} for uln: {uln}, earning: {transactionType:G}, period: {period.Period}"), TransactionType = transactionType, Aim = aim, AcademicYear = academicYear }; var validationResult = processor.ValidateCourse(validationModel); var newEarningPeriod = CreateEarningPeriod(period); if (validationResult.DataLockFailures.Any()) { var invalidPeriod = invalidPeriods.FirstOrDefault(x => x.Period == period.Period); if (invalidPeriod == null) { newEarningPeriod.DataLockFailures = validationResult.DataLockFailures; invalidPeriods.Add(newEarningPeriod); } else { invalidPeriod.DataLockFailures.AddRange(validationResult.DataLockFailures); } } else { newEarningPeriod.AccountId = apprenticeship.AccountId; newEarningPeriod.ApprenticeshipId = apprenticeship.Id; newEarningPeriod.ApprenticeshipPriceEpisodeId = validationResult.MatchedPriceEpisode.Id; newEarningPeriod.TransferSenderAccountId = apprenticeship.TransferSendingEmployerAccountId; newEarningPeriod.Priority = apprenticeship.Priority; newEarningPeriod.AgreedOnDate = apprenticeship.AgreedOnDate; newEarningPeriod.ApprenticeshipEmployerType = apprenticeship.ApprenticeshipEmployerType; validPeriods.Add(newEarningPeriod); } } } return(validPeriods, invalidPeriods); }