diff --git a/src/main/java/de/avatic/lcc/service/bulk/BulkExportService.java b/src/main/java/de/avatic/lcc/service/bulk/BulkExportService.java index f18733b..d17ce88 100644 --- a/src/main/java/de/avatic/lcc/service/bulk/BulkExportService.java +++ b/src/main/java/de/avatic/lcc/service/bulk/BulkExportService.java @@ -2,12 +2,16 @@ package de.avatic.lcc.service.bulk; import de.avatic.lcc.dto.bulk.BulkFileType; import de.avatic.lcc.model.bulk.BulkFileTypes; +import de.avatic.lcc.model.bulk.HiddenTableType; +import de.avatic.lcc.repositories.rates.ValidityPeriodRepository; import de.avatic.lcc.service.bulk.helper.HeaderCellStyleProvider; -import de.avatic.lcc.service.bulk.mapper.ContainerRateExcelMapper; +import de.avatic.lcc.service.bulk.mapper.*; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.SheetVisibility; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.InputStreamSource; import org.springframework.stereotype.Service; @@ -16,37 +20,73 @@ public class BulkExportService { private final HeaderCellStyleProvider headerCellStyleProvider; private final ContainerRateExcelMapper containerRateExcelMapper; + private final ValidityPeriodRepository validityPeriodRepository; + private final MatrixRateExcelMapper matrixRateExcelMapper; + private final MaterialExcelMapper materialExcelMapper; + private final PackagingExcelMapper packagingExcelMapper; + private final NodeExcelMapper nodeExcelMapper; + private final HiddenNodeExcelMapper hiddenNodeExcelMapper; + private final HiddenCountryExcelMapper hiddenCountryExcelMapper; + private final String sheetPassword; - public BulkExportService(HeaderCellStyleProvider headerCellStyleProvider, ContainerRateExcelMapper containerRateExcelMapper) { + public BulkExportService(@Value("${lcc.bulk.sheet_password}") String sheetPassword, HeaderCellStyleProvider headerCellStyleProvider, ContainerRateExcelMapper containerRateExcelMapper, ValidityPeriodRepository validityPeriodRepository, MatrixRateExcelMapper matrixRateExcelMapper, MaterialExcelMapper materialExcelMapper, PackagingExcelMapper packagingExcelMapper, NodeExcelMapper nodeExcelMapper, HiddenNodeExcelMapper hiddenNodeExcelMapper, HiddenCountryExcelMapper hiddenCountryExcelMapper) { this.headerCellStyleProvider = headerCellStyleProvider; this.containerRateExcelMapper = containerRateExcelMapper; + this.validityPeriodRepository = validityPeriodRepository; + this.matrixRateExcelMapper = matrixRateExcelMapper; + this.materialExcelMapper = materialExcelMapper; + this.packagingExcelMapper = packagingExcelMapper; + this.nodeExcelMapper = nodeExcelMapper; + this.hiddenNodeExcelMapper = hiddenNodeExcelMapper; + this.hiddenCountryExcelMapper = hiddenCountryExcelMapper; + this.sheetPassword = sheetPassword; } public InputStreamSource generateExport(BulkFileType bulkFileType) { + return generateExport(bulkFileType, validityPeriodRepository.getValidPeriodId()); + } + + public InputStreamSource generateExport(BulkFileType bulkFileType, Integer periodId) { Workbook workbook = new XSSFWorkbook(); Sheet worksheet = workbook.createSheet(BulkFileTypes.valueOf(bulkFileType.name()).getSheetName()); CellStyle style = headerCellStyleProvider.createHeaderCellStyle(workbook); + + if(bulkFileType.equals(BulkFileType.COUNTRY_MATRIX) || bulkFileType.equals(BulkFileType.NODE)) + { + var hiddenCountrySheet = workbook.createSheet(HiddenTableType.COUNTRY_HIDDEN_TABLE.getSheetName()); + hiddenCountryExcelMapper.fillSheet(hiddenCountrySheet, style); + hiddenCountrySheet.protectSheet(sheetPassword); + workbook.setSheetVisibility(workbook.getSheetIndex(hiddenCountrySheet), SheetVisibility.VERY_HIDDEN); + } + else if(bulkFileType.equals(BulkFileType.CONTAINER_RATE) || bulkFileType.equals(BulkFileType.PACKAGING)) + { + var hiddenNodeSheet = workbook.createSheet(HiddenTableType.NODE_HIDDEN_TABLE.getSheetName()); + hiddenNodeExcelMapper.fillSheet(hiddenNodeSheet, style, BulkFileType.PACKAGING.equals(bulkFileType)); + hiddenNodeSheet.protectSheet(sheetPassword); + workbook.setSheetVisibility(workbook.getSheetIndex(hiddenNodeSheet), SheetVisibility.VERY_HIDDEN); + } + // Create headers based on the bulk file type switch (bulkFileType) { case CONTAINER_RATE: - containerRateExcelMapper.fillSheet(); + containerRateExcelMapper.fillSheet(worksheet, style, periodId); break; case COUNTRY_MATRIX: + matrixRateExcelMapper.fillSheet(worksheet, style, periodId); break; case MATERIAL: + materialExcelMapper.fillSheet(worksheet, style); break; case PACKAGING: + packagingExcelMapper.fillSheet(worksheet, style); break; case NODE: + nodeExcelMapper.fillSheet(worksheet, style); break; } return null; } - - public InputStreamSource generateExport(BulkFileType bulkFileType, Integer validityPeriodId) { - return null; - } } diff --git a/src/main/java/de/avatic/lcc/service/bulk/TemplateExportService.java b/src/main/java/de/avatic/lcc/service/bulk/TemplateExportService.java index d987bba..82aa66d 100644 --- a/src/main/java/de/avatic/lcc/service/bulk/TemplateExportService.java +++ b/src/main/java/de/avatic/lcc/service/bulk/TemplateExportService.java @@ -51,7 +51,22 @@ public class TemplateExportService { Sheet sheet = workbook.createSheet(BulkFileTypes.valueOf(bulkFileType.name()).getSheetName()); CellStyle style = headerCellStyleProvider.createHeaderCellStyle(workbook); - Sheet hiddenSheet = null; + + + if(bulkFileType.equals(BulkFileType.COUNTRY_MATRIX) || bulkFileType.equals(BulkFileType.NODE)) + { + var hiddenCountrySheet = workbook.createSheet(HiddenTableType.COUNTRY_HIDDEN_TABLE.getSheetName()); + hiddenCountryExcelMapper.fillSheet(hiddenCountrySheet, style); + hiddenCountrySheet.protectSheet(sheetPassword); + workbook.setSheetVisibility(workbook.getSheetIndex(hiddenCountrySheet), SheetVisibility.VERY_HIDDEN); + } + else if(bulkFileType.equals(BulkFileType.CONTAINER_RATE) || bulkFileType.equals(BulkFileType.PACKAGING)) + { + var hiddenNodeSheet = workbook.createSheet(HiddenTableType.NODE_HIDDEN_TABLE.getSheetName()); + hiddenNodeExcelMapper.fillSheet(hiddenNodeSheet, style, BulkFileType.PACKAGING.equals(bulkFileType)); + hiddenNodeSheet.protectSheet(sheetPassword); + workbook.setSheetVisibility(workbook.getSheetIndex(hiddenNodeSheet), SheetVisibility.VERY_HIDDEN); + } // Create headers and constraints based on the bulk file type switch (bulkFileType) { @@ -79,25 +94,6 @@ public class TemplateExportService { throw new IllegalArgumentException("Unsupported bulk file type: " + bulkFileType); } - switch (bulkFileType) { - case CONTAINER_RATE: - case PACKAGING: - var hiddenNodeSheet = workbook.createSheet(HiddenTableType.NODE_HIDDEN_TABLE.getSheetName()); - hiddenNodeExcelMapper.fillSheet(hiddenNodeSheet, style, BulkFileType.PACKAGING.equals(bulkFileType)); - hiddenNodeSheet.protectSheet(sheetPassword); - workbook.createName().setNameName(HiddenTableType.NODE_HIDDEN_TABLE.getSheetName()+"_ref"); - break; - case COUNTRY_MATRIX: - case NODE: - var hiddenCountrySheet = workbook.createSheet(HiddenTableType.COUNTRY_HIDDEN_TABLE.getSheetName()); - hiddenCountryExcelMapper.fillSheet(hiddenCountrySheet, style); - hiddenCountrySheet.protectSheet(sheetPassword); - workbook.setSheetVisibility(workbook.getSheetIndex(hiddenCountrySheet), SheetVisibility.VERY_HIDDEN); - break; - default: - break; - } - // Return the Excel file as an InputStreamSource return new ByteArrayResource(outputStream.toByteArray()); } catch (IOException e) {