public void Condense()
        {
            var learnerOne   = new ALBLearner();
            var learnerTwo   = new ALBLearner();
            var learnerThree = new ALBLearner();
            var learnerFour  = new ALBLearner();
            var learnerFive  = new ALBLearner();
            var learnerSix   = new ALBLearner();

            var globalOne = new ALBGlobal()
            {
                Learners = new List <ALBLearner>()
                {
                    learnerOne,
                    learnerTwo,
                },
            };

            var globalTwo = new ALBGlobal()
            {
                Learners = new List <ALBLearner>
                {
                    learnerThree,
                    learnerFour,
                },
            };

            var globalThree = new ALBGlobal()
            {
                Learners = new List <ALBLearner>
                {
                    learnerFive,
                    learnerSix,
                },
            };

            var fundingOutputs = new List <ALBGlobal>()
            {
                globalOne,
                globalTwo,
                globalThree,
            };

            var fundingOutput = NewService().Condense(fundingOutputs);

            fundingOutput.Should().Be(globalOne);
            fundingOutput.Learners.Should().HaveCount(6);
            fundingOutput.Learners.Should().Contain(new[] { learnerOne, learnerTwo, learnerThree, learnerFour, learnerFive, learnerSix });
        }
Beispiel #2
0
        public void BuildTest()
        {
            var dependentDataMock = new Mock <IReportServiceDependentData>();

            var referenceDataRoot = new ReferenceDataRoot()
            {
                Organisations = new List <Organisation>()
                {
                    new Organisation()
                    {
                        UKPRN = 987654321,
                        Name  = "Provider XYZ",
                        OrganisationCoFRemovals = new List <OrganisationCoFRemoval>()
                        {
                            new OrganisationCoFRemoval()
                            {
                                EffectiveFrom = new DateTime(2019, 01, 01),
                                CoFRemoval    = (decimal)4500.12
                            }
                        },
                    }
                },
                MetaDatas = new MetaData()
                {
                    ReferenceDataVersions = new ReferenceDataVersion()
                    {
                        OrganisationsVersion = new OrganisationsVersion {
                            Version = "1.1.1.1"
                        },
                        Employers = new EmployersVersion {
                            Version = "2.2.2.2"
                        },
                        LarsVersion = new LarsVersion {
                            Version = "3.3.3.3"
                        },
                        PostcodesVersion = new PostcodesVersion {
                            Version = "4.4.4.4"
                        },
                        CampusIdentifierVersion = new CampusIdentifierVersion()
                        {
                            Version = "5.5.5.5"
                        },
                        EasFileDetails = new EasFileDetails {
                            UploadDateTime = new DateTime(2020, 1, 1, 1, 1, 1)
                        }
                    }
                }
            };

            var easFundingLines = BuildEasFundingLines();

            var fm35Learner = new FM35Learner
            {
                LearnRefNumber     = "Learner1",
                LearningDeliveries = BuildFm35LearningDeliveries()
            };

            var fm35Global = new FM35Global()
            {
                Learners = new List <FM35Learner>()
                {
                    fm35Learner
                }
            };

            var albLearner = new ALBLearner()
            {
                LearnRefNumber     = "Learner1",
                LearningDeliveries = BuildAlbLearningDeliveries()
            };
            var albGlobal = new ALBGlobal()
            {
                Learners = new List <ALBLearner>()
                {
                    albLearner
                }
            };

            dependentDataMock.Setup(d => d.Get <ReferenceDataRoot>()).Returns(referenceDataRoot);
            dependentDataMock.Setup(d => d.Get <FM35Global>()).Returns(fm35Global);
            dependentDataMock.Setup(d => d.Get <ALBGlobal>()).Returns(albGlobal);
            dependentDataMock.Setup(d => d.Get <List <EasFundingLine> >()).Returns(easFundingLines);

            var submissionDateTime       = new DateTime(2020, 1, 1, 1, 1, 1);
            var ukDateTime               = new DateTime(2020, 1, 1, 1, 1, 1);
            var dateTimeProvider         = new Mock <IDateTimeProvider>();
            var reportServiceContextMock = new Mock <IReportServiceContext>();

            reportServiceContextMock.SetupGet(c => c.Ukprn).Returns(987654321);
            reportServiceContextMock.SetupGet(c => c.SubmissionDateTimeUtc).Returns(submissionDateTime);
            reportServiceContextMock.SetupGet(c => c.ServiceReleaseVersion).Returns("11.22.3300.4321");
            reportServiceContextMock.SetupGet(c => c.IlrReportingFilename).Returns("ILR-12345678-2021-20201005-151322-01.xml");
            reportServiceContextMock.SetupGet(c => c.EasReportingFilename).Returns("EAS-12345678-2021-20201005-151322-01.csv");


            dateTimeProvider.Setup(p => p.GetNowUtc()).Returns(submissionDateTime);
            dateTimeProvider.SetupSequence(p => p.ConvertUtcToUk(It.IsAny <DateTime>()))
            .Returns(ukDateTime)
            .Returns(new DateTime(2020, 1, 1, 1, 1, 1));


            var result = NewBuilder(dateTimeProvider.Object).Build(reportServiceContextMock.Object, dependentDataMock.Object);

            result.ProviderName.Should().Be("Provider XYZ");
            result.Ukprn.Should().Be("987654321");
            result.IlrFile.Should().Be("ILR-12345678-2021-20201005-151322-01.xml");
            result.EasFile.Should().Be("EAS-12345678-2021-20201005-151322-01.csv");
            result.Year.Should().Be("2020/21");
            result.ReportGeneratedAt.Should().Be("Report generated at: 01:01:01 on 01/01/2020");
            result.ApplicationVersion.Should().Be("11.22.3300.4321");
            result.LarsData.Should().Be("3.3.3.3");
            result.OrganisationData.Should().Be("1.1.1.1");
            result.PostcodeData.Should().Be("4.4.4.4");
            result.CampusIdData.Should().Be("5.5.5.5");

            result.AEBProgrammeFunding.MidYearClaims.Should().Be(135.324m);
            result.AEBProgrammeFunding.YearEndClaims.Should().Be(350.384m);
            result.AEBProgrammeFunding.FinalClaims.Should().Be(489.3132m);

            result.AEBLearningSupport.MidYearClaims.Should().Be(44.331m);
            result.AEBLearningSupport.YearEndClaims.Should().Be(115.096m);
            result.AEBLearningSupport.FinalClaims.Should().Be(161.3283m);

            result.AEBProgrammeFunding1924.MidYearClaims.Should().Be(114.324m);
            result.AEBProgrammeFunding1924.YearEndClaims.Should().Be(295.384m);
            result.AEBProgrammeFunding1924.FinalClaims.Should().Be(411.3132m);

            result.AEBLearningSupport1924.MidYearClaims.Should().Be(44.331m);
            result.AEBLearningSupport1924.YearEndClaims.Should().Be(115.096m);
            result.AEBLearningSupport1924.FinalClaims.Should().Be(161.3283m);

            result.ALBBursaryFunding.MidYearClaims.Should().Be(23.331m);
            result.ALBBursaryFunding.YearEndClaims.Should().Be(60.096m);
            result.ALBBursaryFunding.FinalClaims.Should().Be(83.3283m);

            result.ALBAreaCosts.MidYearClaims.Should().Be(67.662m);
            result.ALBAreaCosts.YearEndClaims.Should().Be(175.192m);
            result.ALBAreaCosts.FinalClaims.Should().Be(244.6566m);

            result.ALBExcessSupport.MidYearClaims.Should().Be(21m);
            result.ALBExcessSupport.YearEndClaims.Should().Be(55m);
            result.ALBExcessSupport.FinalClaims.Should().Be(78m);
        }
