Example #1
0
        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);
        }