Skip to content

Commit

Permalink
Merge pull request #642 from nhsconnect/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
ChristopherJamesMorris authored Jun 24, 2024
2 parents eef5b95 + 4fc187c commit ce2aecd
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 44 deletions.
6 changes: 3 additions & 3 deletions database/schema/V6.6__schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ drop table if exists reporting.transient;

create table reporting.transient
(
transient_id varchar(100) not null,
transient_data json not null,
transient_id varchar(100) not null,
transient_data json not null,
transient_report_id varchar(100) not null,
transient_report_name varchar(100) not null,
entry_date timestamp without time zone not null
);

grant select, insert, update, delete on table reporting.transient to app_user;
grant select, insert on table reporting.transient to app_user;
Empty file.
80 changes: 39 additions & 41 deletions modules/api/src/Service/ReportingService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,37 +54,33 @@ public async Task<Stream> ExportReport(ReportRequest reportRequest)
return memoryStream;
}

public async Task<Stream?> CreateInteractionReport(ReportCreationRequest reportCreationRequest)
public async Task<Stream> CreateInteractionReport(ReportCreationRequest reportCreationRequest)
{
var functionName = "reporting.get_transient_data";
var parameters = new DynamicParameters();
parameters.Add("_transient_report_id", reportCreationRequest.ReportId, DbType.String, ParameterDirection.Input);
var response = await _dataService.ExecuteQueryFirstOrDefault<TransientData>(functionName, parameters);
if(response.Data != null)
{
return CreateReport(response.Data.ConvertJsonDataToDataTable(), reportCreationRequest.ReportName, reportCreationRequest.ReportFilter);
}
return null;
return CreateReport(response?.Data?.ConvertJsonDataToDataTable(), reportCreationRequest.ReportName, reportCreationRequest.ReportFilter);
}

public async Task RouteReportRequest(RouteReportRequest routeReportRequest)
{
try
{
string? transientData = null;
switch (routeReportRequest.ReportId.ToUpper())
switch (routeReportRequest.ReportId.ToLower())
{
case "ACCESSRECORDSTRUCTURED":
case "accessrecordstructured":
transientData = await _interactionService.CreateInteractionData<AccessRecordStructuredReporting>(routeReportRequest);
break;
case "APPOINTMENTMANAGEMENT":
case "appointmentmanagement":
transientData = await _interactionService.CreateInteractionData<AppointmentManagementReporting>(routeReportRequest);
break;
case "ACCESSRECORDHTML":
case "accessrecordhtml":
transientData = await _interactionService.CreateInteractionData<AccessRecordHtmlReporting>(routeReportRequest);
break;
case "UPDATERECORD":
case "SENDDOCUMENT":
case "updaterecord":
case "senddocument":
transientData = await _workflowService.CreateWorkflowData<MailboxReporting>(routeReportRequest);
break;
default:
Expand Down Expand Up @@ -124,8 +120,7 @@ public async Task<MemoryStream> ExportBySpineMessage(int spineMessageId, string
{ "_spine_message_id", spineMessageId }
};
var result = await _dataService.ExecuteFunctionAndGetDataTable("application.get_spine_message_by_id", parameters);
var report = CreateReport(result);
return report;
return CreateReport(result);
}

public async Task<string> GetReport(string functionName)
Expand All @@ -149,47 +144,50 @@ public async Task<List<CapabilityReport>> GetCapabilityReports()
return result;
}

public MemoryStream CreateReport(DataTable result, string reportName = "", List<ReportFilterRequest>? reportFilterRequest = null)
public MemoryStream CreateReport(DataTable? result, string reportName = "", List<ReportFilterRequest>? reportFilterRequest = null)
{
try
{
var memoryStream = new MemoryStream();
reportFilterRequest = reportFilterRequest?.OrderBy(x => x.FilterValue).ToList();
if (result != null)
{
reportFilterRequest = reportFilterRequest?.OrderBy(x => x.FilterValue).ToList();

using (var spreadsheetDocument = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook))
{
var workbookPart = spreadsheetDocument.WorkbookPart ?? spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
using (var spreadsheetDocument = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook))
{
var workbookPart = spreadsheetDocument.WorkbookPart ?? spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();

var workbookStylesPart = workbookPart.AddNewPart<WorkbookStylesPart>();
workbookStylesPart.Stylesheet = StyleSheetBuilder.CreateStylesheet();
workbookStylesPart.Stylesheet.Save();
var workbookStylesPart = workbookPart.AddNewPart<WorkbookStylesPart>();
workbookStylesPart.Stylesheet = StyleSheetBuilder.CreateStylesheet();
workbookStylesPart.Stylesheet.Save();

if (reportFilterRequest != null)
{
for (var i = 0; i < reportFilterRequest.Count; i++)
if (reportFilterRequest != null)
{
var filteredList = result.AsEnumerable().Where(r => r.Field<string>(reportFilterRequest[i].FilterColumn) == reportFilterRequest[i].FilterValue);
if (filteredList.Any())
for (var i = 0; i < reportFilterRequest.Count; i++)
{
CreateSheet(filteredList.CopyToDataTable(), reportName, spreadsheetDocument, i + 1, reportFilterRequest[i].FilterValue, reportFilterRequest[i].FilterTab);
var toDelete = new List<DataRow>();
toDelete.AddRange(filteredList.AsEnumerable());
toDelete.ForEach(dr => result.Rows.Remove(dr));
var filteredList = result.AsEnumerable().Where(r => r.Field<string>(reportFilterRequest[i].FilterColumn) == reportFilterRequest[i].FilterValue);
if (filteredList.Any())
{
CreateSheet(filteredList.CopyToDataTable(), reportName, spreadsheetDocument, i + 1, reportFilterRequest[i].FilterValue, reportFilterRequest[i].FilterTab);
var toDelete = new List<DataRow>();
toDelete.AddRange(filteredList.AsEnumerable());
toDelete.ForEach(dr => result.Rows.Remove(dr));
}
}
CreateSheet(result, reportName, spreadsheetDocument, reportFilterRequest.Count + 1);
}
CreateSheet(result, reportName, spreadsheetDocument, reportFilterRequest.Count + 1);
}
else
{
CreateSheet(result, reportName, spreadsheetDocument, 1);
else
{
CreateSheet(result, reportName, spreadsheetDocument, 1);
}

spreadsheetDocument.WorkbookPart.Workbook.Save();
spreadsheetDocument.Dispose();
}

spreadsheetDocument.WorkbookPart.Workbook.Save();
spreadsheetDocument.Dispose();
memoryStream.Seek(0, SeekOrigin.Begin);
}

memoryStream.Seek(0, SeekOrigin.Begin);
return memoryStream;
}
catch (Exception ex)
Expand Down

0 comments on commit ce2aecd

Please sign in to comment.