Beispiel #3
0
        public async Task <List <FundingSummaryModel> > BuildAsync(IReportServiceContext reportServiceContext, CancellationToken cancellationToken)
        {
            FundingSummaryModel fundingSummaryModelAlbFunding = new FundingSummaryModel()
            {
                Title = "ILR Advanced Loans Bursary Funding (£)"
            };

            FundingSummaryModel fundingSummaryModelAlbAreaCosts = new FundingSummaryModel()
            {
                Title = "ILR Advanced Loans Bursary Area Costs (£)"
            };

            List <FundingSummaryModel> fundingSummaryModels = new List <FundingSummaryModel>()
            {
                fundingSummaryModelAlbFunding,
                fundingSummaryModelAlbAreaCosts
            };

            Task <IMessage>       ilrFile       = _ilrProviderService.GetIlrFile(reportServiceContext, cancellationToken);
            Task <List <string> > validLearners = _validLearnersService.GetLearnersAsync(reportServiceContext, cancellationToken);
            Task <ALBGlobal>      albData       = _allbProviderService.GetAllbData(reportServiceContext, cancellationToken);

            await Task.WhenAll(ilrFile, validLearners, albData);

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

            try
            {
                ILearner[] learners = ilrFile.Result?.Learners?.Where(x => validLearners.Result.Contains(x.LearnRefNumber)).ToArray();

                foreach (ILearner learner in learners ?? Enumerable.Empty <ILearner>())
                {
                    ALBLearner albLearner = albData.Result?.Learners?.SingleOrDefault(x => string.Equals(x.LearnRefNumber, learner.LearnRefNumber, StringComparison.OrdinalIgnoreCase));
                    if (albLearner == null)
                    {
                        albLearnerError.Add(learner.LearnRefNumber);
                        continue;
                    }

                    foreach (ILearningDelivery learningDelivery in learner.LearningDeliveries ?? Enumerable.Empty <ILearningDelivery>())
                    {
                        LearningDelivery albLearningDeliveryAreaCosts = albLearner.LearningDeliveries?.Where(x => x.LearningDeliveryValue.FundLine == "Advanced Learner Loans Bursary").SingleOrDefault(x => x.AimSeqNumber == learningDelivery.AimSeqNumber);

                        if (learningDelivery.LearningDeliveryFAMs != null && learningDelivery.LearningDeliveryFAMs.Any(x =>
                                                                                                                       !(string.Equals(x.LearnDelFAMType, Constants.LearningDeliveryFAMCodeLDM, StringComparison.OrdinalIgnoreCase) && string.Equals(x.LearnDelFAMCode, "359", StringComparison.OrdinalIgnoreCase))))
                        {
                            TotalAlbFunding(albLearningDeliveryAreaCosts?.LearningDeliveryPeriodisedValues, reportServiceContext.ReturnPeriod, AlbSupportPayment, fundingSummaryModelAlbFunding);
                        }

                        TotalAlbAreaCosts(albLearningDeliveryAreaCosts?.LearningDeliveryPeriodisedValues, reportServiceContext.ReturnPeriod, fundingSummaryModelAlbAreaCosts);
                    }
                }

                if (ilrError.Any())
                {
                    _logger.LogWarning($"Failed to get one or more ILR learners while {nameof(AllbBuilder)}.{nameof(BuildAsync)}: {_stringUtilitiesService.JoinWithMaxLength(ilrError)}");
                }

                if (albLearnerError.Any())
                {
                    _logger.LogWarning($"Failed to get one or more ALB learners while {nameof(AllbBuilder)}.{nameof(BuildAsync)}: {_stringUtilitiesService.JoinWithMaxLength(albLearnerError)}");
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("AlbBuilder BuildAsync failed with Exception: ", ex);
            }

            return(fundingSummaryModels);
        }
        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));
        }
