public IEnumerable <FM36LearnerData> BuildFm36Learners(IMessage message, FM36Global fm36Data, ICollection <string> fundingStreamPeriodCodes) { var learnerData = new List <FM36LearnerData>(); var messageLearnerDictionary = BuildLearnerDictionary(message); var messageLearningDeliveryDictionary = BuildFm36LearningDeliveryDictionary(message); return(fm36Data?.Learners? .Select(l => new FM36LearnerData { Learner = messageLearnerDictionary[l.LearnRefNumber], ProviderSpecLearnerMonitoringModels = _ilrModelMapper.MapProviderSpecLearnerMonitorings(messageLearnerDictionary[l.LearnRefNumber]?.ProviderSpecLearnerMonitorings), LearningDeliveries = l.LearningDeliveries?.Select(ld => new FM36LearningDeliveryData { LearningDelivery = messageLearningDeliveryDictionary[l.LearnRefNumber][ld.AimSeqNumber], ProviderSpecDeliveryMonitoringModels = _ilrModelMapper.MapProviderSpecDeliveryMonitorings(messageLearningDeliveryDictionary[l.LearnRefNumber][ld.AimSeqNumber]?.ProviderSpecDeliveryMonitorings), LearningDeliveryFAMsModels = _ilrModelMapper.MapLearningDeliveryFAMs(messageLearningDeliveryDictionary[l.LearnRefNumber][ld.AimSeqNumber]?.LearningDeliveryFAMs), LearningDeliveryFAMs_ACT = messageLearningDeliveryDictionary[l.LearnRefNumber][ld.AimSeqNumber]?.LearningDeliveryFAMs?.Where(fam => fam.LearnDelFAMType == LearningDeliveryFAMTypeConstants.ACT).ToList(), FM36PriceEpisodes = l.PriceEpisodes?.Where(p => PriceEpisodeFilter(p.PriceEpisodeValues, ld.AimSeqNumber)) .Select(p => BuildNonContractedPriceEpisode(p, l.LearnRefNumber, fundingStreamPeriodCodes)).Where(pe => pe != null).ToList(), FM36LearningDelivery = BuildNonContractedLearningDelivery(ld, l.LearnRefNumber, fundingStreamPeriodCodes) }).ToList() }).ToList() ?? Enumerable.Empty <FM36LearnerData>()); }
public AppsIndicativeEarningsReportModel BuildLineModel( 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; var model = new AppsIndicativeEarningsReportModel { Learner = learner, ProviderSpecLearnerMonitoring = _ilrModelMapper.MapProviderSpecLearnerMonitorings(learner.ProviderSpecLearnerMonitorings), ProviderSpecDeliveryMonitoring = _ilrModelMapper.MapProviderSpecDeliveryMonitorings(learningDelivery .ProviderSpecDeliveryMonitorings), LearningDeliveryFAMs = _ilrModelMapper.MapLearningDeliveryFAMs(learningDelivery.LearningDeliveryFAMs), LearningDelivery = learningDelivery, LarsLearningDelivery = larsLearningDelivery, EmploymentStatus = learner.LearnerEmploymentStatuses?.SingleOrDefault(x => x.DateEmpStatApp == employmentStatusDate), PriceEpisodeValues = fm36EpisodeAttribute?.PriceEpisodeValues, StandardNotionalEndLevel = notionalEndLevel }; model.EmpStatusMonitoringSmallEmployer = model.EmploymentStatus?.EmploymentStatusMonitorings ?.FirstOrDefault(x => string.Equals(x.ESMType, ReportingConstants.EmploymentStatusMonitoringTypeSEM, StringComparison.OrdinalIgnoreCase))?.ESMCode; model.FundingLineType = GetFundingType(fm36DeliveryAttribute?.LearningDeliveryValues, fm36EpisodeAttribute?.PriceEpisodeValues); model.Fm36LearningDelivery = fm36DeliveryAttribute?.LearningDeliveryValues; if (learningDelivery?.LearningDeliveryFAMs != null) { CalculateApprenticeshipContractTypeFields( learningDelivery, model, fm36DeliveryAttribute, fm36EpisodeAttribute, hasPriceEpisodes); } if (earliestEpisode || !hasPriceEpisodes) { CalculateAppFinTotals(model, learningDelivery); } var isMathsEngLearningDelivery = fm36DeliveryAttribute?.LearningDeliveryValues?.LearnDelMathEng ?? false; model.PeriodisedValues = BuildPeriodisedValuesModel(fm36EpisodeAttribute?.PriceEpisodePeriodisedValues, fm36DeliveryAttribute?.LearningDeliveryPeriodisedValues, isMathsEngLearningDelivery); return(model); }