private ICollection <Delivery> BuildDeliveries(CrossYearDataModel dataModel)
        {
            var deliveries = new List <Delivery>();

            var contractDictionary = dataModel.FcsContracts
                                     .GroupBy(x => x.FundingStreamPeriodCode, StringComparer.OrdinalIgnoreCase)
                                     .ToDictionary(x => x.Key, x => x.Select(y => y.ContractAllocationNumber).ToList(), StringComparer.OrdinalIgnoreCase);

            foreach (var section in ReportSectionGroupDictionary)
            {
                var fsp          = FspLookup.GetValueOrDefault(section.Key);
                var paymentTypes = ReportSectionPaymentTypeLookup.GetValueOrDefault(section.Key);

                var contracts       = contractDictionary?.GetValueOrDefault(fsp);
                var contractNumbers = string.Join(";", contractDictionary?.GetValueOrDefault(fsp) ?? Enumerable.Empty <string>());

                var payments           = dataModel.Payments.Where(p => section.Value.Contains(p.FundingLineType));
                var adjustmentPayments = dataModel.AdjustmentPayments.Where(p => paymentTypes.Contains(p.PaymentType));

                var values = adjustmentPayments.Select(p =>
                {
                    int.TryParse(p.CollectionPeriodName.Substring(p.CollectionPeriodName.Length - 2), out var period);
                    return(new FSRValue
                    {
                        AcademicYear = p.AcademicYear,
                        DeliveryPeriod = p.CollectionPeriod,
                        CollectionPeriod = period,
                        Value = p.Amount
                    });
                });

                values = values.Concat(payments.Select(p => new FSRValue
                {
                    AcademicYear     = p.AcademicYear,
                    DeliveryPeriod   = p.DeliveryPeriod,
                    CollectionPeriod = p.CollectionPeriod,
                    Value            = p.Amount
                }));

                var contractValues = dataModel.FcsAllocations
                                     .Where(x => fsp.Equals(x.FspCode, StringComparison.OrdinalIgnoreCase))
                                     .Select(x => new ContractValue
                {
                    DeliveryPeriod    = x.Period,
                    Value             = x.PlannedValue,
                    ApprovalTimestamp = x.ApprovalTimestamp
                });

                deliveries.Add(new Delivery
                {
                    DeliveryName   = section.Key,
                    ContractNumber = contractNumbers,
                    FSRValues      = values.ToList(),
                    ContractValues = contractValues.ToList(),
                    FcsPayments    = dataModel.FcsPayments.Where(x => x.FspCode.Equals(fsp, StringComparison.OrdinalIgnoreCase) && contracts.Contains(x.ContractAllocationNumber)).ToList()
                });
            }

            return(deliveries);
        }
 private HeaderInfo BuildHeader(CrossYearDataModel dataModel, IReportServiceContext reportServiceContext)
 {
     return(new HeaderInfo
     {
         UKPRN = reportServiceContext.Ukprn,
         ProviderName = dataModel.OrgName
     });
 }
        public CrossYearPaymentsModel Build(CrossYearDataModel dataModel, IReportServiceContext reportServiceContext)
        {
            var headerInfo = BuildHeader(dataModel, reportServiceContext);
            var footerInfo = BuildFooter();
            var deliveries = BuildDeliveries(dataModel);

            return(new CrossYearPaymentsModel
            {
                HeaderInfo = headerInfo,
                FooterInfo = footerInfo,
                Deliveries = deliveries
            });
        }
Beispiel #4
0
        public async Task GenerateReportEmptyModel()
        {
            var cancellationToken = CancellationToken.None;
            var academicYear      = 2021;
            var returnPeriod      = 1;
            var ukprn             = 123456;
            var fileName          = "FileName.xlsx";
            var container         = "";

            var crossYearPaymentsModel = new CrossYearPaymentsModel();
            var reportServiceContext   = new Mock <IReportServiceContext>();

            var dataModel = new CrossYearDataModel();

            reportServiceContext.SetupGet(c => c.Ukprn).Returns(ukprn);
            reportServiceContext.SetupGet(c => c.CollectionYear).Returns(academicYear);
            reportServiceContext.SetupGet(c => c.Container).Returns(container);
            reportServiceContext.SetupGet(c => c.ReturnPeriod).Returns(returnPeriod);

            var excelFileServiceMock = new Mock <IExcelFileService>();
            var fileNameServiceMock  = new Mock <IFileNameService>();
            var modelBuilderMock     = new Mock <ICrossYearModelBuilder>();
            var renderServiceMock    = new Mock <ICrossYearRenderService>();
            var dataProviderMock     = new Mock <ICrossYearDataProvider>();

            var excelService  = GetExcelFileService(excelFileServiceMock, false);
            var renderService = GetRenderService(renderServiceMock, false);

            fileNameServiceMock.Setup(s => s.GetFilename(reportServiceContext.Object, "Beta Cross Year Indicative Payments Report", OutputTypes.Excel, true, true)).Returns(fileName);

            dataProviderMock.Setup(b => b.ProvideAsync(reportServiceContext.Object, cancellationToken)).ReturnsAsync(dataModel);

            modelBuilderMock.Setup(b => b.Build(dataModel, reportServiceContext.Object)).Returns(crossYearPaymentsModel);

            var report = NewReport(excelService, fileNameServiceMock.Object, modelBuilderMock.Object, renderService, dataProviderMock.Object);

            await report.GenerateReport(reportServiceContext.Object, cancellationToken);
        }
        public async Task <CrossYearDataModel> ProvideAsync(IReportServiceContext reportServiceContext, CancellationToken cancellationToken)
        {
            var orgNameTask = _orgDataProvider.ProvideAsync(reportServiceContext.Ukprn);

            var fcsAllocationsTask         = _fcsDataProvider.ProvideAllocationsAsync(reportServiceContext.Ukprn);
            var fcsPaymentsTask            = _fcsDataProvider.ProvidePaymentsAsync(reportServiceContext.Ukprn);
            var fcsContractsTask           = _fcsDataProvider.ProviderContractsAsync(reportServiceContext.Ukprn);
            var appsPaymentTask            = _appsDataProvider.ProvidePaymentsAsync(reportServiceContext.Ukprn);
            var appsAdjustmentPaymentsTask = _appsDataProvider.ProvideAdjustmentPaymentsAsync(reportServiceContext.Ukprn);

            await Task.WhenAll(orgNameTask, fcsAllocationsTask, fcsPaymentsTask, fcsContractsTask, appsPaymentTask, appsAdjustmentPaymentsTask);

            var model = new CrossYearDataModel
            {
                OrgName            = orgNameTask.Result,
                Payments           = appsPaymentTask.Result,
                AdjustmentPayments = appsAdjustmentPaymentsTask.Result,
                FcsAllocations     = fcsAllocationsTask.Result,
                FcsPayments        = fcsPaymentsTask.Result,
                FcsContracts       = fcsContractsTask.Result
            };

            return(model);
        }
