private async Task <string> GetCsv(IReportServiceContext reportServiceContext, CancellationToken cancellationToken)
        {
            Task <IMessage>       ilrFileTask       = _ilrProviderService.GetIlrFile(reportServiceContext, cancellationToken);
            Task <ALBGlobal>      albDataTask       = _allbProviderService.GetAllbData(reportServiceContext, cancellationToken);
            Task <List <string> > validLearnersTask = _validLearnersService.GetLearnersAsync(reportServiceContext, cancellationToken);

            await Task.WhenAll(ilrFileTask, albDataTask, validLearnersTask);

            if (cancellationToken.IsCancellationRequested)
            {
                return(null);
            }

            if (validLearnersTask.Result == null)
            {
                return(null);
            }

            string[] learnAimRefs = ilrFileTask.Result?.Learners?.Where(x => validLearnersTask.Result.Contains(x.LearnRefNumber))
                                    .SelectMany(x => x.LearningDeliveries).Select(x => x.LearnAimRef).Distinct().ToArray();

            Dictionary <string, LarsLearningDelivery> larsLearningDeliveries = await _larsProviderService.GetLearningDeliveriesAsync(learnAimRefs, cancellationToken);

            if (larsLearningDeliveries == null)
            {
                return(null);
            }

            if (cancellationToken.IsCancellationRequested)
            {
                return(null);
            }

            List <string> ilrError        = new List <string>();
            List <string> larsError       = new List <string>();
            List <string> albLearnerError = new List <string>();

            List <AllbOccupancyModel> models = new List <AllbOccupancyModel>(validLearnersTask.Result.Count);

            foreach (string validLearnerRefNum in validLearnersTask.Result)
            {
                var learner = ilrFileTask.Result?.Learners?.SingleOrDefault(x => string.Equals(x.LearnRefNumber, validLearnerRefNum, StringComparison.OrdinalIgnoreCase));
                if (learner == null)
                {
                    ilrError.Add(validLearnerRefNum);
                    continue;
                }

                ALBLearner albLearner =
                    albDataTask.Result?.Learners?.SingleOrDefault(x => string.Equals(x.LearnRefNumber, validLearnerRefNum, StringComparison.OrdinalIgnoreCase));
                if (albLearner == null)
                {
                    albLearnerError.Add(validLearnerRefNum);
                    continue;
                }

                if (learner.LearningDeliveries == null)
                {
                    ilrError.Add(validLearnerRefNum);
                    continue;
                }

                foreach (ILearningDelivery learningDelivery in learner.LearningDeliveries)
                {
                    LearningDelivery albLearningDelivery = albLearner?.LearningDeliveries
                                                           ?.SingleOrDefault(x => x.AimSeqNumber == learningDelivery.AimSeqNumber);

                    if (!ValidAllbLearningDelivery(learningDelivery, albLearningDelivery))
                    {
                        continue;
                    }

                    if (!larsLearningDeliveries.TryGetValue(learningDelivery.LearnAimRef, out LarsLearningDelivery larsModel))
                    {
                        larsError.Add(validLearnerRefNum);
                        continue;
                    }

                    LearningDeliveryValue           albLearningDeliveryValue = albLearningDelivery?.LearningDeliveryValue;
                    LearningDeliveryPeriodisedValue albSupportPaymentObj     =
                        albLearningDelivery?.LearningDeliveryPeriodisedValues?.SingleOrDefault(x =>
                                                                                               string.Equals(x.AttributeName, AlbSupportPayment, StringComparison.OrdinalIgnoreCase));
                    LearningDeliveryPeriodisedValue albAreaUpliftOnProgPaymentObj =
                        albLearningDelivery?.LearningDeliveryPeriodisedValues?.SingleOrDefault(x =>
                                                                                               string.Equals(x.AttributeName, AlbAreaUpliftOnProgPayment, StringComparison.OrdinalIgnoreCase));
                    LearningDeliveryPeriodisedValue albAreaUpliftBalPaymentObj =
                        albLearningDelivery?.LearningDeliveryPeriodisedValues?.SingleOrDefault(x =>
                                                                                               string.Equals(x.AttributeName, AlbAreaUpliftBalPayment, StringComparison.OrdinalIgnoreCase));
                    ILearningDeliveryFAM[] alb = learningDelivery.LearningDeliveryFAMs?.Where(x =>
                                                                                              string.Equals(x.LearnDelFAMType, "ALB", StringComparison.OrdinalIgnoreCase)).ToArray();
                    LearningDeliveryPeriodisedValue[] payments = albLearningDelivery?.LearningDeliveryPeriodisedValues?.Where(IsPayment).ToArray();
                    LearningDeliveryPeriodisedValue   albCode  = albLearningDelivery?.LearningDeliveryPeriodisedValues?.SingleOrDefault(x =>
                                                                                                                                        string.Equals(x.AttributeName, AlbCode, StringComparison.OrdinalIgnoreCase));
                    var ldms = _stringUtilitiesService.GetArrayEntries(learningDelivery.LearningDeliveryFAMs?.Where(x => string.Equals(x.LearnDelFAMType, "LDM", StringComparison.OrdinalIgnoreCase)), 4);

                    string albBursaryFunding = string.Empty, albDateFrom = string.Empty, albDateTo = string.Empty;
                    if (alb != null && alb.Any())
                    {
                        albBursaryFunding = alb.Max(x => _stringUtilitiesService.TryGetInt(x.LearnDelFAMCode, 0)).ToString();
                        albDateFrom       = _stringUtilitiesService.GetDateTimeAsString(alb.Min(x => x.LearnDelFAMDateFromNullable ?? DateTime.MinValue), string.Empty, DateTime.MinValue);
                        albDateTo         = _stringUtilitiesService.GetDateTimeAsString(alb.Max(x => x.LearnDelFAMDateToNullable ?? DateTime.MinValue), string.Empty, DateTime.MinValue);
                    }

                    models.Add(new AllbOccupancyModel
                    {
                        LearnRefNumber    = learner.LearnRefNumber,
                        Uln               = learner.ULN,
                        DateOfBirth       = learner.DateOfBirthNullable?.ToString("dd/MM/yyyy"),
                        PreMergerUkprn    = learner.PrevUKPRNNullable,
                        CampId            = learner.CampId,
                        ProvSpecLearnMonA = learner.ProviderSpecLearnerMonitorings
                                            ?.FirstOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "A", StringComparison.OrdinalIgnoreCase))?.ProvSpecLearnMon,
                        ProvSpecLearnMonB = learner.ProviderSpecLearnerMonitorings
                                            ?.FirstOrDefault(x => string.Equals(x.ProvSpecLearnMonOccur, "B", StringComparison.OrdinalIgnoreCase))?.ProvSpecLearnMon,
                        AimSeqNumber           = learningDelivery.AimSeqNumber,
                        LearnAimRef            = learningDelivery.LearnAimRef,
                        LearnAimRefTitle       = larsModel.LearningAimTitle,
                        SwSupAimId             = learningDelivery.SWSupAimId,
                        WeightedRate           = albLearningDeliveryValue?.WeightedRate,
                        ApplicProgWeightFact   = albLearningDeliveryValue?.ApplicProgWeightFact,
                        NotionalNvqLevelV2     = larsModel.NotionalNvqLevel,
                        SectorSubjectAreaTier2 = larsModel.Tier2SectorSubjectArea,
                        AimType            = learningDelivery.AimType,
                        FundingModel       = 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,
                        LearnDelFamCodeAdl = learningDelivery.LearningDeliveryFAMs?.SingleOrDefault(x =>
                                                                                                    string.Equals(x.LearnDelFAMType, "ADL", StringComparison.OrdinalIgnoreCase))?.LearnDelFAMCode,
                        AlbBursaryFunding = albBursaryFunding,
                        AlbDateFrom       = albDateFrom,
                        AlbDateTo         = albDateTo,
                        LearnDelMonA      = ldms[0],
                        LearnDelMonB      = ldms[1],
                        LearnDelMonC      = ldms[2],
                        LearnDelMonD      = ldms[3],
                        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,
                        PartnerUkprn            = learningDelivery.PartnerUKPRNNullable,
                        DelLocPostCode          = learningDelivery.DelLocPostCode,
                        AreaCodeFactAdj         = albLearningDeliveryValue?.AreaCostFactAdj,
                        FundLine                = albLearningDeliveryValue?.FundLine,
                        LiabilityDate           = albLearningDeliveryValue?.LiabilityDate?.ToString("dd/MM/yyyy"),
                        PlannedNumOnProgInstalm = albLearningDeliveryValue?.PlannedNumOnProgInstalm,
                        ApplicFactDate          = albLearningDeliveryValue?.ApplicFactDate?.ToString("dd/MM/yyyy"),

                        Period1AlbCode          = albCode?.Period1,
                        Period1AlbPayment       = albSupportPaymentObj?.Period1,
                        Period1AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period1 ?? 0,
                        Period1AlbAreaUplift    = albAreaUpliftBalPaymentObj?.Period1 ?? 0,
                        Period1AlbTotal         = payments?.Sum(x => x.Period1) ?? 0,

                        Period2AlbCode          = albCode?.Period2 ?? 0,
                        Period2AlbPayment       = albSupportPaymentObj?.Period2 ?? 0,
                        Period2AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period2 ?? 0,
                        Period2AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period2 ?? 0,
                        Period2AlbTotal         = payments?.Sum(x => x.Period2) ?? 0,

                        Period3AlbCode          = albCode?.Period3 ?? 0,
                        Period3AlbPayment       = albSupportPaymentObj?.Period3 ?? 0,
                        Period3AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period3 ?? 0,
                        Period3AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period3 ?? 0,
                        Period3AlbTotal         = payments?.Sum(x => x.Period3) ?? 0,

                        Period4AlbCode          = albCode?.Period4 ?? 0,
                        Period4AlbPayment       = albSupportPaymentObj?.Period4 ?? 0,
                        Period4AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period4 ?? 0,
                        Period4AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period4 ?? 0,
                        Period4AlbTotal         = payments?.Sum(x => x.Period4) ?? 0,

                        Period5AlbCode          = albCode?.Period5 ?? 0,
                        Period5AlbPayment       = albSupportPaymentObj?.Period5 ?? 0,
                        Period5AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period5 ?? 0,
                        Period5AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period5 ?? 0,
                        Period5AlbTotal         = payments?.Sum(x => x.Period5) ?? 0,

                        Period6AlbCode          = albCode?.Period6 ?? 0,
                        Period6AlbPayment       = albSupportPaymentObj?.Period6 ?? 0,
                        Period6AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period6 ?? 0,
                        Period6AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period6 ?? 0,
                        Period6AlbTotal         = payments?.Sum(x => x.Period6) ?? 0,

                        Period7AlbCode          = albCode?.Period7 ?? 0,
                        Period7AlbPayment       = albSupportPaymentObj?.Period7 ?? 0,
                        Period7AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period7 ?? 0,
                        Period7AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period7 ?? 0,
                        Period7AlbTotal         = payments?.Sum(x => x.Period7) ?? 0,

                        Period8AlbCode          = albCode?.Period8 ?? 0,
                        Period8AlbPayment       = albSupportPaymentObj?.Period8 ?? 0,
                        Period8AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period8 ?? 0,
                        Period8AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period8 ?? 0,
                        Period8AlbTotal         = payments?.Sum(x => x.Period8) ?? 0,

                        Period9AlbCode          = albCode?.Period9 ?? 0,
                        Period9AlbPayment       = albSupportPaymentObj?.Period9 ?? 0,
                        Period9AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period9 ?? 0,
                        Period9AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period9 ?? 0,
                        Period9AlbTotal         = payments?.Sum(x => x.Period9) ?? 0,

                        Period10AlbCode          = albCode?.Period10 ?? 0,
                        Period10AlbPayment       = albSupportPaymentObj?.Period10 ?? 0,
                        Period10AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period10 ?? 0,
                        Period10AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period10 ?? 0,
                        Period10AlbTotal         = payments?.Sum(x => x.Period10) ?? 0,

                        Period11AlbCode          = albCode?.Period11 ?? 0,
                        Period11AlbPayment       = albSupportPaymentObj?.Period11 ?? 0,
                        Period11AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period11 ?? 0,
                        Period11AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period11 ?? 0,
                        Period11AlbTotal         = payments?.Sum(x => x.Period11) ?? 0,

                        Period12AlbCode          = albCode?.Period12 ?? 0,
                        Period12AlbPayment       = albSupportPaymentObj?.Period12 ?? 0,
                        Period12AlbOnProgPayment = albAreaUpliftOnProgPaymentObj?.Period12 ?? 0,
                        Period12AlbBalPayment    = albAreaUpliftBalPaymentObj?.Period12 ?? 0,
                        Period12AlbTotal         = payments?.Sum(x => x.Period12) ?? 0,

                        TotalAlbSupportPayment = (albSupportPaymentObj?.Period1 ?? 0) + (albSupportPaymentObj?.Period2 ?? 0) + (albSupportPaymentObj?.Period3 ?? 0) + (albSupportPaymentObj?.Period4 ?? 0) + (albSupportPaymentObj?.Period5 ?? 0) + (albSupportPaymentObj?.Period6 ?? 0) + (albSupportPaymentObj?.Period7 ?? 0)
                                                 + (albSupportPaymentObj?.Period8 ?? 0) + (albSupportPaymentObj?.Period9 ?? 0) + (albSupportPaymentObj?.Period10 ?? 0) + (albSupportPaymentObj?.Period11 ?? 0) + (albSupportPaymentObj?.Period12 ?? 0),
                        TotalAlbAreaUplift = (albAreaUpliftOnProgPaymentObj?.Period1 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period2 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period3 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period4 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period5 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period6 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period7 ?? 0)
                                             + (albAreaUpliftOnProgPaymentObj?.Period8 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period9 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period10 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period11 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period12 ?? 0),
                        TotalAlbBalPayment = (albAreaUpliftBalPaymentObj?.Period1 ?? 0) + (albAreaUpliftBalPaymentObj?.Period2 ?? 0) + (albAreaUpliftBalPaymentObj?.Period3 ?? 0) + (albAreaUpliftBalPaymentObj?.Period4 ?? 0) + (albAreaUpliftBalPaymentObj?.Period5 ?? 0) + (albAreaUpliftBalPaymentObj?.Period6 ?? 0) + (albAreaUpliftBalPaymentObj?.Period7 ?? 0)
                                             + (albAreaUpliftBalPaymentObj?.Period8 ?? 0) + (albAreaUpliftBalPaymentObj?.Period9 ?? 0) + (albAreaUpliftBalPaymentObj?.Period10 ?? 0) + (albAreaUpliftBalPaymentObj?.Period11 ?? 0) + (albAreaUpliftBalPaymentObj?.Period12 ?? 0),
                        TotalEarnedCash = (albSupportPaymentObj?.Period1 ?? 0) + (albSupportPaymentObj?.Period2 ?? 0) + (albSupportPaymentObj?.Period3 ?? 0) + (albSupportPaymentObj?.Period4 ?? 0) + (albSupportPaymentObj?.Period5 ?? 0) + (albSupportPaymentObj?.Period6 ?? 0) + (albSupportPaymentObj?.Period7 ?? 0)
                                          + (albSupportPaymentObj?.Period8 ?? 0) + (albSupportPaymentObj?.Period9 ?? 0) + (albSupportPaymentObj?.Period10 ?? 0) + (albSupportPaymentObj?.Period11 ?? 0) + (albSupportPaymentObj?.Period12 ?? 0)
                                          + (albAreaUpliftOnProgPaymentObj?.Period1 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period2 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period3 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period4 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period5 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period6 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period7 ?? 0)
                                          + (albAreaUpliftOnProgPaymentObj?.Period8 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period9 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period10 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period11 ?? 0) + (albAreaUpliftOnProgPaymentObj?.Period12 ?? 0)
                                          + (albAreaUpliftBalPaymentObj?.Period1 ?? 0) + (albAreaUpliftBalPaymentObj?.Period2 ?? 0) + (albAreaUpliftBalPaymentObj?.Period3 ?? 0) + (albAreaUpliftBalPaymentObj?.Period4 ?? 0) + (albAreaUpliftBalPaymentObj?.Period5 ?? 0) + (albAreaUpliftBalPaymentObj?.Period6 ?? 0) + (albAreaUpliftBalPaymentObj?.Period7 ?? 0)
                                          + (albAreaUpliftBalPaymentObj?.Period8 ?? 0) + (albAreaUpliftBalPaymentObj?.Period9 ?? 0) + (albAreaUpliftBalPaymentObj?.Period10 ?? 0) + (albAreaUpliftBalPaymentObj?.Period11 ?? 0) + (albAreaUpliftBalPaymentObj?.Period12 ?? 0)
                    });
                }
            }

            CheckWarnings(ilrError, larsError, albLearnerError);
            models.Sort(AllbOccupancyModelComparer);
            return(WriteResults(models));
        }
