package model.manager.exports.excel; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import model.manager.AdministrationManager; import model.manager.excel.interfaces.GenerateExcelReportInterface; import model.manager.excel.reports.out.DrugDispensedReport; import model.manager.exports.DataExportFunctions; import model.nonPersistent.EntitySet; import org.celllife.idart.database.hibernate.StockCenter; import org.celllife.idart.database.hibernate.util.HibernateUtil; import org.hibernate.Query; public class RowPerPackageExcelExporter extends ExcelExporter { @Override protected GenerateExcelReportInterface getExcelReport( ExcelReportObject report) { return new DrugDispensedReport(report.getPath(), report); } @Override public EntitySet getPatientSet(ExcelReportObject report) { if (patientPackageMap == null) { populatePatientPackageMap(report); } return new EntitySet(new ArrayList<Integer>(patientPackageMap.keySet())); } private void populatePatientPackageMap(ExcelReportObject report) { session = HibernateUtil.getNewSession(); StockCenter stockCenter = AdministrationManager.getStockCenter(session, report.getPharmacy()); if (stockCenter == null) stockCenter = AdministrationManager .getPreferredStockCenter(session); String queryString = "select pack.prescription.patient.id, pack.id from Packages pack" + " join pack.packagedDrugs drug" + " where pack.pickupDate is not null and pack.packDate between :startDate and :endDate" + " and drug.stock.stockCenter = :stockCenter" + " order by pack.packDate asc, pack.clinic asc"; Query query = session.createQuery(queryString); query.setTimestamp("startDate", report.getStartDate()); query.setTimestamp("endDate", report.getEndDate()); query.setParameter("stockCenter", stockCenter); List list = query.list(); patientPackageMap = new LinkedHashMap<Integer, List<Integer>>(); for (Object object : list) { Object[] ar = (Object[]) object; Integer patid = (Integer) ar[0]; Integer packid = (Integer) ar[1]; if (patientPackageMap.containsKey(patid)) { List<Integer> packlist = patientPackageMap.get(patid); if (!packlist.contains(packid)) packlist.add(packid); } else { ArrayList<Integer> packIds = new ArrayList<Integer>(); packIds.add(packid); patientPackageMap.put(patid, packIds); } } } @Override protected void exportPage(EntitySet pagedEntitySet, DataExportFunctions functions, GenerateExcelReportInterface excelReport) throws Exception { functions.setPatientSet(pagedEntitySet); for (Integer patientId : pagedEntitySet.getEntityIds()) { functions.setPatientId(patientId); List<Integer> packageIds = patientPackageMap .get(patientId); for (Integer packageId : packageIds) { functions.setPackageId(packageId); excelReport.writeRow(functions); } } } }