added download from excel and zip in frontend

This commit is contained in:
verboomp
2026-02-23 16:30:21 +01:00
parent 746294d640
commit f05b6da0ee
2 changed files with 17 additions and 74 deletions

View File

@@ -5,7 +5,6 @@ import java.util.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import jakarta.annotation.security.PermitAll; import jakarta.annotation.security.PermitAll;
import jakarta.ejb.EJB;
import jakarta.ejb.LocalBean; import jakarta.ejb.LocalBean;
import jakarta.ejb.Stateless; import jakarta.ejb.Stateless;
import jakarta.inject.Inject; import jakarta.inject.Inject;
@@ -13,7 +12,6 @@ import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.*; import jakarta.persistence.criteria.*;
import marketing.heyday.hartmann.fotodocumentation.core.model.Questionnaire; import marketing.heyday.hartmann.fotodocumentation.core.model.Questionnaire;
import marketing.heyday.hartmann.fotodocumentation.core.model.QuestionnaireCustomer; import marketing.heyday.hartmann.fotodocumentation.core.model.QuestionnaireCustomer;
import marketing.heyday.hartmann.fotodocumentation.core.query.QueryService;
import marketing.heyday.hartmann.fotodocumentation.core.utils.CalendarUtil; import marketing.heyday.hartmann.fotodocumentation.core.utils.CalendarUtil;
import marketing.heyday.hartmann.fotodocumentation.core.utils.ExcelUtils; import marketing.heyday.hartmann.fotodocumentation.core.utils.ExcelUtils;
import marketing.heyday.hartmann.fotodocumentation.core.utils.ZipExportUtils; import marketing.heyday.hartmann.fotodocumentation.core.utils.ZipExportUtils;
@@ -35,9 +33,6 @@ import marketing.heyday.hartmann.fotodocumentation.rest.vo.QuestionnaireCustomer
@PermitAll @PermitAll
public class QuestionnaireCustomerService extends AbstractService { public class QuestionnaireCustomerService extends AbstractService {
@EJB
private QueryService queryService;
@Inject @Inject
private ZipExportUtils zipExportUtils; private ZipExportUtils zipExportUtils;

View File

@@ -41,7 +41,7 @@ class ExcelUtilsTest implements TestAble {
@Test @Test
void create_singleQuestionnaire_returnsPresent() { void create_singleQuestionnaire_returnsPresent() {
QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115"); QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115");
Questionnaire questionnaire = createQuestionnaire(new Date(), "What is your rating?"); Questionnaire questionnaire = createQuestionnaire(new Date());
Optional<byte[]> result = excelUtils.create(customer, List.of(questionnaire)); Optional<byte[]> result = excelUtils.create(customer, List.of(questionnaire));
@@ -51,7 +51,7 @@ class ExcelUtilsTest implements TestAble {
@Test @Test
void create_singleQuestionnaire_returnsValidXlsx() throws IOException { void create_singleQuestionnaire_returnsValidXlsx() throws IOException {
QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115"); QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115");
Questionnaire questionnaire = createQuestionnaire(new Date(), "What is your rating?"); Questionnaire questionnaire = createQuestionnaire(new Date());
byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow(); byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow();
@@ -61,14 +61,11 @@ class ExcelUtilsTest implements TestAble {
} }
@Test @Test
void create_emptyQuestionnaires_returnsEmptyWorkbook() throws IOException { void create_emptyQuestionnaires_returnsEmptyWorkbook() {
QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115"); QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115");
byte[] bytes = excelUtils.create(customer, Collections.emptyList()).orElseThrow(); Optional<byte[]> result = excelUtils.create(customer, Collections.emptyList());
assertFalse(result.isPresent());
try (XSSFWorkbook workbook = new XSSFWorkbook(new ByteArrayInputStream(bytes))) {
assertEquals(0, workbook.getNumberOfSheets());
}
} }
// --- create: sheet count --- // --- create: sheet count ---
@@ -76,7 +73,7 @@ class ExcelUtilsTest implements TestAble {
@Test @Test
void create_singleQuestionnaire_createsOneSheet() throws IOException { void create_singleQuestionnaire_createsOneSheet() throws IOException {
QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115"); QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115");
Questionnaire questionnaire = createQuestionnaire(new Date(), "Q1"); Questionnaire questionnaire = createQuestionnaire(new Date());
byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow(); byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow();
@@ -88,9 +85,9 @@ class ExcelUtilsTest implements TestAble {
@Test @Test
void create_multipleQuestionnaires_createsSheetPerQuestionnaire() throws IOException { void create_multipleQuestionnaires_createsSheetPerQuestionnaire() throws IOException {
QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115"); QuestionnaireCustomer customer = createCustomer("Müller GmbH", "C-001", "Berlin", "10115");
Questionnaire q1 = createQuestionnaire(new Date(), "Q1"); Questionnaire q1 = createQuestionnaire(new Date());
Questionnaire q2 = createQuestionnaire(new Date(), "Q2"); Questionnaire q2 = createQuestionnaire(new Date());
Questionnaire q3 = createQuestionnaire(new Date(), "Q3"); Questionnaire q3 = createQuestionnaire(new Date());
byte[] bytes = excelUtils.create(customer, List.of(q1, q2, q3)).orElseThrow(); byte[] bytes = excelUtils.create(customer, List.of(q1, q2, q3)).orElseThrow();
@@ -106,73 +103,24 @@ class ExcelUtilsTest implements TestAble {
@Test @Test
void create_writesCustomerNameInRow0() throws IOException { void create_writesCustomerNameInRow0() throws IOException {
QuestionnaireCustomer customer = createCustomer("Hartmann AG", "C-100", "München", "80331"); QuestionnaireCustomer customer = createCustomer("Hartmann AG", "C-100", "München", "80331");
Questionnaire questionnaire = createQuestionnaire(new Date(), "Q1"); Questionnaire questionnaire = createQuestionnaire(new Date());
byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow(); byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow();
try (XSSFWorkbook workbook = new XSSFWorkbook(new ByteArrayInputStream(bytes))) { try (XSSFWorkbook workbook = new XSSFWorkbook(new ByteArrayInputStream(bytes))) {
assertEquals("Hartmann AG", workbook.getSheetAt(0).getRow(0).getCell(0).getStringCellValue()); assertEquals("Hartmann AG", workbook.getSheetAt(0).getRow(0).getCell(0).getStringCellValue());
}
}
@Test
void create_writesCustomerNumberInRow1() throws IOException {
QuestionnaireCustomer customer = createCustomer("Hartmann AG", "C-100", "München", "80331");
Questionnaire questionnaire = createQuestionnaire(new Date(), "Q1");
byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow();
try (XSSFWorkbook workbook = new XSSFWorkbook(new ByteArrayInputStream(bytes))) {
assertEquals("C-100", workbook.getSheetAt(0).getRow(1).getCell(0).getStringCellValue()); assertEquals("C-100", workbook.getSheetAt(0).getRow(1).getCell(0).getStringCellValue());
}
}
@Test
void create_writesCustomerCityInRow2() throws IOException {
QuestionnaireCustomer customer = createCustomer("Hartmann AG", "C-100", "München", "80331");
Questionnaire questionnaire = createQuestionnaire(new Date(), "Q1");
byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow();
try (XSSFWorkbook workbook = new XSSFWorkbook(new ByteArrayInputStream(bytes))) {
assertEquals("München", workbook.getSheetAt(0).getRow(2).getCell(0).getStringCellValue()); assertEquals("München", workbook.getSheetAt(0).getRow(2).getCell(0).getStringCellValue());
}
}
@Test
void create_writesCustomerZipInRow3() throws IOException {
QuestionnaireCustomer customer = createCustomer("Hartmann AG", "C-100", "München", "80331");
Questionnaire questionnaire = createQuestionnaire(new Date(), "Q1");
byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow();
try (XSSFWorkbook workbook = new XSSFWorkbook(new ByteArrayInputStream(bytes))) {
assertEquals("80331", workbook.getSheetAt(0).getRow(3).getCell(0).getStringCellValue()); assertEquals("80331", workbook.getSheetAt(0).getRow(3).getCell(0).getStringCellValue());
} }
} }
// --- create: questionnaire date in row 4 ---
@Test
void create_writesQuestionnaireDateInRow4() throws IOException {
QuestionnaireCustomer customer = createCustomer("Test", "C-001", "Berlin", "10115");
Date date = new Date();
Questionnaire questionnaire = createQuestionnaire(date, "Q1");
byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow();
try (XSSFWorkbook workbook = new XSSFWorkbook(new ByteArrayInputStream(bytes))) {
XSSFRow row = workbook.getSheetAt(0).getRow(4);
assertEquals(date, row.getCell(0).getDateCellValue());
}
}
// --- create: question data in row 7 (after 5 customer rows + 2 blank rows) --- // --- create: question data in row 7 (after 5 customer rows + 2 blank rows) ---
@Test @Test
void create_writesFirstQuestionTitleInRow7() throws IOException { void create_writesFirstQuestionTitleInRow7() throws IOException {
QuestionnaireCustomer customer = createCustomer("Test", "C-001", "Berlin", "10115"); QuestionnaireCustomer customer = createCustomer("Test", "C-001", "Berlin", "10115");
Questionnaire questionnaire = createQuestionnaire(new Date(), null); Questionnaire questionnaire = createQuestionnaire(new Date());
byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow(); byte[] bytes = excelUtils.create(customer, List.of(questionnaire)).orElseThrow();
@@ -190,7 +138,7 @@ class ExcelUtilsTest implements TestAble {
@Test @Test
void create_nullCustomerFields_writesNullsWithoutError() { void create_nullCustomerFields_writesNullsWithoutError() {
QuestionnaireCustomer customer = createCustomer(null, null, null, null); QuestionnaireCustomer customer = createCustomer(null, null, null, null);
Questionnaire questionnaire = createQuestionnaire(null, null); Questionnaire questionnaire = createQuestionnaire(null);
Optional<byte[]> result = excelUtils.create(customer, List.of(questionnaire)); Optional<byte[]> result = excelUtils.create(customer, List.of(questionnaire));
@@ -202,8 +150,8 @@ class ExcelUtilsTest implements TestAble {
@Test @Test
void create_multipleSheets_eachSheetHasCustomerData() throws IOException { void create_multipleSheets_eachSheetHasCustomerData() throws IOException {
QuestionnaireCustomer customer = createCustomer("Hartmann AG", "C-100", "München", "80331"); QuestionnaireCustomer customer = createCustomer("Hartmann AG", "C-100", "München", "80331");
Questionnaire q1 = createQuestionnaire(new Date(), "Q1"); Questionnaire q1 = createQuestionnaire(new Date());
Questionnaire q2 = createQuestionnaire(new Date(), "Q2"); Questionnaire q2 = createQuestionnaire(new Date());
byte[] bytes = excelUtils.create(customer, List.of(q1, q2)).orElseThrow(); byte[] bytes = excelUtils.create(customer, List.of(q1, q2)).orElseThrow();
@@ -219,8 +167,8 @@ class ExcelUtilsTest implements TestAble {
@Test @Test
void create_multipleSheets_eachSheetHasQuestionData() throws IOException { void create_multipleSheets_eachSheetHasQuestionData() throws IOException {
QuestionnaireCustomer customer = createCustomer("Test", "C-001", "Berlin", "10115"); QuestionnaireCustomer customer = createCustomer("Test", "C-001", "Berlin", "10115");
Questionnaire q1 = createQuestionnaire(new Date(), null); Questionnaire q1 = createQuestionnaire(new Date());
Questionnaire q2 = createQuestionnaire(new Date(), null); Questionnaire q2 = createQuestionnaire(new Date());
byte[] bytes = excelUtils.create(customer, List.of(q1, q2)).orElseThrow(); byte[] bytes = excelUtils.create(customer, List.of(q1, q2)).orElseThrow();
@@ -243,7 +191,7 @@ class ExcelUtilsTest implements TestAble {
.build(); .build();
} }
private Questionnaire createQuestionnaire(Date date, String questions) { private Questionnaire createQuestionnaire(Date date) {
return new Questionnaire.Builder() return new Questionnaire.Builder()
.questionnaireDate(date) .questionnaireDate(date)
.questions(QuestionnaireJsonParserTest.TEST_JSON_1) .questions(QuestionnaireJsonParserTest.TEST_JSON_1)