Example #2
0
        public void Build_SingleRow()
        {
            var reportServiceContext = Mock.Of <IReportServiceContext>();
            var dependentDataMock    = new Mock <IReportServiceDependentData>();

            var learningDeliveryFams = new List <ILearningDeliveryFAM>()
            {
                new TestLearningDeliveryFAM()
            };

            var providerSpecDeliveryMonitorings = new List <IProviderSpecDeliveryMonitoring>()
            {
                new TestProviderSpecDeliveryMonitoring(),
            };

            var appFinRecords = new List <IAppFinRecord>()
            {
                new TestAppFinRecord(),
            };

            var learningDelivery = new TestLearningDelivery()
            {
                FundModel                       = 81,
                LearnAimRef                     = "learnAimRef",
                AimSeqNumber                    = 1,
                AimType                         = 1,
                ProgTypeNullable                = 25,
                LearningDeliveryFAMs            = learningDeliveryFams,
                ProviderSpecDeliveryMonitorings = providerSpecDeliveryMonitorings,
                AppFinRecords                   = appFinRecords
            };

            var providerSpecLearnerMonitorings = new List <IProviderSpecLearnerMonitoring>()
            {
                new TestProviderSpecLearnerMonitoring(),
            };

            var learner = new TestLearner()
            {
                LearnRefNumber     = "LearnRefNumber",
                LearningDeliveries = new List <ILearningDelivery>()
                {
                    learningDelivery
                },
                ProviderSpecLearnerMonitorings = providerSpecLearnerMonitorings,
            };

            var message = new TestMessage()
            {
                Learners = new List <ILearner>()
                {
                    learner
                }
            };

            var larsLearningDelivery = new LARSLearningDelivery()
            {
                LearnAimRef = "learnAimRef"
            };

            var referenceDataRoot = new ReferenceDataRoot()
            {
                LARSLearningDeliveries = new List <LARSLearningDelivery>()
                {
                    larsLearningDelivery
                }
            };

            var fm81LearningDeliveryValue = new LearningDeliveryValue();

            var fm81LearningDelivery = new LearningDelivery()
            {
                AimSeqNumber                     = 1,
                LearningDeliveryValues           = fm81LearningDeliveryValue,
                LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue>()
                {
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81CoreGovContPayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81MathEngOnProgPayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81MathEngBalPayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81LearnSuppFundCash),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81SmallBusPayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81YoungAppPayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm81AchPayment),
                }
            };

            var fm81Global = new FM81Global()
            {
                Learners = new List <FM81Learner>()
                {
                    new FM81Learner()
                    {
                        LearnRefNumber     = "LearnRefNumber",
                        LearningDeliveries = new List <LearningDelivery>()
                        {
                            fm81LearningDelivery,
                        }
                    }
                }
            };

            dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message);
            dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot);
            dependentDataMock.Setup(d => d.Get <FM81Global>()).Returns(fm81Global);

            var providerSpecDeliveryMonitoringModel = new ProviderSpecDeliveryMonitoringModel();
            var providerSpecLearnerMonitoringModel  = new ProviderSpecLearnerMonitoringModel();
            var learningDeliveryFamsModel           = new LearningDeliveryFAMsModel();

            var ilrModelMapperMock = new Mock <IIlrModelMapper>();

            ilrModelMapperMock.Setup(m => m.MapLearningDeliveryFAMs(learningDeliveryFams)).Returns(learningDeliveryFamsModel);
            ilrModelMapperMock.Setup(m => m.MapProviderSpecDeliveryMonitorings(providerSpecDeliveryMonitorings)).Returns(providerSpecDeliveryMonitoringModel);
            ilrModelMapperMock.Setup(m => m.MapProviderSpecLearnerMonitorings(providerSpecLearnerMonitorings)).Returns(providerSpecLearnerMonitoringModel);

            var result = NewBuilder(ilrModelMapperMock.Object).Build(reportServiceContext, dependentDataMock.Object).ToList();

            result.Should().HaveCount(1);

            var row = result[0];

            row.Learner.Should().Be(learner);
            row.LearningDelivery.Should().Be(learningDelivery);
            row.LarsLearningDelivery.Should().Be(larsLearningDelivery);
            row.Fm81LearningDelivery.Should().Be(fm81LearningDeliveryValue);

            row.ProviderSpecDeliveryMonitoring.Should().Be(providerSpecDeliveryMonitoringModel);
            row.ProviderSpecLearnerMonitoring.Should().Be(providerSpecLearnerMonitoringModel);
            row.PeriodisedValues.Should().NotBeNull();
            row.LearningDeliveryFAMs.Should().Be(learningDeliveryFamsModel);
        }
        public void Build_SingleRow()
        {
            var reportServiceContext = Mock.Of <IReportServiceContext>();
            var dependentDataMock    = new Mock <IReportServiceDependentData>();

            var adlLearningDeliveryFam = new Mock <ILearningDeliveryFAM>();

            adlLearningDeliveryFam.SetupGet(fam => fam.LearnDelFAMType).Returns("ADL");
            adlLearningDeliveryFam.SetupGet(fam => fam.LearnDelFAMCode).Returns("1");

            var albLearningDeliveryFam = new Mock <ILearningDeliveryFAM>();

            albLearningDeliveryFam.SetupGet(fam => fam.LearnDelFAMType).Returns("ALB");


            var learningDeliveryFams = new List <ILearningDeliveryFAM>()
            {
                albLearningDeliveryFam.Object,
                adlLearningDeliveryFam.Object,
            };

            var providerSpecDeliveryMonitorings = new List <IProviderSpecDeliveryMonitoring>()
            {
                new TestProviderSpecDeliveryMonitoring(),
            };

            var learningDelivery = new TestLearningDelivery()
            {
                FundModel                       = 99,
                LearnAimRef                     = "learnAimRef",
                AimSeqNumber                    = 1,
                LearningDeliveryFAMs            = learningDeliveryFams,
                ProviderSpecDeliveryMonitorings = providerSpecDeliveryMonitorings
            };

            var providerSpecLearnerMonitorings = new List <IProviderSpecLearnerMonitoring>()
            {
                new TestProviderSpecLearnerMonitoring(),
            };

            var learner = new TestLearner()
            {
                LearnRefNumber     = "LearnRefNumber",
                LearningDeliveries = new List <ILearningDelivery>()
                {
                    learningDelivery
                },
                ProviderSpecLearnerMonitorings = providerSpecLearnerMonitorings,
            };

            var message = new TestMessage()
            {
                Learners = new List <ILearner>()
                {
                    learner
                }
            };

            var larsLearningDelivery = new LARSLearningDelivery()
            {
                LearnAimRef = "learnAimRef"
            };

            var referenceDataRoot = new ReferenceDataRoot()
            {
                LARSLearningDeliveries = new List <LARSLearningDelivery>()
                {
                    larsLearningDelivery
                }
            };

            var albLearningDeliveryValue = new LearningDeliveryValue();

            var albLearningDelivery = new LearningDelivery()
            {
                AimSeqNumber                     = 1,
                LearningDeliveryValue            = albLearningDeliveryValue,
                LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue>()
                {
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35AchievePayPct),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35AchievePayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash),
                }
            };

            var fm35Global = new ALBGlobal()
            {
                Learners = new List <ALBLearner>()
                {
                    new ALBLearner()
                    {
                        LearnRefNumber     = "LearnRefNumber",
                        LearningDeliveries = new List <LearningDelivery>()
                        {
                            albLearningDelivery,
                        }
                    }
                }
            };

            dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message);
            dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot);
            dependentDataMock.Setup(d => d.Get <ALBGlobal>()).Returns(fm35Global);

            var providerSpecDeliveryMonitoringModel = new ProviderSpecDeliveryMonitoringModel();
            var providerSpecLearnerMonitoringModel  = new ProviderSpecLearnerMonitoringModel();
            var learningDeliveryFamsModel           = new LearningDeliveryFAMsModel();

            var ilrModelMapperMock = new Mock <IIlrModelMapper>();

            ilrModelMapperMock.Setup(m => m.MapLearningDeliveryFAMs(learningDeliveryFams)).Returns(learningDeliveryFamsModel);
            ilrModelMapperMock.Setup(m => m.MapProviderSpecDeliveryMonitorings(providerSpecDeliveryMonitorings)).Returns(providerSpecDeliveryMonitoringModel);
            ilrModelMapperMock.Setup(m => m.MapProviderSpecLearnerMonitorings(providerSpecLearnerMonitorings)).Returns(providerSpecLearnerMonitoringModel);

            var result = NewBuilder(ilrModelMapperMock.Object).Build(reportServiceContext, dependentDataMock.Object).ToList();

            result.Should().HaveCount(1);

            var row = result[0];

            row.Learner.Should().Be(learner);
            row.LearningDelivery.Should().Be(learningDelivery);
            row.LarsLearningDelivery.Should().Be(larsLearningDelivery);
            row.Fm99LearningDelivery.Should().Be(albLearningDeliveryValue);

            row.ProviderSpecDeliveryMonitoring.Should().Be(providerSpecDeliveryMonitoringModel);
            row.ProviderSpecLearnerMonitoring.Should().Be(providerSpecLearnerMonitoringModel);
            row.PeriodisedValues.Should().NotBeNull();
            row.LearningDeliveryFAMs.Should().Be(learningDeliveryFamsModel);
        }
        public void Build_SingleRow()
        {
            var reportServiceContext = Mock.Of <IReportServiceContext>();
            var dependentDataMock    = new Mock <IReportServiceDependentData>();

            var learningDeliveryFams = new List <ILearningDeliveryFAM>()
            {
                new TestLearningDeliveryFAM()
                {
                    LearnDelFAMType = "SOF",
                    LearnDelFAMCode = "110",
                }
            };

            var providerSpecDeliveryMonitorings = new List <IProviderSpecDeliveryMonitoring>()
            {
                new TestProviderSpecDeliveryMonitoring(),
            };

            var learningDelivery = new TestLearningDelivery()
            {
                LearnAimRef                     = "learnAimRef",
                AimSeqNumber                    = 1,
                LSDPostcode                     = "Postcode1",
                LearningDeliveryFAMs            = learningDeliveryFams,
                PartnerUKPRNNullable            = 12345678,
                ProviderSpecDeliveryMonitorings = providerSpecDeliveryMonitorings
            };

            var providerSpecLearnerMonitorings = new List <IProviderSpecLearnerMonitoring>()
            {
                new TestProviderSpecLearnerMonitoring(),
            };

            var learner = new TestLearner()
            {
                LearnRefNumber     = "LearnRefNumber",
                LearningDeliveries = new List <ILearningDelivery>()
                {
                    learningDelivery
                },
                ProviderSpecLearnerMonitorings = providerSpecLearnerMonitorings,
            };

            var message = new TestMessage()
            {
                Learners = new List <ILearner>()
                {
                    learner
                }
            };

            var larsLearningDelivery = new LARSLearningDelivery()
            {
                LearnAimRef = "learnAimRef",
                LARSLearningDeliveryCategories = new HashSet <LARSLearningDeliveryCategory>
                {
                    new LARSLearningDeliveryCategory
                    {
                        CategoryRef = 123
                    }
                }
            };

            var mcaGlaSofLookup = new McaGlaSofLookup()
            {
                SofCode         = "110",
                McaGlaShortCode = "GMCA",
                McaGlaFullName  = "GMCA Full",
            };

            var referenceDataRoot = new ReferenceDataRoot()
            {
                LARSLearningDeliveries = new List <LARSLearningDelivery>()
                {
                    larsLearningDelivery
                },
                Postcodes = new List <Postcode>
                {
                    new Postcode
                    {
                        PostCode = "Postcode1"
                    }
                },
                DevolvedPostocdes = new DevolvedPostcodes()
                {
                    McaGlaSofLookups = new List <McaGlaSofLookup>()
                    {
                        mcaGlaSofLookup
                    }
                },
                Organisations = new List <Organisation>()
                {
                    new Organisation()
                    {
                        UKPRN = 12345678, Name = "Partner Provider"
                    }
                }
            };

            var fm35LearningDeliveryValue = new LearningDeliveryValue();

            var fm35LearningDelivery = new LearningDelivery()
            {
                AimSeqNumber                     = 1,
                LearningDeliveryValue            = fm35LearningDeliveryValue,
                LearningDeliveryPeriodisedValues = new List <LearningDeliveryPeriodisedValue>()
                {
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35OnProgPayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35AchievePayPct),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35AchievePayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35EmpOutcomePay),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35BalancePayment),
                    BuildPeriodisedValuesForAttribute(AttributeConstants.Fm35LearnSuppFundCash),
                }
            };

            var fm35Global = new FM35Global()
            {
                Learners = new List <FM35Learner>()
                {
                    new FM35Learner()
                    {
                        LearnRefNumber     = "LearnRefNumber",
                        LearningDeliveries = new List <LearningDelivery>()
                        {
                            fm35LearningDelivery,
                        }
                    }
                }
            };

            dependentDataMock.Setup(d => d.Get <IMessage>()).Returns(message);
            dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot);
            dependentDataMock.Setup(d => d.Get <FM35Global>()).Returns(fm35Global);

            var providerSpecDeliveryMonitoringModel = new ProviderSpecDeliveryMonitoringModel();
            var providerSpecLearnerMonitoringModel  = new ProviderSpecLearnerMonitoringModel();
            var learningDeliveryFamsModel           = new LearningDeliveryFAMsModel()
            {
                SOF = "110"
            };

            var ilrModelMapperMock      = new Mock <IIlrModelMapper>();
            var academicYearServiceMock = new Mock <IAcademicYearService>();

            ilrModelMapperMock.Setup(m => m.MapLearningDeliveryFAMs(learningDeliveryFams)).Returns(learningDeliveryFamsModel);
            ilrModelMapperMock.Setup(m => m.MapProviderSpecDeliveryMonitorings(providerSpecDeliveryMonitorings)).Returns(providerSpecDeliveryMonitoringModel);
            ilrModelMapperMock.Setup(m => m.MapProviderSpecLearnerMonitorings(providerSpecLearnerMonitorings)).Returns(providerSpecLearnerMonitoringModel);

            var result = NewBuilder(ilrModelMapperMock.Object, academicYearServiceMock.Object).Build(reportServiceContext, dependentDataMock.Object).ToList();

            result.Should().HaveCount(1);

            var row = result[0];

            row.Learner.Should().Be(learner);
            row.LearningDelivery.Should().Be(learningDelivery);
            row.LarsLearningDelivery.Should().Be(larsLearningDelivery);
            row.Fm35LearningDelivery.Should().Be(fm35LearningDeliveryValue);

            row.ProviderSpecDeliveryMonitoring.Should().Be(providerSpecDeliveryMonitoringModel);
            row.ProviderSpecLearnerMonitoring.Should().Be(providerSpecLearnerMonitoringModel);
            row.PeriodisedValues.Should().NotBeNull();
            row.LearningDeliveryFAMs.Should().Be(learningDeliveryFamsModel);

            row.McaGlaShortCode.Should().Be("GMCA");
        }