private async Task GenerateRowsAsync(IMessage ilrFile, FM36Global fm36Data, List <string> validLearners, List <AppsIndicativeEarningsModel> appsIndicativeEarningsModels, CancellationToken cancellationToken) { ILearner[] learners = ilrFile.Learners.Where(x => validLearners.Contains(x.LearnRefNumber)).ToArray(); string[] learnAimRefs = learners.SelectMany(x => x.LearningDeliveries).Select(x => x.LearnAimRef).Distinct().ToArray(); Dictionary <string, LarsLearningDelivery> larsLearningDeliveries = await _larsProviderService.GetLearningDeliveriesAsync(learnAimRefs, cancellationToken); foreach (ILearner learner in learners) { FM36Learner fm36Learner = fm36Data?.Learners?.SingleOrDefault(x => string.Equals(x.LearnRefNumber, learner.LearnRefNumber, StringComparison.OrdinalIgnoreCase)); foreach (ILearningDelivery learningDelivery in learner.LearningDeliveries) { if (learningDelivery.FundModel != 36) { continue; } string larsStandard = null; if (learningDelivery.StdCodeNullable != null) { larsStandard = await _larsProviderService.GetStandardAsync( learningDelivery.StdCodeNullable.Value, cancellationToken); } LarsLearningDelivery larsDelivery = larsLearningDeliveries.SingleOrDefault(x => string.Equals(x.Key, learningDelivery.LearnAimRef, StringComparison.OrdinalIgnoreCase)).Value; LearningDelivery fm36LearningDelivery = fm36Learner?.LearningDeliveries ?.SingleOrDefault(x => x.AimSeqNumber == learningDelivery.AimSeqNumber); if (fm36Learner?.PriceEpisodes.Any() ?? false) { List <PriceEpisode> episodesInRange = fm36Learner.PriceEpisodes .Where(p => p.PriceEpisodeValues.EpisodeStartDate >= Constants.BeginningOfYear && p.PriceEpisodeValues.EpisodeStartDate <= Constants.EndOfYear && learningDelivery.AimSeqNumber == p.PriceEpisodeValues.PriceEpisodeAimSeqNumber).ToList(); if (episodesInRange.Any()) { DateTime earliestEpisodeDate = episodesInRange.Select(x => x.PriceEpisodeValues.EpisodeStartDate ?? DateTime.MaxValue).Min(); bool earliestEpisode = false; foreach (PriceEpisode episodeAttribute in episodesInRange) { if (episodeAttribute.PriceEpisodeValues.EpisodeStartDate == earliestEpisodeDate) { earliestEpisode = true; } appsIndicativeEarningsModels.Add( _modelBuilder.BuildModel( learner, learningDelivery, fm36LearningDelivery, episodeAttribute, larsDelivery, larsStandard, earliestEpisode, true)); earliestEpisode = false; } continue; } } appsIndicativeEarningsModels.Add( _modelBuilder.BuildModel( learner, learningDelivery, fm36LearningDelivery, null, larsDelivery, larsStandard, false, false)); } } appsIndicativeEarningsModels.Sort(AppsIndicativeEarningsModelComparer); }
public async Task GenerateReport(IReportServiceContext reportServiceContext, ZipArchive archive, bool isFis, CancellationToken cancellationToken) { Task <IMessage> ilrFileTask = _ilrProviderService.GetIlrFile(reportServiceContext, cancellationToken); Task <FM81Global> fm81Task = _fm81TrailBlazerProviderService.GetFM81Data(reportServiceContext, cancellationToken); Task <List <string> > validLearnersTask = _validLearnersService.GetLearnersAsync(reportServiceContext, cancellationToken); await Task.WhenAll(ilrFileTask, fm81Task, validLearnersTask); if (cancellationToken.IsCancellationRequested) { return; } List <ILearner> learners = ilrFileTask.Result?.Learners?.Where(x => validLearnersTask.Result.Contains(x.LearnRefNumber)).ToList(); if (learners == null) { _logger.LogWarning("Failed to get learners for Trailblazer Apprenticeships Occupancy Report"); return; } string[] learnAimRefs = learners.SelectMany(x => x.LearningDeliveries).Select(x => x.LearnAimRef).Distinct().ToArray(); Dictionary <string, LarsLearningDelivery> larsLearningDeliveries = await _larsProviderService.GetLearningDeliveriesAsync(learnAimRefs, cancellationToken); var fm81Data = fm81Task.Result; var trailblazerAppsOccupancyModels = new List <TrailblazerAppsOccupancyModel>(); foreach (var learner in learners) { FM81Learner fm81Learner = fm81Data?.Learners?.SingleOrDefault(x => string.Equals(x.LearnRefNumber, learner.LearnRefNumber, StringComparison.OrdinalIgnoreCase)); foreach (ILearningDelivery learningDelivery in learner.LearningDeliveries) { if (!CheckIsApplicableLearner(learningDelivery)) { continue; } LarsLearningDelivery larsDelivery = larsLearningDeliveries.SingleOrDefault(x => string.Equals(x.Key, learningDelivery.LearnAimRef, StringComparison.OrdinalIgnoreCase)).Value; LearningDelivery ruleBaseLearningDelivery = fm81Learner?.LearningDeliveries ?.SingleOrDefault(x => x.AimSeqNumber == learningDelivery.AimSeqNumber); trailblazerAppsOccupancyModels.Add(_trailblazerAppsOccupancyModelBuilder .BuildTrailblazerAppsOccupancyModel( learner, learningDelivery, larsDelivery, ruleBaseLearningDelivery)); } } trailblazerAppsOccupancyModels.Sort(new TrailblazerAppsOccupancyModelComparer()); var csv = GetReportCsv(trailblazerAppsOccupancyModels); var jobId = reportServiceContext.JobId; var ukPrn = reportServiceContext.Ukprn.ToString(); var externalFileName = GetExternalFilename(ukPrn, jobId, reportServiceContext.SubmissionDateTimeUtc); var fileName = GetFilename(ukPrn, jobId, reportServiceContext.SubmissionDateTimeUtc); await _streamableKeyValuePersistenceService.SaveAsync($"{externalFileName}.csv", csv, cancellationToken); await WriteZipEntry(archive, $"{fileName}.csv", csv); }
public TrailblazerAppsOccupancyModel BuildTrailblazerAppsOccupancyModel( ILearner learner, ILearningDelivery learningDelivery, LarsLearningDelivery larsModel, LearningDelivery ruleBaseLearningDelivery) { List <IAppFinRecord> currentYearData = learningDelivery.AppFinRecords? .Where(x => x.AFinDate >= Constants.BeginningOfYear && x.AFinDate <= Constants.EndOfYear && string.Equals(x.AFinType, "PMR", StringComparison.OrdinalIgnoreCase)).ToList(); List <IAppFinRecord> previousYearData = learningDelivery.AppFinRecords? .Where(x => x.AFinDate <= Constants.BeginningOfYear && string.Equals(x.AFinType, "PMR", StringComparison.OrdinalIgnoreCase)).ToList(); var returnModel = new TrailblazerAppsOccupancyModel() { LearnRefNumber = learner.LearnRefNumber, UniqueLearnerNumber = learner.ULN, DateOfBirth = learner.DateOfBirthNullable?.ToString("dd/MM/yyyy"), PMUkPrn = learner.PMUKPRNNullable, CampId = learner.CampId, ProvSpecLearnMonA = learner.ProviderSpecLearnerMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "A", StringComparison.OrdinalIgnoreCase)) ?.ProvSpecLearnMon, ProvSpecLearnMonB = learner.ProviderSpecLearnerMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "B", StringComparison.OrdinalIgnoreCase)) ?.ProvSpecLearnMon, AimSeqNumber = learningDelivery.AimSeqNumber, LearnAimRef = learningDelivery.LearnAimRef, LearnAimRefTitle = larsModel.LearningAimTitle, SwSupAimId = learningDelivery.SWSupAimId, NotionalNvqLevelV2 = larsModel.NotionalNvqLevel, AimType = learningDelivery.AimType, StdCode = learningDelivery.StdCodeNullable, FundModel = learningDelivery.FundModel, PriorLearnFundAdj = learningDelivery.PriorLearnFundAdjNullable, OtherFundAdj = learningDelivery.OtherFundAdjNullable, OrigLearnStartDate = learningDelivery.OrigLearnStartDateNullable, LearnStartDate = learningDelivery.LearnStartDate, LearnPlanEndDate = learningDelivery.LearnPlanEndDate, CompStatus = learningDelivery.CompStatus, LearnActEndDate = learningDelivery.LearnActEndDateNullable, Outcome = learningDelivery.OutcomeNullable, AchDate = learningDelivery.AchDateNullable, LearnDelFamCodeSof = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, Constants.LearningDeliveryFAMCodeSOF, StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMCode, LearnDelFamCodeEef = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "EEF", StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMCode, LearnDelFamCodeLsfHighest = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, Constants.LearningDeliveryFAMCodeLSF, StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMCode, LearnDelFamCodeLsfEarliest = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, Constants.LearningDeliveryFAMCodeLSF, StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMDateFromNullable, LearnDelFamCodeLsfLatest = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, Constants.LearningDeliveryFAMCodeLSF, StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMDateToNullable, LearnDelMonA = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "LDM1", StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMCode, LearnDelMonB = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "LDM2", StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMCode, LearnDelMonC = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "LDM3", StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMCode, LearnDelMonD = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "LDM4", StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMCode, LearnDelMonRestartIndicator = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "RES", StringComparison.OrdinalIgnoreCase)) ?.LearnDelFAMCode, ProvSpecDelMonA = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault( x => string.Equals(x.ProvSpecDelMonOccur, "A", StringComparison.OrdinalIgnoreCase)) ?.ProvSpecDelMon, ProvSpecDelMonB = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault( x => string.Equals(x.ProvSpecDelMonOccur, "B", StringComparison.OrdinalIgnoreCase)) ?.ProvSpecDelMon, ProvSpecDelMonC = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault( x => string.Equals(x.ProvSpecDelMonOccur, "C", StringComparison.OrdinalIgnoreCase)) ?.ProvSpecDelMon, ProvSpecDelMonD = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault( x => string.Equals(x.ProvSpecDelMonOccur, "D", StringComparison.OrdinalIgnoreCase)) ?.ProvSpecDelMon, EpaOrgID = learningDelivery.EPAOrgID, PartnerUKPRN = learningDelivery.PartnerUKPRNNullable, DelLocPostCode = learningDelivery.DelLocPostCode, CoreGovContCapApplicVal = ruleBaseLearningDelivery?.LearningDeliveryValues?.CoreGovContCapApplicVal, SmallBusApplicVal = ruleBaseLearningDelivery?.LearningDeliveryValues?.SmallBusApplicVal, YoungAppApplicVal = ruleBaseLearningDelivery?.LearningDeliveryValues?.YoungAppApplicVal, AchievementApplicVal = ruleBaseLearningDelivery?.LearningDeliveryValues?.AchievementApplicVal, ApplicFundValDate = ruleBaseLearningDelivery?.LearningDeliveryValues?.ApplicFundValDate, FundLine = ruleBaseLearningDelivery?.LearningDeliveryValues?.FundLine, EmpIdFirstDayStandard = ruleBaseLearningDelivery?.LearningDeliveryValues?.EmpIdFirstDayStandard, EmpIdSmallBusDate = ruleBaseLearningDelivery?.LearningDeliveryValues?.EmpIdSmallBusDate, EmpIdFirstYoungAppDate = ruleBaseLearningDelivery?.LearningDeliveryValues?.EmpIdFirstYoungAppDate, EmpIdSecondYoungAppDate = ruleBaseLearningDelivery?.LearningDeliveryValues?.EmpIdSecondYoungAppDate, EmpIdAchDate = ruleBaseLearningDelivery?.LearningDeliveryValues?.EmpIdAchDate, MathEngLSFFundStart = ruleBaseLearningDelivery?.LearningDeliveryValues?.MathEngLSFFundStart, AgeStandardStart = ruleBaseLearningDelivery?.LearningDeliveryValues?.AgeStandardStart, YoungAppEligible = ruleBaseLearningDelivery?.LearningDeliveryValues?.YoungAppEligible, SmallBusEligible = ruleBaseLearningDelivery?.LearningDeliveryValues?.SmallBusEligible, AchApplicDate = ruleBaseLearningDelivery?.LearningDeliveryValues?.AchApplicDate }; if (learningDelivery.AimType == 1) { returnModel.TotalNegotiatedPrice1 = learningDelivery.AppFinRecords? .Where(x => string.Equals(x.AFinType, "TNP", StringComparison.OrdinalIgnoreCase) && x.AFinCode == 1).OrderByDescending(x => x.AFinDate).FirstOrDefault().AFinAmount; returnModel.TotalNegotiatedPrice1 = learningDelivery.AppFinRecords? .Where(x => string.Equals(x.AFinType, "TNP", StringComparison.OrdinalIgnoreCase) && x.AFinCode == 2).OrderByDescending(x => x.AFinDate).FirstOrDefault().AFinAmount; } returnModel.PMRSumBeforeFundingYear = previousYearData?.Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - previousYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); var coreGovContPaymentList = ruleBaseLearningDelivery?.LearningDeliveryPeriodisedValues.Where(l => string.Equals(l.AttributeName, Constants.Fm81CoreGovContPayment, StringComparison.OrdinalIgnoreCase)).ToList(); var mathEngOnProgPaymentList = ruleBaseLearningDelivery?.LearningDeliveryPeriodisedValues.Where(l => string.Equals(l.AttributeName, Constants.Fm81MathEngOnProgPayment, StringComparison.OrdinalIgnoreCase)).ToList(); var mathEngBalPaymentList = ruleBaseLearningDelivery?.LearningDeliveryPeriodisedValues.Where(l => string.Equals(l.AttributeName, Constants.Fm81MathEngBalPayment, StringComparison.OrdinalIgnoreCase)).ToList(); var learnSuppFundCashList = ruleBaseLearningDelivery?.LearningDeliveryPeriodisedValues.Where(l => string.Equals(l.AttributeName, Constants.Fm81LearnSuppFundCash, StringComparison.OrdinalIgnoreCase)).ToList(); var smallBusPaymentList = ruleBaseLearningDelivery?.LearningDeliveryPeriodisedValues.Where(l => string.Equals(l.AttributeName, Constants.Fm81MathEngOnProgPayment, StringComparison.OrdinalIgnoreCase)).ToList(); var youngAppPaymentList = ruleBaseLearningDelivery?.LearningDeliveryPeriodisedValues.Where(l => string.Equals(l.AttributeName, Constants.Fm81MathEngBalPayment, StringComparison.OrdinalIgnoreCase)).ToList(); var achPaymentList = ruleBaseLearningDelivery?.LearningDeliveryPeriodisedValues.Where(l => string.Equals(l.AttributeName, Constants.Fm81MathEngBalPayment, StringComparison.OrdinalIgnoreCase)).ToList(); returnModel.Period1CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period1) ?? decimal.Zero; returnModel.Period1MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period1) ?? decimal.Zero; returnModel.Period1MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period1) ?? decimal.Zero; returnModel.Period1LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period1) ?? decimal.Zero; returnModel.Period1SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period1) ?? decimal.Zero; returnModel.Period1YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period1) ?? decimal.Zero; returnModel.Period1AchPayment = achPaymentList?.Sum(x => x.Period1) ?? decimal.Zero; returnModel.Period2CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period2) ?? decimal.Zero; returnModel.Period2MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period2) ?? decimal.Zero; returnModel.Period2MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period2) ?? decimal.Zero; returnModel.Period2LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period2) ?? decimal.Zero; returnModel.Period2SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period2) ?? decimal.Zero; returnModel.Period2YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period2) ?? decimal.Zero; returnModel.Period2AchPayment = achPaymentList?.Sum(x => x.Period2) ?? decimal.Zero; returnModel.Period3CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period3) ?? decimal.Zero; returnModel.Period3MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period3) ?? decimal.Zero; returnModel.Period3MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period3) ?? decimal.Zero; returnModel.Period3LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period3) ?? decimal.Zero; returnModel.Period3SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period3) ?? decimal.Zero; returnModel.Period3YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period3) ?? decimal.Zero; returnModel.Period3AchPayment = achPaymentList?.Sum(x => x.Period3) ?? decimal.Zero; returnModel.Period4CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period4) ?? decimal.Zero; returnModel.Period4MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period4) ?? decimal.Zero; returnModel.Period4MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period4) ?? decimal.Zero; returnModel.Period4LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period4) ?? decimal.Zero; returnModel.Period4SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period4) ?? decimal.Zero; returnModel.Period4YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period4) ?? decimal.Zero; returnModel.Period4AchPayment = achPaymentList?.Sum(x => x.Period4) ?? decimal.Zero; returnModel.Period5CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period5) ?? decimal.Zero; returnModel.Period5MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period5) ?? decimal.Zero; returnModel.Period5MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period5) ?? decimal.Zero; returnModel.Period5LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period5) ?? decimal.Zero; returnModel.Period5SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period5) ?? decimal.Zero; returnModel.Period5YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period5) ?? decimal.Zero; returnModel.Period5AchPayment = achPaymentList?.Sum(x => x.Period5) ?? decimal.Zero; returnModel.Period6CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period6) ?? decimal.Zero; returnModel.Period6MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period6) ?? decimal.Zero; returnModel.Period6MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period6) ?? decimal.Zero; returnModel.Period6LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period6) ?? decimal.Zero; returnModel.Period6SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period6) ?? decimal.Zero; returnModel.Period6YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period6) ?? decimal.Zero; returnModel.Period6AchPayment = achPaymentList?.Sum(x => x.Period6) ?? decimal.Zero; returnModel.Period7CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period7) ?? decimal.Zero; returnModel.Period7MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period7) ?? decimal.Zero; returnModel.Period7MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period7) ?? decimal.Zero; returnModel.Period7LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period7) ?? decimal.Zero; returnModel.Period7SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period7) ?? decimal.Zero; returnModel.Period7YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period7) ?? decimal.Zero; returnModel.Period7AchPayment = achPaymentList?.Sum(x => x.Period7) ?? decimal.Zero; returnModel.Period8CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period8) ?? decimal.Zero; returnModel.Period8MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period8) ?? decimal.Zero; returnModel.Period8MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period8) ?? decimal.Zero; returnModel.Period8LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period8) ?? decimal.Zero; returnModel.Period8SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period8) ?? decimal.Zero; returnModel.Period8YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period8) ?? decimal.Zero; returnModel.Period8AchPayment = achPaymentList?.Sum(x => x.Period8) ?? decimal.Zero; returnModel.Period9CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period9) ?? decimal.Zero; returnModel.Period9MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period9) ?? decimal.Zero; returnModel.Period9MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period9) ?? decimal.Zero; returnModel.Period9LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period9) ?? decimal.Zero; returnModel.Period9SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period9) ?? decimal.Zero; returnModel.Period9YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period9) ?? decimal.Zero; returnModel.Period9AchPayment = achPaymentList?.Sum(x => x.Period9) ?? decimal.Zero; returnModel.Period10CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period10) ?? decimal.Zero; returnModel.Period10MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period10) ?? decimal.Zero; returnModel.Period10MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period10) ?? decimal.Zero; returnModel.Period10LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period10) ?? decimal.Zero; returnModel.Period10SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period10) ?? decimal.Zero; returnModel.Period10YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period10) ?? decimal.Zero; returnModel.Period10AchPayment = achPaymentList?.Sum(x => x.Period10) ?? decimal.Zero; returnModel.Period11CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period11) ?? decimal.Zero; returnModel.Period11MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period11) ?? decimal.Zero; returnModel.Period11MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period11) ?? decimal.Zero; returnModel.Period11LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period11) ?? decimal.Zero; returnModel.Period11SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period11) ?? decimal.Zero; returnModel.Period11YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period11) ?? decimal.Zero; returnModel.Period11AchPayment = achPaymentList?.Sum(x => x.Period11) ?? decimal.Zero; returnModel.Period12CoreGovContPayment = coreGovContPaymentList?.Sum(x => x.Period12) ?? decimal.Zero; returnModel.Period12MathEngOnProgPayment = mathEngOnProgPaymentList?.Sum(x => x.Period12) ?? decimal.Zero; returnModel.Period12MathEngBalPayment = mathEngBalPaymentList?.Sum(x => x.Period12) ?? decimal.Zero; returnModel.Period12LearnSuppFundCash = learnSuppFundCashList?.Sum(x => x.Period12) ?? decimal.Zero; returnModel.Period12SmallBusPayment = smallBusPaymentList?.Sum(x => x.Period12) ?? decimal.Zero; returnModel.Period12YoungAppPayment = youngAppPaymentList?.Sum(x => x.Period12) ?? decimal.Zero; returnModel.Period12AchPayment = achPaymentList?.Sum(x => x.Period12) ?? decimal.Zero; returnModel.Period1PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 8, Constants.BeginningOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period2PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 9, Constants.BeginningOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period3PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 10, Constants.BeginningOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period4PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 11, Constants.BeginningOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period5PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 12, Constants.BeginningOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period6PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 1, Constants.EndOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period7PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 2, Constants.EndOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period8PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 3, Constants.EndOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period9PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 4, Constants.EndOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period10PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 5, Constants.EndOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period11PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 6, Constants.EndOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.Period12PMRSum = GetAppFinRecordListByPeriods(learningDelivery, 7, Constants.EndOfYear.Year)? .Where(x => x.AFinCode == 1 || x.AFinCode == 2).Sum(x => x.AFinAmount) - currentYearData?.Where(x => x.AFinCode == 3).Sum(x => x.AFinAmount); returnModel.TotalCoreGovContPayment = returnModel.Period1CoreGovContPayment + returnModel.Period2CoreGovContPayment + returnModel.Period3CoreGovContPayment + returnModel.Period4CoreGovContPayment + returnModel.Period5CoreGovContPayment + returnModel.Period6CoreGovContPayment + returnModel.Period7CoreGovContPayment + returnModel.Period8CoreGovContPayment + returnModel.Period9CoreGovContPayment + returnModel.Period10CoreGovContPayment + returnModel.Period11CoreGovContPayment + returnModel.Period12CoreGovContPayment; returnModel.TotalMathEngOnProgPayment = returnModel.Period1MathEngOnProgPayment + returnModel.Period2MathEngOnProgPayment + returnModel.Period3MathEngOnProgPayment + returnModel.Period4MathEngOnProgPayment + returnModel.Period5MathEngOnProgPayment + returnModel.Period6MathEngOnProgPayment + returnModel.Period7MathEngOnProgPayment + returnModel.Period8MathEngOnProgPayment + returnModel.Period9MathEngOnProgPayment + returnModel.Period10MathEngOnProgPayment + returnModel.Period11MathEngOnProgPayment + returnModel.Period12MathEngOnProgPayment; returnModel.TotalMathEngBalPayment = returnModel.Period1MathEngBalPayment + returnModel.Period2MathEngBalPayment + returnModel.Period3MathEngBalPayment + returnModel.Period4MathEngBalPayment + returnModel.Period5MathEngBalPayment + returnModel.Period6MathEngBalPayment + returnModel.Period7MathEngBalPayment + returnModel.Period8MathEngBalPayment + returnModel.Period9MathEngBalPayment + returnModel.Period10MathEngBalPayment + returnModel.Period11MathEngBalPayment + returnModel.Period12MathEngBalPayment; returnModel.TotalLearnSuppFundCash = returnModel.Period1LearnSuppFundCash + returnModel.Period2LearnSuppFundCash + returnModel.Period3LearnSuppFundCash + returnModel.Period4LearnSuppFundCash + returnModel.Period5LearnSuppFundCash + returnModel.Period6LearnSuppFundCash + returnModel.Period7LearnSuppFundCash + returnModel.Period8LearnSuppFundCash + returnModel.Period9LearnSuppFundCash + returnModel.Period10LearnSuppFundCash + returnModel.Period11LearnSuppFundCash + returnModel.Period12LearnSuppFundCash; returnModel.TotalSmallBusPayment = returnModel.Period1SmallBusPayment + returnModel.Period2SmallBusPayment + returnModel.Period3SmallBusPayment + returnModel.Period4SmallBusPayment + returnModel.Period5SmallBusPayment + returnModel.Period6SmallBusPayment + returnModel.Period7SmallBusPayment + returnModel.Period8SmallBusPayment + returnModel.Period9SmallBusPayment + returnModel.Period10SmallBusPayment + returnModel.Period11SmallBusPayment + returnModel.Period12SmallBusPayment; returnModel.TotalYoungAppPayment = returnModel.Period1YoungAppPayment + returnModel.Period2YoungAppPayment + returnModel.Period3YoungAppPayment + returnModel.Period4YoungAppPayment + returnModel.Period5YoungAppPayment + returnModel.Period6YoungAppPayment + returnModel.Period7YoungAppPayment + returnModel.Period8YoungAppPayment + returnModel.Period9YoungAppPayment + returnModel.Period10YoungAppPayment + returnModel.Period11YoungAppPayment + returnModel.Period12YoungAppPayment; returnModel.TotalAchPayment = returnModel.Period1AchPayment + returnModel.Period2AchPayment + returnModel.Period3AchPayment + returnModel.Period4AchPayment + returnModel.Period5AchPayment + returnModel.Period6AchPayment + returnModel.Period7AchPayment + returnModel.Period8AchPayment + returnModel.Period9AchPayment + returnModel.Period10AchPayment + returnModel.Period11AchPayment + returnModel.Period12AchPayment; returnModel.TotalPMRSum = returnModel.Period1PMRSum + returnModel.Period2PMRSum + returnModel.Period3PMRSum + returnModel.Period4PMRSum + returnModel.Period5PMRSum + returnModel.Period6PMRSum + returnModel.Period7PMRSum + returnModel.Period8PMRSum + returnModel.Period9PMRSum + returnModel.Period10PMRSum + returnModel.Period11PMRSum + returnModel.Period12PMRSum; return(returnModel); }
public AppsIndicativeEarningsModel BuildModel( ILearner learner, ILearningDelivery learningDelivery, LearningDelivery fm36DeliveryAttribute, PriceEpisode fm36EpisodeAttribute, LarsLearningDelivery larsLearningDelivery, string notionalEndLevel, bool earliestEpisode, bool hasPriceEpisodes) { DateTime employmentStatusDate = learner.LearnerEmploymentStatuses? .Where(x => x.DateEmpStatApp <= learningDelivery.LearnStartDate).Select(x => x.DateEmpStatApp) .DefaultIfEmpty(DateTime.MinValue).Max() ?? DateTime.MinValue; ILearnerEmploymentStatus employmentStatus = learner.LearnerEmploymentStatuses?.SingleOrDefault(x => x.DateEmpStatApp == employmentStatusDate); LearningDeliveryFamSimple[] learningDeliveryFams = GetLearningDeliveryFams(learningDelivery); string fundingLineType = GetFundingType(fm36DeliveryAttribute?.LearningDeliveryValues, fm36EpisodeAttribute?.PriceEpisodeValues); var ldms = _stringUtilitiesService.GetArrayEntries(learningDelivery.LearningDeliveryFAMs?.Where(x => string.Equals(x.LearnDelFAMType, Constants.LearningDeliveryFAMCodeLDM, StringComparison.OrdinalIgnoreCase)), 4); var model = new AppsIndicativeEarningsModel { LearnRefNumber = learner.LearnRefNumber, UniqueLearnerNumber = learner.ULN, DateOfBirth = learner.DateOfBirthNullable?.ToString("dd/MM/yyyy"), PostcodePriorToEnrollment = learner.PostcodePrior, CampusIdentifier = learner.CampId, ProviderSpecifiedLearnerMonitoringA = learner.ProviderSpecLearnerMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "A", StringComparison.OrdinalIgnoreCase))?.ProvSpecLearnMon, ProviderSpecifiedLearnerMonitoringB = learner.ProviderSpecLearnerMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "B", StringComparison.OrdinalIgnoreCase))?.ProvSpecLearnMon, AimSeqNumber = learningDelivery.AimSeqNumber, LearningAimReference = learningDelivery.LearnAimRef, LearningAimTitle = larsLearningDelivery?.LearningAimTitle, SoftwareSupplierAimIdentifier = learningDelivery.SWSupAimId, LARS1618FrameworkUplift = fm36DeliveryAttribute?.LearningDeliveryValues ?.LearnDelApplicProv1618FrameworkUplift, NotionalNVQLevel = larsLearningDelivery?.NotionalNvqLevel, StandardNotionalEndLevel = notionalEndLevel, Tier2SectorSubjectArea = larsLearningDelivery?.Tier2SectorSubjectArea, ProgrammeType = learningDelivery.ProgTypeNullable, StandardCode = learningDelivery.StdCodeNullable, FrameworkCode = learningDelivery.FworkCodeNullable, ApprenticeshipPathway = learningDelivery.PwayCodeNullable, AimType = learningDelivery.AimType, CommonComponentCode = larsLearningDelivery?.FrameworkCommonComponent, FundingModel = learningDelivery.FundModel, OriginalLearningStartDate = learningDelivery.OrigLearnStartDateNullable?.ToString("dd/MM/yyyy"), LearningStartDate = learningDelivery.LearnStartDate.ToString("dd/MM/yyyy"), LearningPlannedEndDate = learningDelivery.LearnPlanEndDate.ToString("dd/MM/yyyy"), CompletionStatus = learningDelivery.CompStatus, LearningActualEndDate = learningDelivery.LearnActEndDateNullable?.ToString("dd/MM/yyyy"), Outcome = learningDelivery.OutcomeNullable, FundingAdjustmentForPriorLearning = learningDelivery.PriorLearnFundAdjNullable, OtherFundingAdjustment = learningDelivery.OtherFundAdjNullable, LearningDeliveryFAMTypeLearningSupportFunding = learningDeliveryFams.Select(x => x.Code).Max(), LearningDeliveryFAMTypeLSFDateAppliesFrom = learningDeliveryFams.Select(x => x.From).Min() == DateTime.MinValue ? string.Empty : learningDeliveryFams.Select(x => x.From).Min().ToString("dd/MM/yyyy"), LearningDeliveryFAMTypeLSFDateAppliesTo = learningDeliveryFams.Select(x => x.To).Max() == DateTime.MinValue ? string.Empty : learningDeliveryFams.Select(x => x.To).Max().ToString("dd/MM/yyyy"), LearningDeliveryFAMTypeLearningDeliveryMonitoringA = ldms[0], LearningDeliveryFAMTypeLearningDeliveryMonitoringB = ldms[1], LearningDeliveryFAMTypeLearningDeliveryMonitoringC = ldms[2], LearningDeliveryFAMTypeLearningDeliveryMonitoringD = ldms[3], LearningDeliveryFAMRestartIndicator = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, Constants.LearningDeliveryFAMCodeRES, StringComparison.OrdinalIgnoreCase))?.LearnDelFAMCode, ProviderSpecifiedDeliveryMonitoringA = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "A", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProviderSpecifiedDeliveryMonitoringB = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "B", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProviderSpecifiedDeliveryMonitoringC = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "C", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProviderSpecifiedDeliveryMonitoringD = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "D", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, EndPointAssessmentOrganisation = learningDelivery.EPAOrgID, PlannedNoOfOnProgrammeInstallmentsForAim = fm36DeliveryAttribute?.LearningDeliveryValues?.PlannedNumOnProgInstalm, SubContractedOrPartnershipUKPRN = learningDelivery.PartnerUKPRNNullable, DeliveryLocationPostcode = learningDelivery.DelLocPostCode, EmployerIdentifier = employmentStatus?.EmpIdNullable, AgreementIdentifier = fm36EpisodeAttribute?.PriceEpisodeValues?.PriceEpisodeAgreeId, EmploymentStatus = employmentStatus?.EmpStat, EmploymentStatusDate = employmentStatus?.DateEmpStatApp.ToString("dd/MM/yyyy"), EmpStatusMonitoringSmallEmployer = employmentStatus?.EmploymentStatusMonitorings ?.SingleOrDefault(x => string.Equals(x.ESMType, Constants.EmploymentStatusMonitoringTypeSEM, StringComparison.OrdinalIgnoreCase))?.ESMCode, PriceEpisodeStartDate = fm36EpisodeAttribute?.PriceEpisodeValues?.EpisodeStartDate, PriceEpisodeActualEndDate = fm36EpisodeAttribute?.PriceEpisodeValues?.PriceEpisodeActualEndDate?.ToString("dd/MM/yyyy"), FundingLineType = fundingLineType, TotalPriceApplicableToThisEpisode = fm36EpisodeAttribute?.PriceEpisodeValues?.PriceEpisodeTotalTNPPrice, FundingBandUpperLimit = fm36EpisodeAttribute?.PriceEpisodeValues?.PriceEpisodeUpperBandLimit, PriceAmountAboveFundingBandLimit = fm36EpisodeAttribute?.PriceEpisodeValues?.PriceEpisodeUpperLimitAdjustment, PriceAmountRemainingStartOfEpisode = fm36EpisodeAttribute?.PriceEpisodeValues ?.PriceEpisodeCappedRemainingTNPAmount, CompletionElement = fm36EpisodeAttribute?.PriceEpisodeValues?.PriceEpisodeCompletionElement }; if (learningDelivery?.LearningDeliveryFAMs != null) { CalculateApprenticeshipContractTypeFields( learningDelivery, model, fm36DeliveryAttribute, fm36EpisodeAttribute, hasPriceEpisodes); } if (earliestEpisode) { CalculateAppFinTotals(model, learningDelivery); } foreach (var command in _commands) { command.Execute(model, fm36DeliveryAttribute, fm36EpisodeAttribute); } GetTotals(model); return(model); }
public MainOccupancyModel BuildFm35Model( ILearner learner, ILearningDelivery learningDelivery, LarsLearningDelivery larsModel, LearningDelivery frameworkAim, ILR.FundingService.FM35.FundingOutput.Model.Output.LearningDelivery fm35Data, IStringUtilitiesService stringUtilitiesService) { var onProgPayment = fm35Data?.LearningDeliveryPeriodisedValues ?.SingleOrDefault(attr => string.Equals(attr.AttributeName, Constants.Fm35OnProgrammeAttributeName, StringComparison.OrdinalIgnoreCase)); var balancePayment = fm35Data?.LearningDeliveryPeriodisedValues ?.SingleOrDefault(attr => string.Equals(attr.AttributeName, Constants.Fm35BalancingAttributeName, StringComparison.OrdinalIgnoreCase)); var achievePayment = fm35Data?.LearningDeliveryPeriodisedValues ?.SingleOrDefault(attr => string.Equals(attr.AttributeName, Constants.Fm35AimAchievementAttributeName, StringComparison.OrdinalIgnoreCase)); var empOutcomePayment = fm35Data?.LearningDeliveryPeriodisedValues ?.SingleOrDefault(attr => string.Equals(attr.AttributeName, Constants.Fm35JobOutcomeAchievementAttributeName, StringComparison.OrdinalIgnoreCase)); var learnSuppFundCash = fm35Data?.LearningDeliveryPeriodisedValues ?.SingleOrDefault(attr => string.Equals(attr.AttributeName, Constants.Fm35LearningSupportAttributeName, StringComparison.OrdinalIgnoreCase)); var ldms = stringUtilitiesService.GetArrayEntries(learningDelivery.LearningDeliveryFAMs?.Where(x => string.Equals(x.LearnDelFAMType, "LDM", StringComparison.OrdinalIgnoreCase)), 4); var totalOnProgPayment = (onProgPayment?.Period1 ?? 0) + (onProgPayment?.Period2 ?? 0) + (onProgPayment?.Period3 ?? 0) + (onProgPayment?.Period4 ?? 0) + (onProgPayment?.Period5 ?? 0) + (onProgPayment?.Period6 ?? 0) + (onProgPayment?.Period7 ?? 0) + (onProgPayment?.Period8 ?? 0) + (onProgPayment?.Period9 ?? 0) + (onProgPayment?.Period10 ?? 0) + (onProgPayment?.Period11 ?? 0) + (onProgPayment?.Period12 ?? 0); var totalBalancePayment = (balancePayment?.Period1 ?? 0) + (balancePayment?.Period2 ?? 0) + (balancePayment?.Period3 ?? 0) + (balancePayment?.Period4 ?? 0) + (balancePayment?.Period5 ?? 0) + (balancePayment?.Period6 ?? 0) + (balancePayment?.Period7 ?? 0) + (balancePayment?.Period8 ?? 0) + (balancePayment?.Period9 ?? 0) + (balancePayment?.Period10 ?? 0) + (balancePayment?.Period11 ?? 0) + (balancePayment?.Period12 ?? 0); var totalAchievePayment = (achievePayment?.Period1 ?? 0) + (achievePayment?.Period2 ?? 0) + (achievePayment?.Period3 ?? 0) + (achievePayment?.Period4 ?? 0) + (achievePayment?.Period5 ?? 0) + (achievePayment?.Period6 ?? 0) + (achievePayment?.Period7 ?? 0) + (achievePayment?.Period8 ?? 0) + (achievePayment?.Period9 ?? 0) + (achievePayment?.Period10 ?? 0) + (achievePayment?.Period11 ?? 0) + (achievePayment?.Period12 ?? 0); var totalEmpOutcomePay = (empOutcomePayment?.Period1 ?? 0) + (empOutcomePayment?.Period2 ?? 0) + (empOutcomePayment?.Period3 ?? 0) + (empOutcomePayment?.Period4 ?? 0) + (empOutcomePayment?.Period5 ?? 0) + (empOutcomePayment?.Period6 ?? 0) + (empOutcomePayment?.Period7 ?? 0) + (empOutcomePayment?.Period8 ?? 0) + (empOutcomePayment?.Period9 ?? 0) + (empOutcomePayment?.Period10 ?? 0) + (empOutcomePayment?.Period11 ?? 0) + (empOutcomePayment?.Period12 ?? 0); var totalLearnSuppFundCash = (learnSuppFundCash?.Period1 ?? 0) + (learnSuppFundCash?.Period2 ?? 0) + (learnSuppFundCash?.Period3 ?? 0) + (learnSuppFundCash?.Period4 ?? 0) + (learnSuppFundCash?.Period5 ?? 0) + (learnSuppFundCash?.Period6 ?? 0) + (learnSuppFundCash?.Period7 ?? 0) + (learnSuppFundCash?.Period8 ?? 0) + (learnSuppFundCash?.Period9 ?? 0) + (learnSuppFundCash?.Period10 ?? 0) + (learnSuppFundCash?.Period11 ?? 0) + (learnSuppFundCash?.Period12 ?? 0); LearningDeliveryPeriodisedValue aimPercent = fm35Data?.LearningDeliveryPeriodisedValues?.SingleOrDefault(attr => string.Equals(attr.AttributeName, Constants.Fm35AimAchievementPercentAttributeName, StringComparison.OrdinalIgnoreCase)); return(new MainOccupancyModel { LearnRefNumber = learner.LearnRefNumber, Uln = learner.ULN, DateOfBirth = learner.DateOfBirthNullable?.ToString("dd/MM/yyyy"), PostcodePrior = learner.PostcodePrior, PmUkprn = learner.PMUKPRNNullable, CampId = learner.CampId, ProvSpecLearnMonA = learner.ProviderSpecLearnerMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "A", StringComparison.OrdinalIgnoreCase))?.ProvSpecLearnMon, ProvSpecLearnMonB = learner.ProviderSpecLearnerMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "B", StringComparison.OrdinalIgnoreCase))?.ProvSpecLearnMon, AimSeqNumber = learningDelivery.AimSeqNumber, LearnAimRef = learningDelivery.LearnAimRef, LearnAimRefTitle = larsModel.LearningAimTitle, SwSupAimId = learningDelivery.SWSupAimId, WeightedRateFromEsol = fm35Data?.LearningDeliveryValue?.WeightedRateFromESOL, ApplicWeightFundRate = fm35Data?.LearningDeliveryValue?.ApplicWeightFundRate, ApplicProgWeightFact = fm35Data?.LearningDeliveryValue?.ApplicProgWeightFact, AimValue = fm35Data?.LearningDeliveryValue?.AimValue, NotionalNvqLevelV2 = larsModel.NotionalNvqLevel, SectorSubjectAreaTier2 = larsModel.Tier2SectorSubjectArea, ProgType = learningDelivery.ProgTypeNullable, FworkCode = learningDelivery.FworkCodeNullable, PwayCode = learningDelivery.PwayCodeNullable, AimType = learningDelivery.AimType, FrameworkComponentType = frameworkAim.FrameworkComponentType, FundModel = learningDelivery.FundModel, PriorLearnFundAdj = learningDelivery.PriorLearnFundAdjNullable, OtherFundAdj = learningDelivery.OtherFundAdjNullable, OrigLearnStartDate = learningDelivery.OrigLearnStartDateNullable?.ToString("dd/MM/yyyy"), LearnStartDate = learningDelivery.LearnStartDate.ToString("dd/MM/yyyy"), LearnPlanEndDate = learningDelivery.LearnPlanEndDate.ToString("dd/MM/yyyy"), CompStatus = learningDelivery.CompStatus, LearnActEndDate = learningDelivery.LearnActEndDateNullable?.ToString("dd/MM/yyyy"), Outcome = learningDelivery.OutcomeNullable, AchDate = learningDelivery.AchDateNullable?.ToString("dd/MM/yyyy"), AddHours = learningDelivery.AddHoursNullable, LearnDelFamCodeSof = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "SOF", StringComparison.OrdinalIgnoreCase))?.LearnDelFAMCode, LearnDelFamCodeFfi = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "FFI", StringComparison.OrdinalIgnoreCase))?.LearnDelFAMCode, LearnDelFamCodeEef = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "EEF", StringComparison.OrdinalIgnoreCase))?.LearnDelFAMCode, LearnDelFamCodeLsfHighest = learningDelivery.LearningDeliveryFAMs ?.Where(x => string.Equals(x.LearnDelFAMType, "LSF", StringComparison.OrdinalIgnoreCase)).Select(x => x.LearnDelFAMCode).DefaultIfEmpty().Max(), LearnDelFamCodeLsfEarliest = learningDelivery.LearningDeliveryFAMs ?.Where(x => string.Equals(x.LearnDelFAMType, "LSF", StringComparison.OrdinalIgnoreCase)).Select(x => x.LearnDelFAMDateFromNullable ?? DateTime.MinValue) .DefaultIfEmpty(DateTime.MinValue).Min().ToString("dd/MM/yyyy"), LearnDelFamCodeLsfLatest = learningDelivery.LearningDeliveryFAMs ?.Where(x => string.Equals(x.LearnDelFAMType, "LSF", StringComparison.OrdinalIgnoreCase)) .Min(x => x.LearnDelFAMDateToNullable)?.ToString("dd/MM/yyyy"), LearnDelFamCodeLdm1 = ldms[0], LearnDelFamCodeLdm2 = ldms[1], LearnDelFamCodeLdm3 = ldms[2], LearnDelFamCodeLdm4 = ldms[3], LearnDelFamCodeRes = learningDelivery.LearningDeliveryFAMs ?.SingleOrDefault(x => string.Equals(x.LearnDelFAMType, "RES", StringComparison.OrdinalIgnoreCase))?.LearnDelFAMCode, ProvSpecDelMonA = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "A", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProvSpecDelMonB = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "B", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProvSpecDelMonC = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "C", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, ProvSpecDelMonD = learningDelivery.ProviderSpecDeliveryMonitorings ?.SingleOrDefault(x => string.Equals(x.ProvSpecDelMonOccur, "D", StringComparison.OrdinalIgnoreCase))?.ProvSpecDelMon, FundLine = fm35Data?.LearningDeliveryValue?.FundLine, PlannedNumOnProgInstalm = fm35Data?.LearningDeliveryValue?.PlannedNumOnProgInstalm, PlannedNumOnProgInstalmTrans = fm35Data?.LearningDeliveryValue?.PlannedNumOnProgInstalmTrans, StartPropTrans = fm35Data?.LearningDeliveryValue?.StartPropTrans, AchieveElement = fm35Data?.LearningDeliveryValue?.AchieveElement, AchievePercentage = aimPercent == null ? 0 : GetMaxPeriod(aimPercent), NonGovCont = fm35Data?.LearningDeliveryValue?.NonGovCont, PartnerUkprn = learningDelivery.PartnerUKPRNNullable, DelLocPostCode = learningDelivery.DelLocPostCode, AreaCostFactAdj = fm35Data?.LearningDeliveryValue?.AreaCostFactAdj, DisUpFactAdj = fm35Data?.LearningDeliveryValue?.DisUpFactAdj, LargeEmployerID = fm35Data?.LearningDeliveryValue?.LargeEmployerID, LargeEmployerFM35Fctr = fm35Data?.LearningDeliveryValue?.LargeEmployerFM35Fctr, CapFactor = fm35Data?.LearningDeliveryValue?.CapFactor, TraineeWorkPlacement = (fm35Data?.LearningDeliveryValue?.TrnWorkPlaceAim ?? false) || (fm35Data?.LearningDeliveryValue?.TrnWorkPrepAim ?? false), HigherApprentishipHeAim = fm35Data?.LearningDeliveryValue?.PrscHEAim ?? false, ApplicEmpFactDate = fm35Data?.LearningDeliveryValue?.ApplicEmpFactDate?.ToString("dd/MM/yyyy"), ApplicFactDate = fm35Data?.LearningDeliveryValue?.ApplicFactDate?.ToString("dd/MM/yyyy"), Period1OnProgPayment = onProgPayment?.Period1, Period1BalancePayment = balancePayment?.Period1, Period1AchievePayment = achievePayment?.Period1, Period1EmpOutcomePay = empOutcomePayment?.Period1, Period1LearnSuppFundCash = learnSuppFundCash?.Period1, Period2OnProgPayment = onProgPayment?.Period2, Period2BalancePayment = balancePayment?.Period2, Period2AchievePayment = achievePayment?.Period2, Period2EmpOutcomePay = empOutcomePayment?.Period2, Period2LearnSuppFundCash = learnSuppFundCash?.Period2, Period3OnProgPayment = onProgPayment?.Period3, Period3BalancePayment = balancePayment?.Period3, Period3AchievePayment = achievePayment?.Period3, Period3EmpOutcomePay = empOutcomePayment?.Period3, Period3LearnSuppFundCash = learnSuppFundCash?.Period3, Period4OnProgPayment = onProgPayment?.Period4, Period4BalancePayment = balancePayment?.Period4, Period4AchievePayment = achievePayment?.Period4, Period4EmpOutcomePay = empOutcomePayment?.Period4, Period4LearnSuppFundCash = learnSuppFundCash?.Period4, Period5OnProgPayment = onProgPayment?.Period5, Period5BalancePayment = balancePayment?.Period5, Period5AchievePayment = achievePayment?.Period5, Period5EmpOutcomePay = empOutcomePayment?.Period5, Period5LearnSuppFundCash = learnSuppFundCash?.Period5, Period6OnProgPayment = onProgPayment?.Period6, Period6BalancePayment = balancePayment?.Period6, Period6AchievePayment = achievePayment?.Period6, Period6EmpOutcomePay = empOutcomePayment?.Period6, Period6LearnSuppFundCash = learnSuppFundCash?.Period6, Period7OnProgPayment = onProgPayment?.Period7, Period7BalancePayment = balancePayment?.Period7, Period7AchievePayment = achievePayment?.Period7, Period7EmpOutcomePay = empOutcomePayment?.Period7, Period7LearnSuppFundCash = learnSuppFundCash?.Period7, Period8OnProgPayment = onProgPayment?.Period8, Period8BalancePayment = balancePayment?.Period8, Period8AchievePayment = achievePayment?.Period8, Period8EmpOutcomePay = empOutcomePayment?.Period8, Period8LearnSuppFundCash = learnSuppFundCash?.Period8, Period9OnProgPayment = onProgPayment?.Period9, Period9BalancePayment = balancePayment?.Period9, Period9AchievePayment = achievePayment?.Period9, Period9EmpOutcomePay = empOutcomePayment?.Period9, Period9LearnSuppFundCash = learnSuppFundCash?.Period9, Period10OnProgPayment = onProgPayment?.Period10, Period10BalancePayment = balancePayment?.Period10, Period10AchievePayment = achievePayment?.Period10, Period10EmpOutcomePay = empOutcomePayment?.Period10, Period10LearnSuppFundCash = learnSuppFundCash?.Period10, Period11OnProgPayment = onProgPayment?.Period11, Period11BalancePayment = balancePayment?.Period11, Period11AchievePayment = achievePayment?.Period11, Period11EmpOutcomePay = empOutcomePayment?.Period11, Period11LearnSuppFundCash = learnSuppFundCash?.Period11, Period12OnProgPayment = onProgPayment?.Period12, Period12BalancePayment = balancePayment?.Period12, Period12AchievePayment = achievePayment?.Period12, Period12EmpOutcomePay = empOutcomePayment?.Period12, Period12LearnSuppFundCash = learnSuppFundCash?.Period12, TotalOnProgPayment = totalOnProgPayment, TotalBalancePayment = totalBalancePayment, TotalAchievePayment = totalAchievePayment, TotalEmpOutcomePay = totalEmpOutcomePay, TotalLearnSuppFundCash = totalLearnSuppFundCash, TotalEarnedCash = totalOnProgPayment + totalBalancePayment + totalAchievePayment + totalEmpOutcomePay + totalLearnSuppFundCash }); }