Beispiel #6
0
        public async Task GenerateReport()
        {
            var cancellationToken = CancellationToken.None;
            var academicYear      = 2021;
            var returnPeriod      = 2;
            var ukprn             = 123456;
            var fileName          = "FileName.xlsx";
            var container         = "";

            var crossYearPaymentsModel = new CrossYearPaymentsModel()
            {
                HeaderInfo = new HeaderInfo
                {
                    ProviderName = "Test Provider",
                    UKPRN        = 12345678
                },
                FooterInfo = new FooterInfo
                {
                    ReportGeneratedAt = "Report generated at 13:34:52 08/11/20"
                },
                Deliveries = new List <Delivery>
                {
                    new Delivery
                    {
                        ContractNumber = "Contract 1",
                        DeliveryName   = "16-18 Non-Levy Contracted Apprenticeships - Procured delivery",
                        ContractValues = new List <ContractValue>
                        {
                            new ContractValue
                            {
                                DeliveryPeriod = 201801,
                                Value          = 12000m
                            },
                            new ContractValue
                            {
                                DeliveryPeriod = 201804,
                                Value          = 22000m
                            },
                            new ContractValue
                            {
                                DeliveryPeriod = 201904,
                                Value          = 32000m
                            }
                        },
                        FSRValues = new List <FSRValue>
                        {
                            new FSRValue
                            {
                                AcademicYear     = 1718,
                                DeliveryPeriod   = 6,
                                CollectionPeriod = 14,
                                Value            = 1m
                            },
                            new FSRValue
                            {
                                AcademicYear     = 1819,
                                DeliveryPeriod   = 6,
                                CollectionPeriod = 14,
                                Value            = 1m
                            },
                            new FSRValue
                            {
                                AcademicYear     = 2021,
                                DeliveryPeriod   = 1,
                                CollectionPeriod = 3,
                                Value            = 1m
                            },
                            new FSRValue
                            {
                                AcademicYear     = 2021,
                                DeliveryPeriod   = 2,
                                CollectionPeriod = 3,
                                Value            = 1m
                            }
                        }
                    },
                    new Delivery
                    {
                        ContractNumber = "Contract2",
                        DeliveryName   = "Adult Non-Levy Contracted Apprenticeships - Procured delivery",
                        FSRValues      = new List <FSRValue>
                        {
                            new FSRValue
                            {
                                AcademicYear     = 1718,
                                DeliveryPeriod   = 6,
                                CollectionPeriod = 14,
                                Value            = 1m
                            },
                        }
                    }
                }
            };
            var reportServiceContext = new Mock <IReportServiceContext>();

            var dataModel = new CrossYearDataModel();

            reportServiceContext.SetupGet(c => c.Ukprn).Returns(ukprn);
            reportServiceContext.SetupGet(c => c.CollectionYear).Returns(academicYear);
            reportServiceContext.SetupGet(c => c.Container).Returns(container);
            reportServiceContext.SetupGet(c => c.ReturnPeriod).Returns(returnPeriod);

            var excelFileServiceMock = new Mock <IExcelFileService>();
            var fileNameServiceMock  = new Mock <IFileNameService>();
            var modelBuilderMock     = new Mock <ICrossYearModelBuilder>();
            var renderServiceMock    = new Mock <ICrossYearRenderService>();
            var dataProviderMock     = new Mock <ICrossYearDataProvider>();

            var excelService  = GetExcelFileService(excelFileServiceMock, false);
            var renderService = GetRenderService(renderServiceMock, false);

            fileNameServiceMock.Setup(s => s.GetFilename(reportServiceContext.Object, "Beta Cross Year Indicative Payments Report", OutputTypes.Excel, true, true)).Returns(fileName);

            dataProviderMock.Setup(b => b.ProvideAsync(reportServiceContext.Object, cancellationToken)).ReturnsAsync(dataModel);

            modelBuilderMock.Setup(b => b.Build(dataModel, reportServiceContext.Object)).Returns(crossYearPaymentsModel);

            var report = NewReport(excelService, fileNameServiceMock.Object, modelBuilderMock.Object, renderService, dataProviderMock.Object);

            await report.GenerateReport(reportServiceContext.Object, cancellationToken);
        }