package model.manager.excel.reports.out; import java.text.MessageFormat; import java.util.List; import java.util.Map; import java.util.Map.Entry; import model.manager.excel.download.XLWriteManager; import model.manager.excel.interfaces.GenerateExcelReportInterface; import model.manager.exports.DataExportFunctions; import model.manager.exports.DrugDispensedObject; import model.manager.exports.PackageExportObject; import model.manager.exports.excel.ExcelReportObject; import org.celllife.idart.commonobjects.LocalObjects; /** */ public class DrugDispensedReport implements GenerateExcelReportInterface { private static final int COLUMN_INDEX_OFFSET = 1; private int rowCounter; private String sheetNAME; private XLWriteManager xlwm = null; private ExcelReportObject reportObject; /** * Constructor for DailyDispensingReport. * * @param path * String * @param reportObject */ public DrugDispensedReport(String path, ExcelReportObject reportObject) { super(); if (reportObject.isShowBatchInfo()) { sheetNAME = "Drug Issues (Incl Batch Info)"; } else { sheetNAME = "Drug Issues"; } this.reportObject = reportObject; this.rowCounter = 1; xlwm = new XLWriteManager(this.sheetNAME, path); } /** * Method writeHeadings. * * @see model.manager.excel.interfaces.GenerateExcelReportInterface#writeHeadings() */ @Override public void writeHeadings(int numextracolumns) { List<PackageExportObject> columns = reportObject.getColumns(); int drugColumnOffset = 0; for (int i = 0; i < columns.size(); i++) { PackageExportObject col = columns.get(i); col.setColumnIndex(COLUMN_INDEX_OFFSET + i + drugColumnOffset); writeHeading(col); if (col instanceof DrugDispensedObject){ DrugDispensedObject ddo = (DrugDispensedObject) col; if (reportObject.isShowBatchInfo() && ddo.getDrugId() > 0) drugColumnOffset++; if (ddo.getDrugId() > 0) { xlwm.highlightCell(col.getColumnIndex(), rowCounter); } } xlwm.resizeColumn(col.getColumnIndex(), col.getColumnWidth()); } xlwm.resizeRow(rowCounter, 600); incrementRowCounter(2); } /** * * @param column * @param text */ private void writeHeading(PackageExportObject column) { DrugDispensedObject ddo = null; if (column instanceof DrugDispensedObject) { ddo = (DrugDispensedObject) column; } if (ddo != null && ddo.getDrugId() > 0) { if (reportObject.isShowBatchInfo()) { xlwm.mergeCells(column.getColumnIndex(), rowCounter, column .getColumnIndex() + 1, rowCounter); xlwm.mergeCells(column.getColumnIndex(), rowCounter + 1, column .getColumnIndex() + 1, rowCounter + 1); } xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex(), rowCounter, column.getTitle()); xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex(), rowCounter + 1, column.getSubTitle()); xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex(), rowCounter + 2, "Qty"); if (reportObject.isShowBatchInfo()) { xlwm.writeSubHeadingCellTextCentererd( column.getColumnIndex() + 1, rowCounter + 2, "Batch"); } } else { int rowsToMerge = 2; xlwm.mergeCells(column.getColumnIndex(), rowCounter, column .getColumnIndex(), rowCounter + rowsToMerge); xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex(), rowCounter, column.getTitle()); } } @Override public void writeTitle() { rowCounter = 0; xlwm.resizeColumn(rowCounter, 3); xlwm.resizeRow(rowCounter, 240); incrementRowCounter(); xlwm.writeTitleCell(1, rowCounter, "Drugs Dispensed Report (Clinics, Patients & Drugs)"); xlwm.mergeCells(1, rowCounter, 9, rowCounter); xlwm.resizeRow(rowCounter, 600); incrementRowCounter(); xlwm.resizeRow(rowCounter, 240); incrementRowCounter(); xlwm.mergeCells(1, rowCounter, 4, rowCounter); xlwm.writeSubHeadingCellTextLeft(1, rowCounter, "Facility Name"); xlwm.mergeCells(5, rowCounter, 9, rowCounter); xlwm.writeSubHeadingCellTextLeft(5, rowCounter, LocalObjects.pharmacy .getPharmacyName()); incrementRowCounter(); xlwm.mergeCells(1, rowCounter, 4, rowCounter); xlwm.writeSubHeadingCellTextLeft(1, rowCounter, "Responsible Pharmacist"); xlwm.mergeCells(5, rowCounter, 9, rowCounter); xlwm.writeSubHeadingCellTextLeft(5, rowCounter, LocalObjects.pharmacy .getPharmacist()); incrementRowCounter(); xlwm.mergeCells(1, rowCounter, 4, rowCounter); xlwm.writeSubHeadingCellTextLeft(1, rowCounter, "Pharmacy"); xlwm.mergeCells(5, rowCounter, 9, rowCounter); xlwm.writeSubHeadingCellTextLeft(5, rowCounter, reportObject .getPharmacy()); incrementRowCounter(); xlwm.mergeCells(1, rowCounter, 4, rowCounter); xlwm.writeSubHeadingCellTextLeft(1, rowCounter, "Period"); xlwm.mergeCells(5, rowCounter, 9, rowCounter); xlwm.writeSubHeadingCellTextLeft(5, rowCounter, MessageFormat.format( "{0,date,medium} - {1,date,medium}", reportObject .getStartDate(), reportObject.getEndDate())); incrementRowCounter(); xlwm.resizeRow(rowCounter, 240); incrementRowCounter(); } @Override public void writeRow(DataExportFunctions functions) { List<PackageExportObject> columns = reportObject.getColumns(); incrementRowCounter(); for (PackageExportObject column : columns) { DrugDispensedObject col = (DrugDispensedObject) column; writeDataCell(column.getColumnIndex(), column.getData(functions, 0)); if (reportObject.isShowBatchInfo() && col.getDrugId() > 0){ writeDataCell(column.getColumnIndex()+1, column.getData(functions, 1)); } } } @Override public void writeFooter() { List<PackageExportObject> columns = reportObject.getColumns(); incrementRowCounter(); incrementRowCounter(); boolean writeFooterLabels = true; for (PackageExportObject column : columns) { if (!(column instanceof DrugDispensedObject)){ continue; } DrugDispensedObject col = (DrugDispensedObject) column; int drugid = col.getDrugId(); if (drugid > 0){ if (writeFooterLabels){ xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex()-1,rowCounter, "Total Units Dispensed"); xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex()-1,getRowCounter()+1, "Pack Size"); xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex()-1,getRowCounter()+2, "Total Packs Dispensed"); if (reportObject.isShowBatchInfo()) xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex()-1,getRowCounter()+5, "Batch Summary"); writeFooterLabels = false; } // write totals int totalUnitsDispensed = col.getTotalUnitsDispensed(); xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex(),rowCounter, String.valueOf(totalUnitsDispensed)); int drugPackSize = col.getDrugPackSize(); writeDataCell(column.getColumnIndex(),getRowCounter()+1, drugPackSize); writeDataCell(column.getColumnIndex(),getRowCounter()+2, getPacksDispensed(totalUnitsDispensed, drugPackSize)); xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex(),getRowCounter()+3, column.getSubTitle()); if (reportObject.isShowBatchInfo()){ // blank cells in batch column of totals rows writeDataCell(column.getColumnIndex()+1, ""); writeDataCell(column.getColumnIndex()+1,getRowCounter()+1, ""); writeDataCell(column.getColumnIndex()+1,getRowCounter()+2, ""); // merge sub-title cells mergeCells(column.getColumnIndex(), getRowCounter()+3, column.getColumnIndex()+1, getRowCounter()+3); // write batch summary Map<String,Integer> batchTotalsMap = col.getBatchTotalsMap(); int tmprowCounter = 5; if (batchTotalsMap != null) { for (Entry<String, Integer> entry : batchTotalsMap .entrySet()) { Integer batchTotal = entry.getValue(); String batchName = entry.getKey(); writeDataCell(column.getColumnIndex(), getRowCounter() + tmprowCounter, batchTotal); writeDataCell(column.getColumnIndex() + 1, getRowCounter() + tmprowCounter, batchName); tmprowCounter++; } } else{ writeDataCell(column.getColumnIndex(), getRowCounter() + tmprowCounter, ""); writeDataCell(column.getColumnIndex() + 1, getRowCounter() + tmprowCounter, ""); } } } } } private Object getPacksDispensed(int totalUnitsDispensed, int drugPackSize) { int packs = totalUnitsDispensed / drugPackSize; int remainder = totalUnitsDispensed % drugPackSize; String out = String.valueOf(packs); if (remainder > 0){ out += " (" + remainder + ")"; } return out; } /** * Method fillInValues. * * @param data * List<Object[]> * @see * model.manager.excel.interfaces.GenerateExcelReportInterface#fillInValues * (List<Object[]>) */ @Override public void fillInValues(List<Object[]> data) { } /** * Method getReport. * * @return byte[] * @see model.manager.excel.interfaces.GenerateExcelReportInterface#getReport() */ @Override public byte[] getReport() { byte[] result = xlwm.closeFile(); return result; } /** * Method injectData. * * @param list * List<Object[]> * @see * model.manager.excel.interfaces.GenerateExcelReportInterface#injectData * (List<Object[]>) */ @Override public void injectData(List<Object[]> list) { // fillInValues(list); } @Override public void incrementRowCounter() { rowCounter++; } @Override public void incrementRowCounter(int amount) { rowCounter += amount; } @Override public void writeDataCell(int columnIndex, Object data) { writeDataCell(columnIndex, rowCounter, data); } @Override public void writeDataCell(int columnIndex, int rowIndex, Object data) { xlwm.writeCellCentered(columnIndex, rowIndex, data); } public int getRowCounter() { return rowCounter; } public void mergeCells(int col_start, int row_start, int col_end, int row_end) { xlwm.mergeCells(col_start, row_start, col_end, row_end); } @Override public void writeExtraColumns(DataExportFunctions functions, int num) { } }