public IEnumerable <Frm07ReportModel> Build(IReportServiceContext reportServiceContext, IReportData reportData) { var models = new List <Frm07ReportModel>(); var returnPeriod = reportServiceContext.ReturnPeriodName; var organisationNameDictionary = reportData.Organisations.ToDictionary(k => k.Ukprn, v => v.Name); var learnAimDictionary = reportData.LARSLearningDeliveries.ToDictionary(k => k.LearnAimRef, v => v, StringComparer.OrdinalIgnoreCase); var sofCodeDictionary = reportData.McaGlaSofLookups.Where(l => DevolvedCodes.Contains(l.SofCode)).ToDictionary(k => k.SofCode, v => v.McaGlaShortCode); var mcaDictionary = reportData.McaDevolvedContracts.ToDictionary(k => k.McaGlaShortCode, v => v.Ukprn, StringComparer.OrdinalIgnoreCase); var orgName = organisationNameDictionary.GetValueOrDefault(reportServiceContext.Ukprn); var pausedDeliveries = reportData.Learners ?.SelectMany(l => l.LearningDeliveries.Where(ld => ld.CompStatus == _pausedCompStatus && !ExcludedDelivery(ld, reportData.LARSLearningDeliveries) && FundModel99Rule(ld) && !_excludedFundModel.Contains(ld.FundModel)) .Select(ld => new { Learner = l, LearningDelivery = ld })); if (pausedDeliveries == null) { return(models); } var learnerDeliveries = pausedDeliveries.GroupBy(x => x.Learner); foreach (var deliverySet in learnerDeliveries) { foreach (var delivery in deliverySet.OrderByDescending(x => x.LearningDelivery.LearnStartDate)) { var restartDelivery = GetRestartDelivery(delivery.LearningDelivery, delivery.Learner); if (restartDelivery != null) { var pmOrgName = organisationNameDictionary.GetValueOrDefault(delivery.Learner.PMUKPRN.GetValueOrDefault()); var prevOrgName = organisationNameDictionary.GetValueOrDefault(delivery.Learner.PrevUKPRN.GetValueOrDefault()); models.Add(BuildModelForLearningDelivery(reportServiceContext, restartDelivery, delivery.Learner, sofCodeDictionary, mcaDictionary, organisationNameDictionary, learnAimDictionary, returnPeriod, orgName, pmOrgName, prevOrgName)); } } } return(models); }
public IEnumerable <Frm09ReportModel> Build(IReportServiceContext reportServiceContext, IReportData reportData) { var models = new List <Frm09ReportModel>(); var returnPeriod = reportServiceContext.ReturnPeriodName; var organisationNameDictionary = reportData.Organisations.ToDictionary(k => k.Ukprn, v => v.Name); var learnAimDictionary = reportData.LARSLearningDeliveries.ToDictionary(k => k.LearnAimRef, v => v, StringComparer.OrdinalIgnoreCase); var sofCodeDictionary = reportData.McaGlaSofLookups.Where(l => DevolvedCodes.Contains(l.SofCode)).ToDictionary(k => k.SofCode, v => v.McaGlaShortCode); var mcaDictionary = reportData.McaDevolvedContracts.ToDictionary(k => k.McaGlaShortCode, v => v.Ukprn, StringComparer.OrdinalIgnoreCase); var orgName = organisationNameDictionary.GetValueOrDefault(reportServiceContext.Ukprn); var currentReturnEndDate = reportData.ReturnPeriods .FirstOrDefault(d => d.Period == reportServiceContext.ReturnPeriod).End; var withdrawanDeliveries = reportData.Learners ?.SelectMany(l => l.LearningDeliveries.Where(ld => ld.CompStatus == _withdrawnCompStatus && ld.WithdrawReason == _withdrawnReasonCode && !ExcludedDelivery(ld, reportData.LARSLearningDeliveries) && FundModel99Rule(ld) && ld.LearnActEndDate <= ReportingConstants.EndOfYear) .Select(ld => new { Learner = l, LearningDelivery = ld })); if (withdrawanDeliveries == null) { return(models); } foreach (var delivery in withdrawanDeliveries) { if (!HasRestartDelivery(delivery.LearningDelivery, delivery.Learner, reportData.Learners)) { if (delivery.LearningDelivery.LearnActEndDate != null && DaysBetween(delivery.LearningDelivery.LearnActEndDate.Value, currentReturnEndDate) >= 90) { var pmOrgName = organisationNameDictionary.GetValueOrDefault(delivery.Learner.PMUKPRN.GetValueOrDefault()); var prevOrgName = organisationNameDictionary.GetValueOrDefault(delivery.Learner.PrevUKPRN.GetValueOrDefault()); models.Add(BuildModelForLearningDelivery(reportServiceContext, delivery.LearningDelivery, delivery.Learner, sofCodeDictionary, mcaDictionary, organisationNameDictionary, learnAimDictionary, returnPeriod, orgName, pmOrgName, prevOrgName)); } } } return(models); }