package de.pbauerochse.worklogviewer.excel.columns; import de.pbauerochse.worklogviewer.excel.ExcelColumnRenderer; import de.pbauerochse.worklogviewer.fx.tabs.domain.DisplayDayEntry; import de.pbauerochse.worklogviewer.fx.tabs.domain.DisplayRow; import de.pbauerochse.worklogviewer.util.FormattingUtil; import de.pbauerochse.worklogviewer.util.SettingsUtil; import javafx.scene.control.TreeItem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import java.time.LocalDate; import java.util.List; import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; /** * @author Patrick Bauerochse * @since 07.07.15 */ public class WorklogExcelColumn extends ExcelColumnRenderer { private final String caption; private final LocalDate localDate; public WorklogExcelColumn(String caption, LocalDate localDate) { this.caption = caption; this.localDate = localDate; } @Override public void renderCells(int columnIndex, Sheet sheet, List<TreeItem<DisplayRow>> displayResult, boolean isGrouped) { AtomicInteger currentRowIndex = new AtomicInteger(0); if (!isGrouped) { renderHeadline(currentRowIndex, sheet, columnIndex); } SettingsUtil.Settings settings = SettingsUtil.loadSettings(); for (TreeItem<DisplayRow> taskWithWorklogsTreeItem : displayResult) { renderTreeItem(taskWithWorklogsTreeItem, sheet, currentRowIndex, columnIndex, settings); } } private void renderTreeItem(TreeItem<DisplayRow> item, Sheet sheet, AtomicInteger rowIndex, int columnIndex, SettingsUtil.Settings settings) { DisplayRow displayRow = item.getValue(); Row row = getOrCreateRow(rowIndex.getAndIncrement(), sheet); Cell cell = row.createCell(columnIndex); Optional<DisplayDayEntry> workdayEntryOptional = displayRow.getWorkdayEntry(localDate); if (displayRow.isGroupContainer()) { cell.setCellStyle(getGroupHeadlineCellStyle(sheet)); rowIndex.getAndIncrement(); // spacing // headline renderHeadline(rowIndex, sheet, columnIndex); item.getChildren().forEach(Child -> renderTreeItem(Child, sheet, rowIndex, columnIndex, settings)); // add summary at the end row = getOrCreateRow(rowIndex.getAndIncrement(), sheet); cell = row.createCell(columnIndex); cell.setCellStyle(getWorklogSummaryCellStyle(sheet)); // additional spacing rowIndex.getAndAdd(4); } else if (displayRow.isGrandTotalSummary()) { cell.setCellStyle(getGroupHeadlineWorklogCellStyle(sheet)); } else { cell.setCellStyle(getWorklogCellStyle(sheet)); } if (workdayEntryOptional.isPresent()) { if (settings.isShowDecimalHourTimesInExcelReport()) { cell.setCellValue(workdayEntryOptional.get().getSpentTime().get() / 60d); } else { cell.setCellValue(FormattingUtil.formatMinutes(workdayEntryOptional.get().getSpentTime().get())); } } } private void renderHeadline(AtomicInteger rowIndex, Sheet sheet, int columnIndex) { Row row = getOrCreateRow(rowIndex.getAndAdd(2), sheet); Cell cell = row.createCell(columnIndex); cell.setCellStyle(getHeadlineCellStyle(sheet)); cell.setCellValue(caption); } }