From 51eb7d89be43f2b4076d637a128225ad553955b3 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Thu, 1 Aug 2024 14:40:27 -0500 Subject: [PATCH] Take report format as input --- .../reports/ExecuteReportStep.java | 30 +++++++++++++++---- .../reports/BasicRunReportProcessTest.java | 14 +++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/reports/ExecuteReportStep.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/reports/ExecuteReportStep.java index fdfa381c..5e4b09af 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/reports/ExecuteReportStep.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/processes/implementations/reports/ExecuteReportStep.java @@ -31,7 +31,9 @@ import java.time.format.DateTimeFormatter; import java.util.Map; import com.kingsrook.qqq.backend.core.actions.processes.BackendStep; import com.kingsrook.qqq.backend.core.actions.reporting.GenerateReportAction; +import com.kingsrook.qqq.backend.core.context.QContext; import com.kingsrook.qqq.backend.core.exceptions.QException; +import com.kingsrook.qqq.backend.core.exceptions.QUserFacingException; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunBackendStepOutput; import com.kingsrook.qqq.backend.core.model.actions.reporting.ReportDestination; @@ -49,6 +51,7 @@ import com.kingsrook.qqq.backend.core.utils.StringUtils; public class ExecuteReportStep implements BackendStep { + /******************************************************************************* ** *******************************************************************************/ @@ -57,9 +60,10 @@ public class ExecuteReportStep implements BackendStep { try { - String reportName = runBackendStepInput.getValueString("reportName"); - QReportMetaData report = runBackendStepInput.getInstance().getReport(reportName); - File tmpFile = File.createTempFile(reportName, ".xlsx", new File("/tmp/")); + ReportFormat reportFormat = getReportFormat(runBackendStepInput); + String reportName = runBackendStepInput.getValueString("reportName"); + QReportMetaData report = QContext.getQInstance().getReport(reportName); + File tmpFile = File.createTempFile(reportName, "." + reportFormat.getExtension()); runBackendStepInput.getAsyncJobCallback().updateStatus("Generating Report"); @@ -68,7 +72,7 @@ public class ExecuteReportStep implements BackendStep ReportInput reportInput = new ReportInput(); reportInput.setReportName(reportName); reportInput.setReportDestination(new ReportDestination() - .withReportFormat(ReportFormat.XLSX) // todo - variable + .withReportFormat(reportFormat) .withReportOutputStream(reportOutputStream)); Map values = runBackendStepInput.getValues(); @@ -78,7 +82,7 @@ public class ExecuteReportStep implements BackendStep String downloadFileBaseName = getDownloadFileBaseName(runBackendStepInput, report); - runBackendStepOutput.addValue("downloadFileName", downloadFileBaseName + ".xlsx"); + runBackendStepOutput.addValue("downloadFileName", downloadFileBaseName + "." + reportFormat.getExtension()); runBackendStepOutput.addValue("serverFilePath", tmpFile.getCanonicalPath()); } } @@ -90,6 +94,22 @@ public class ExecuteReportStep implements BackendStep + /*************************************************************************** + ** + ***************************************************************************/ + private ReportFormat getReportFormat(RunBackendStepInput runBackendStepInput) throws QUserFacingException + { + String reportFormatInput = runBackendStepInput.getValueString(BasicRunReportProcess.FIELD_REPORT_FORMAT); + if(StringUtils.hasContent(reportFormatInput)) + { + return (ReportFormat.fromString(reportFormatInput)); + } + + return (ReportFormat.XLSX); + } + + + /******************************************************************************* ** *******************************************************************************/ diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/reports/BasicRunReportProcessTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/reports/BasicRunReportProcessTest.java index d84e0a97..52ffd3f7 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/reports/BasicRunReportProcessTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/processes/implementations/reports/BasicRunReportProcessTest.java @@ -30,6 +30,7 @@ import com.kingsrook.qqq.backend.core.actions.reporting.GenerateReportActionTest import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessInput; import com.kingsrook.qqq.backend.core.model.actions.processes.RunProcessOutput; +import com.kingsrook.qqq.backend.core.model.actions.reporting.ReportFormat; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; import com.kingsrook.qqq.backend.core.model.metadata.reporting.QReportMetaData; @@ -43,6 +44,7 @@ import static org.assertj.core.api.Assertions.assertThat; *******************************************************************************/ class BasicRunReportProcessTest extends BaseTest { + /******************************************************************************* ** *******************************************************************************/ @@ -74,6 +76,18 @@ class BasicRunReportProcessTest extends BaseTest runProcessOutput = new RunProcessAction().execute(runProcessInput); assertThat(runProcessOutput.getProcessState().getNextStepName()).isPresent().get().isEqualTo(BasicRunReportProcess.STEP_NAME_ACCESS); assertThat(runProcessOutput.getValues()).containsKeys("downloadFileName", "serverFilePath"); + + /////////////////////////////////// + // assert we get xlsx by default // + /////////////////////////////////// + assertThat(runProcessOutput.getValueString("downloadFileName")).endsWith(".xlsx"); + + ///////////////////////////////////////////////////// + // re-run, requesting CSV, then assert we get that // + ///////////////////////////////////////////////////// + runProcessInput.addValue(BasicRunReportProcess.FIELD_REPORT_FORMAT, ReportFormat.CSV.name()); + runProcessOutput = new RunProcessAction().execute(runProcessInput); + assertThat(runProcessOutput.getValueString("downloadFileName")).endsWith(".csv"); } } \ No newline at end of file