package model.manager.excel.reports.out;
import java.text.MessageFormat;
import java.util.List;
import model.manager.excel.download.XLWriteManager;
import model.manager.excel.interfaces.GenerateExcelReportInterface;
import model.manager.exports.DataExportFunctions;
import model.manager.exports.PackageExportObject;
import model.manager.exports.excel.ExcelReportObject;
import org.celllife.idart.commonobjects.LocalObjects;
/**
*/
public class CohortDrugCollectionsReport implements GenerateExcelReportInterface {
private static final int COLUMN_INDEX_OFFSET = 1;
private int rowCounter;
private String sheetNAME;
private XLWriteManager xlwm = null;
private ExcelReportObject reportObject;
private List<PackageExportObject> extraColumns;
/**
* Constructor for DailyDispensingReport.
*
* @param path
* String
* @param reportObject
*/
public CohortDrugCollectionsReport(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);
}
/* (non-Javadoc)
* @see model.manager.excel.reports.out.ExcelReportObject#writeHeadings(int)
*/
@Override
public void writeHeadings(int numextracolumns) {
List<PackageExportObject> columns = reportObject.getColumns();
int drugColumnOffset = 0;
for (int i = 0; i < columns.size(); i++) {
PackageExportObject drugDispensedObject = columns.get(i);
drugDispensedObject.setColumnIndex(COLUMN_INDEX_OFFSET + i
+ drugColumnOffset);
writeHeading(drugDispensedObject);
xlwm.resizeColumn(drugDispensedObject.getColumnIndex(),
drugDispensedObject.getColumnWidth());
}
extraColumns = reportObject.getEndColumns();
if (extraColumns != null){
for (int i = 0; i < numextracolumns; i++) {
for (int j = 0; j < extraColumns.size(); j++) {
PackageExportObject ddo = extraColumns.get(j);
ddo = ddo.clone();
ddo.setColumnIndex(COLUMN_INDEX_OFFSET + (i*extraColumns.size()) + j + columns.size());
ddo.setTitle(ddo.getTitle() + " - " + (1+i));
writeHeading(ddo);
if (i%2 == 0) {
xlwm.highlightCell(ddo.getColumnIndex(),
rowCounter);
}
xlwm.resizeColumn(ddo.getColumnIndex(),
ddo.getColumnWidth());
}
}
}
xlwm.resizeRow(rowCounter, 600);
incrementRowCounter(2);
}
/**
*
* @param column
* @param text
*/
private void writeHeading(PackageExportObject column) {
int rowsToMerge = 2;
xlwm.mergeCells(column.getColumnIndex(), rowCounter, column
.getColumnIndex(), rowCounter + rowsToMerge);
xlwm.writeSubHeadingCellTextCentererd(column.getColumnIndex(),
rowCounter, column.getTitle());
}
/* (non-Javadoc)
* @see model.manager.excel.reports.out.ExcelReportObject#writeTitle()
*/
@Override
public void writeTitle() {
rowCounter = 0;
xlwm.resizeColumn(rowCounter, 3);
xlwm.resizeRow(rowCounter, 240);
incrementRowCounter();
xlwm.writeTitleCell(1, rowCounter,
"Cohort Drug Collections (showing early and late pickups)");
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, "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();
}
/* (non-Javadoc)
* @see model.manager.excel.reports.out.ExcelReportObject#writeRow(model.manager.exports.DataExportFunctions)
*/
@Override
public void writeRow(DataExportFunctions functions) {
List<PackageExportObject> columns = reportObject.getColumns();
for (PackageExportObject column : columns) {
writeDataCell(column.getColumnIndex(), column.getData(functions, 0));
}
}
/**
* 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);
}
/* (non-Javadoc)
* @see model.manager.excel.reports.out.ExcelReportObject#incrementRowCounter()
*/
@Override
public void incrementRowCounter() {
rowCounter++;
}
/* (non-Javadoc)
* @see model.manager.excel.reports.out.ExcelReportObject#incrementRowCounter(int)
*/
@Override
public void incrementRowCounter(int amount) {
rowCounter += amount;
}
/* (non-Javadoc)
* @see model.manager.excel.reports.out.ExcelReportObject#writeDataCell(int, java.lang.Object)
*/
@Override
public void writeDataCell(int columnIndex, Object data) {
writeDataCell(columnIndex, rowCounter, data);
}
/* (non-Javadoc)
* @see model.manager.excel.reports.out.ExcelReportObject#writeDataCell(int, int, java.lang.Object)
*/
@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);
}
/* (non-Javadoc)
* @see model.manager.excel.reports.out.ExcelReportObject#writeExtraColumns(model.manager.exports.DataExportFunctions, int)
*/
@Override
public void writeExtraColumns(DataExportFunctions functions, int num) {
if (extraColumns != null){
int columns = reportObject.getColumns().size();
for (int j = 0; j < extraColumns.size(); j++) {
PackageExportObject column = extraColumns.get(j);
int columnIndex = COLUMN_INDEX_OFFSET + columns + (extraColumns.size()*num) + j;
column.setXY(columnIndex, rowCounter);
writeDataCell(columnIndex, column.getData(functions, 0));
}
}
}
@Override
public void writeFooter() {
}
}