private async Task GenerateWorkBookAsync(
            FundingClaimsDataExtractReportModel model,
            string templateFileName,
            string dataSource,
            IOperationsReportServiceContext reportServiceContext,
            string reportFileName,
            CancellationToken cancellationToken)
        {
            var    assembly     = Assembly.GetExecutingAssembly();
            string resourceName = assembly.GetManifestResourceNames().Single(str => str.EndsWith(templateFileName));

            using (Stream manifestResourceStream = assembly.GetManifestResourceStream(resourceName))
            {
                var workbook = _excelFileService.BindExcelTemplateToWorkbook(model, dataSource, manifestResourceStream);
                await _excelFileService.SaveWorkbookAsync(workbook, reportFileName, reportServiceContext.Container, cancellationToken);
            }
        }
        public FundingClaimsDataExtractReportModel Build(
            CollectionDetail collectionDetail,
            ICollection <FundingClaimsDataExtractResultSet> fundingClaimsDataExtractResultSets,
            IDictionary <int, OrgModel> orgDetails,
            CancellationToken cancellationToken)
        {
            var model = new FundingClaimsDataExtractReportModel();
            var fundingClaimsDataExtractDetails = fundingClaimsDataExtractResultSets.Select(
                fundingClaim => new FundingClaimsDataExtractDetail()
            {
                SubmissionId             = fundingClaim.SubmissionId,
                CollectionPeriod         = collectionDetail.CollectionCode,
                Ukprn                    = fundingClaim.Ukprn,
                ProviderName             = orgDetails.GetValueOrDefault((int)fundingClaim.Ukprn)?.Name,
                UpdatedOn                = fundingClaim.UpdatedOn.GetValueOrDefault().LongDateStringFormat(),
                Declaration              = fundingClaim.Declaration,
                CovidDeclaration         = fundingClaim.CovidDeclaration,
                FundingStreamPeriodCode  = fundingClaim.SubmissionValueFundingStreamPeriodCode,
                MaximumContractValue     = fundingClaim.ContractValue,
                DeliverableCode          = fundingClaim.DeliverableCode,
                DeliverableDescription   = fundingClaim.Description,
                StudentNumbers           = fundingClaim.StudentNumbers,
                DeliveryToDate           = fundingClaim.DeliveryToDate,
                ForecastedDelivery       = fundingClaim.ForecastedDelivery,
                ExceptionalAdjustments   = fundingClaim.ExceptionalAdjustments,
                TotalDelivery            = fundingClaim.TotalDelivery,
                ContractAllocationNumber = fundingClaim.ContractAllocationNumber,
                Signed                   = fundingClaim.Signed
            })
                                                  .OrderBy(x => x.ProviderName)
                                                  .ThenBy(x => x.CollectionPeriod)
                                                  .ThenBy(x => x.SubmissionId)
                                                  .ThenBy(x => x.FundingStreamPeriodCode)
                                                  .ThenBy(x => x.DeliverableCode)
                                                  .ToList();

            model.FundingClaimsDataExtract = fundingClaimsDataExtractDetails;

            return(model);
        }