diff --git a/src/main/java/org/jlab/srm/business/session/ExcelFacade.java b/src/main/java/org/jlab/srm/business/session/ExcelCategorySystemsFacade.java similarity index 94% rename from src/main/java/org/jlab/srm/business/session/ExcelFacade.java rename to src/main/java/org/jlab/srm/business/session/ExcelCategorySystemsFacade.java index 78c330f..e9afa25 100644 --- a/src/main/java/org/jlab/srm/business/session/ExcelFacade.java +++ b/src/main/java/org/jlab/srm/business/session/ExcelCategorySystemsFacade.java @@ -15,14 +15,14 @@ * @author ryans */ @Stateless -public class ExcelFacade { +public class ExcelCategorySystemsFacade { @EJB CategoryFacade categoryFacade; private Sheet sheet = null; private int rownum = 0; - public void exportCategoriesAndSystems(OutputStream out) throws IOException { + public void export(OutputStream out) throws IOException { Workbook wb = new XSSFWorkbook(); sheet = wb.createSheet("Categories and systems"); diff --git a/src/main/java/org/jlab/srm/business/session/ExcelSignoffReportFacade.java b/src/main/java/org/jlab/srm/business/session/ExcelSignoffReportFacade.java new file mode 100644 index 0000000..31c458a --- /dev/null +++ b/src/main/java/org/jlab/srm/business/session/ExcelSignoffReportFacade.java @@ -0,0 +1,93 @@ +package org.jlab.srm.business.session; + +import jakarta.ejb.EJB; +import jakarta.ejb.Stateless; +import java.io.IOException; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jlab.smoothness.business.util.TimeUtil; +import org.jlab.srm.persistence.model.SignoffReportRecord; + +/** + * @author ryans + */ +@Stateless +public class ExcelSignoffReportFacade { + + @EJB CategoryFacade categoryFacade; + + private Sheet sheet = null; + private int rownum = 0; + + public void export( + OutputStream out, List recordList, String selectionMessage) + throws IOException { + Date now = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat(TimeUtil.getFriendlyDateTimePattern()); + String formattedGgeneratedDate = dateFormat.format(now); + + Workbook wb = new XSSFWorkbook(); + Sheet sheet1 = wb.createSheet("Signoff Report (Generated " + formattedGgeneratedDate + ")"); + + int rownum = 0; + Row row0 = sheet1.createRow(rownum++); + row0.createCell(0).setCellValue(selectionMessage); + + Row row1 = sheet1.createRow(rownum++); + row1.createCell(0).setCellValue("COMPONENT"); + row1.createCell(1).setCellValue("GROUP"); + row1.createCell(2).setCellValue("MODIFIED DATE"); + row1.createCell(3).setCellValue("MODIFIED BY"); + row1.createCell(4).setCellValue("STATUS"); + row1.createCell(5).setCellValue("COMMENTS"); + + CreationHelper createHelper = wb.getCreationHelper(); + CellStyle numberStyle = wb.createCellStyle(); + numberStyle.setDataFormat(createHelper.createDataFormat().getFormat("##0.###")); + CellStyle dateStyle = wb.createCellStyle(); + dateStyle.setDataFormat( + createHelper.createDataFormat().getFormat(TimeUtil.getFriendlyDateTimePattern())); + + Cell c; + + for (SignoffReportRecord record : recordList) { + Row row = sheet1.createRow(rownum++); + + row.createCell(0).setCellValue(record.getComponentName()); + row.createCell(1).setCellValue(record.getGroupName()); + c = row.createCell(2); + if (record.getModifiedDate() == null) { + c.setCellValue(""); + } else { + c.setCellStyle(dateStyle); + c.setCellValue(record.getModifiedDate()); + } + c = row.createCell(3); + if (record.getModifiedBy() == null) { + c.setCellValue(""); + } else { + c.setCellValue(record.getModifiedBy()); + } + row.createCell(4).setCellValue(record.getStatus().getName()); + c = row.createCell(5); + if (record.getComments() == null) { + c.setCellValue(""); + } else { + c.setCellValue(record.getComments()); + } + } + + /*sheet1.autoSizeColumn(0);*/ + sheet1.autoSizeColumn(1); + sheet1.autoSizeColumn(2); + sheet1.autoSizeColumn(3); + sheet1.autoSizeColumn(4); + sheet1.autoSizeColumn(5); + + wb.write(out); + } +} diff --git a/src/main/java/org/jlab/srm/presentation/controller/ExportExcel.java b/src/main/java/org/jlab/srm/presentation/controller/excel/ExcelCategorySystems.java similarity index 71% rename from src/main/java/org/jlab/srm/presentation/controller/ExportExcel.java rename to src/main/java/org/jlab/srm/presentation/controller/excel/ExcelCategorySystems.java index 0e36777..03dbb6f 100644 --- a/src/main/java/org/jlab/srm/presentation/controller/ExportExcel.java +++ b/src/main/java/org/jlab/srm/presentation/controller/excel/ExcelCategorySystems.java @@ -1,4 +1,4 @@ -package org.jlab.srm.presentation.controller; +package org.jlab.srm.presentation.controller.excel; import jakarta.ejb.EJB; import jakarta.servlet.ServletException; @@ -7,17 +7,17 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import org.jlab.srm.business.session.ExcelFacade; +import org.jlab.srm.business.session.ExcelCategorySystemsFacade; /** * @author ryans */ @WebServlet( - name = "ExportExcel", - urlPatterns = {"/categories-systems.xlsx"}) -public class ExportExcel extends HttpServlet { + name = "ExcelCategorySystems", + urlPatterns = {"/excel/categories-systems.xlsx"}) +public class ExcelCategorySystems extends HttpServlet { - @EJB ExcelFacade excelFacade; + @EJB ExcelCategorySystemsFacade excelFacade; /** * Handles the HTTP GET method. @@ -34,6 +34,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("content-disposition", "attachment;filename=\"categories-systems.xlsx\""); - excelFacade.exportCategoriesAndSystems(response.getOutputStream()); + excelFacade.export(response.getOutputStream()); } } diff --git a/src/main/java/org/jlab/srm/presentation/controller/excel/ExcelSignoffReport.java b/src/main/java/org/jlab/srm/presentation/controller/excel/ExcelSignoffReport.java new file mode 100644 index 0000000..e602142 --- /dev/null +++ b/src/main/java/org/jlab/srm/presentation/controller/excel/ExcelSignoffReport.java @@ -0,0 +1,122 @@ +package org.jlab.srm.presentation.controller.excel; + +import jakarta.ejb.EJB; +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.math.BigInteger; +import java.text.DecimalFormat; +import java.util.List; +import org.jlab.srm.business.params.SignoffReportParams; +import org.jlab.srm.business.session.*; +import org.jlab.srm.persistence.entity.BeamDestination; +import org.jlab.srm.persistence.model.SignoffReportRecord; +import org.jlab.srm.presentation.params.SignoffReportUrlParamHandler; + +/** + * @author ryans + */ +@WebServlet( + name = "ExcelSignoffReport", + urlPatterns = {"/excel/signoff.xlsx"}) +public class ExcelSignoffReport extends HttpServlet { + + @EJB ExcelSignoffReportFacade excelFacade; + @EJB BeamDestinationFacade destinationFacade; + @EJB SystemFacade systemFacade; + @EJB RegionFacade regionFacade; + @EJB ResponsibleGroupFacade groupFacade; + @EJB ComponentSignoffFacade signoffFacade; + @EJB StatusFacade statusFacade; + @EJB CategoryFacade categoryFacade; + + /** + * Handles the HTTP GET method. + * + * @param request servlet request + * @param response servlet response + * @throws ServletException if a servlet-specific error occurs + * @throws IOException if an I/O error occurs + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + List destinationList = + destinationFacade.findAll(new AbstractFacade.OrderDirective("weight")); + + List defaultDestinationList = + destinationFacade.filterTargetList(destinationList); + + BigInteger[] defaultDestinationIdArray = destinationFacade.toIdArray(defaultDestinationList); + + SignoffReportUrlParamHandler paramHandler = + new SignoffReportUrlParamHandler( + request, + defaultDestinationIdArray, + destinationFacade, + categoryFacade, + systemFacade, + regionFacade, + groupFacade); + + SignoffReportParams params; + + try { + params = paramHandler.convert(); + paramHandler.validate(params); + paramHandler.store(params); + } catch (Exception e) { + response.sendError(HttpServletResponse.SC_BAD_REQUEST); + return; + } + + int offset = 0; + int maxPerPage = Integer.MAX_VALUE; + + List recordList = + signoffFacade.filterSignoffReportRecordList( + params.getDestinationIdArray(), + params.getCategoryId(), + params.getSystemId(), + params.getRegionId(), + params.getGroupId(), + params.getStatusId(), + params.isReadyTurn(), + params.isMasked(), + params.getComponentName(), + offset, + maxPerPage); + Long totalRecords = + signoffFacade.countSignoffReportRecordList( + params.getDestinationIdArray(), + params.getCategoryId(), + params.getSystemId(), + params.getRegionId(), + params.getGroupId(), + params.getStatusId(), + params.isReadyTurn(), + params.isMasked(), + params.getComponentName()); + + String selectionMessage = "All Signoffs "; + + String filters = paramHandler.message(params); + + if (filters.length() > 0) { + selectionMessage = filters; + } + + DecimalFormat formatter = new DecimalFormat("###,###"); + + selectionMessage = selectionMessage + " {" + formatter.format(totalRecords) + "}"; + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("content-disposition", "attachment;filename=\"signoff.xlsx\""); + + excelFacade.export(response.getOutputStream(), recordList, selectionMessage); + } +} diff --git a/src/main/webapp/WEB-INF/views/readiness.jsp b/src/main/webapp/WEB-INF/views/readiness.jsp index d0a605f..bd9d567 100644 --- a/src/main/webapp/WEB-INF/views/readiness.jsp +++ b/src/main/webapp/WEB-INF/views/readiness.jsp @@ -411,7 +411,7 @@ -
+
diff --git a/src/main/webapp/WEB-INF/views/reports/signoff.jsp b/src/main/webapp/WEB-INF/views/reports/signoff.jsp index 8d4e14d..c87613a 100644 --- a/src/main/webapp/WEB-INF/views/reports/signoff.jsp +++ b/src/main/webapp/WEB-INF/views/reports/signoff.jsp @@ -39,6 +39,16 @@
+
+
+ +
    +
  • Image
  • + +
  • Excel
  • +
+
+
@@ -285,5 +295,19 @@
+ + + + + + + + + + + + + +
\ No newline at end of file