Beispiel #5
0
        public async Task <ALBGlobal> GetAllbData(IReportServiceContext reportServiceContext, CancellationToken cancellationToken)
        {
            await _getDataLock.WaitAsync(cancellationToken);

            try
            {
                if (_loadedDataAlready)
                {
                    return(_fundingOutputs);
                }

                cancellationToken.ThrowIfCancellationRequested();

                _loadedDataAlready = true;
                int ukPrn = reportServiceContext.Ukprn;

                _logger.LogWarning($"ReportServiceCollectionName {reportServiceContext.CollectionName};");

                if (string.Equals(reportServiceContext.CollectionName, "ILR1819", StringComparison.OrdinalIgnoreCase))
                {
                    string albFilename = reportServiceContext.FundingALBOutputKey;
                    _logger.LogWarning($"Reading {albFilename}; Storage is {_storage}; CancellationToken is {cancellationToken}");
                    using (MemoryStream ms = new MemoryStream())
                    {
                        await _storage.GetAsync(albFilename, ms, cancellationToken);

                        _fundingOutputs = _jsonSerializationService.Deserialize <ALBGlobal>(ms);
                    }
                }
                else
                {
                    ALBGlobal albGlobal = new ALBGlobal();
                    using (var ilrContext = _ilrRulebaseContextFactory())
                    {
                        _logger.LogWarning($"AllbProviderService - Accessing Db;");
                        var albGlobalDb = await ilrContext.ALB_globals.FirstOrDefaultAsync(x => x.UKPRN == ukPrn, cancellationToken);

                        using (var ilrValidContext = _ilrValidContextFactory())
                        {
                            ALB_LearningDelivery[] res = await ilrContext.ALB_LearningDeliveries
                                                         .Where(x => x.UKPRN == ukPrn)
                                                         .Include(x => x.ALB_LearningDelivery_PeriodisedValues).ToArrayAsync(cancellationToken);

                            IGrouping <string, ALB_LearningDelivery>[] learners = res.GroupBy(x => x.LearnRefNumber).ToArray();

                            albGlobal.Learners = new System.Collections.Generic.List <ALBLearner>();

                            foreach (IGrouping <string, ALB_LearningDelivery> albLearningDeliveries in learners)
                            {
                                var learningDeliveryDto = new List <LearningDelivery>();
                                foreach (var ld in albLearningDeliveries)
                                {
                                    var ldPeriodisedValues = ld.ALB_LearningDelivery_PeriodisedValues.Select(ldpv =>
                                                                                                             new LearningDeliveryPeriodisedValue()
                                    {
                                        AttributeName = ldpv.AttributeName,
                                        Period1       = ldpv.Period_1,
                                        Period2       = ldpv.Period_2,
                                        Period3       = ldpv.Period_3,
                                        Period4       = ldpv.Period_4,
                                        Period5       = ldpv.Period_5,
                                        Period6       = ldpv.Period_6,
                                        Period7       = ldpv.Period_7,
                                        Period8       = ldpv.Period_8,
                                        Period9       = ldpv.Period_9,
                                        Period10      = ldpv.Period_10,
                                        Period11      = ldpv.Period_11,
                                        Period12      = ldpv.Period_12
                                    }).ToList();

                                    learningDeliveryDto.Add(new LearningDelivery()
                                    {
                                        AimSeqNumber = ld.AimSeqNumber,
                                        LearningDeliveryPeriodisedValues = ldPeriodisedValues,
                                        LearningDeliveryValue            = new LearningDeliveryValue()
                                        {
                                            FundLine = ld.FundLine // todo: finish the entire LearningDeliveryValue here
                                        }
                                    });
                                }

                                ALBLearner learner = new ALBLearner()
                                {
                                    LearnRefNumber     = albLearningDeliveries.Key,
                                    LearningDeliveries = learningDeliveryDto
                                };

                                albGlobal.Learners.Add(learner);
                            }
                        }

                        if (albGlobalDb != null)
                        {
                            albGlobal.LARSVersion             = albGlobalDb.LARSVersion;
                            albGlobal.PostcodeAreaCostVersion = albGlobalDb.PostcodeAreaCostVersion;
                            albGlobal.RulebaseVersion         = albGlobalDb.RulebaseVersion;
                            albGlobal.UKPRN = albGlobalDb.UKPRN;
                        }
                    }

                    _fundingOutputs = albGlobal;
                }
            }
            finally
            {
                _getDataLock.Release();
            }

            return(_fundingOutputs);
        }