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 }); }
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); }
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); }