package model.manager.reports; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import model.manager.PackageManager; import model.manager.excel.conversion.exceptions.ReportException; import net.sf.jasperreports.engine.data.JRCsvDataSource; import org.celllife.idart.commonobjects.LocalObjects; import org.celllife.idart.commonobjects.iDartProperties; import org.celllife.idart.database.hibernate.Clinic; import org.celllife.idart.database.hibernate.Packages; import org.celllife.idart.database.hibernate.Patient; import org.celllife.idart.database.hibernate.Prescription; import org.celllife.idart.misc.iDARTUtil; import org.celllife.idart.model.utils.PackageLifeStage; import org.eclipse.swt.widgets.Shell; public class PackageProcessingReport extends AbstractJasperReport { private final Clinic clinic; private final PackageLifeStage lifeStage; private final Date startDate; private final Date endDate; private File csvFile; public PackageProcessingReport(Shell parent, Clinic clinic, Date theStartDate, Date theEndDate, PackageLifeStage lifeStage) { super(parent); this.clinic = clinic; this.lifeStage = lifeStage; this.startDate = getBeginningOfDay(theStartDate); this.endDate = getEndOfDay(theEndDate); } @Override protected void generateData() throws ReportException { final List<String[]> theStringList = new ArrayList<String[]>(); theStringList.addAll(getPackageInfoStrings()); csvFile = createCSVFile("tmpPackageProcessing.csv", theStringList, true); } @Override protected Map<String, Object> getParameterMap() throws ReportException { Map<String, Object> map = new HashMap<String, Object>(); map.put("headerTxt", lifeStage.getAction()); map.put("dateName", lifeStage.getDateStringName()); map.put("clinicName", clinic.getClinicName()); map.put("startDate", startDate); map.put("endDate", endDate); map.put("path", getReportPath()); map.put("pharmacist1", LocalObjects.pharmacy.getPharmacist()); map.put("pharmacist2", LocalObjects.pharmacy.getAssistantPharmacist()); return map; } @Override protected String getReportFileName() { // Report to use if (lifeStage.equals(PackageLifeStage.PICKED_UP) || lifeStage.equals(PackageLifeStage.SCANNED_OUT)) return "packageCollections"; else return "packageProcessing"; } @Override public Object getDataSource() throws ReportException { try { JRCsvDataSource jcvs = new JRCsvDataSource(csvFile); jcvs.setUseFirstRowAsHeader(true); return jcvs; } catch (Exception e) { throw new ReportException("Error getting data source", e); } } private List<String[]> getPackageInfoStrings() { List<Packages> packageList = PackageManager.getPackagesProcessed( hSession, clinic, startDate, endDate, lifeStage); SimpleDateFormat packDateFormat = new SimpleDateFormat("dd/MM/yy"); List<String[]> returnList = new ArrayList<String[]>(); String[] header; if (lifeStage.equals(PackageLifeStage.PICKED_UP) || lifeStage.equals(PackageLifeStage.SCANNED_OUT)) { header = new String[] { "index", "date", "patientInfo", "drugsAndQuantities", "prescriptionInfo", "packageId", }; int counter = 1; String dateStr = ""; String lastDateStr = ""; for (Packages p : packageList) { Prescription pre = p.getPrescription(); Patient pat = pre.getPatient(); dateStr = packDateFormat.format(lifeStage.getPackageDate(p)); if (!dateStr.equals(lastDateStr)) { lastDateStr = dateStr; counter = 1; } else { counter++; } String[] packageString = new String[7]; packageString[0] = counter + ""; packageString[1] = dateStr; packageString[2] = iDartProperties.patientNameOnReports ? pat .getPatientId() + "\n" + pat .getFirstNames() + " " + pat.getLastname() + "\nDOB: " + new SimpleDateFormat("dd/MM/yyyy ").format(pat .getDateOfBirth()) + "\n" + iDARTUtil.getSexString(pat.getSex()) : pat .getPatientId(); packageString[3] = PackageManager.getLongPackageContentsString( hSession, p); packageString[4] = "Prescribed By: " + pre.getDoctor().getFullname() + "\n(" + p.getPackageId() .charAt(p.getPackageId().length() - 1) + " of " + (pre.getDuration() >= 4 ? (pre.getDuration() / 4) + " months)" : pre.getDuration() + " weeks)"); packageString[5] = p.getPackageId(); returnList.add(packageString); } } else { header = new String[] { "date", "packageid", "patientname", "patientid" }; for (Packages p : packageList) { Patient pat = p.getPrescription().getPatient(); String[] packageString = new String[4]; packageString[0] = packDateFormat.format(lifeStage .getPackageDate(p)); packageString[1] = p.getPackageId(); packageString[2] = iDartProperties.patientNameOnReports ? pat .getLastname() + ", " + pat.getFirstNames() : ""; packageString[3] = pat.getPatientId(); returnList.add(packageString); } } returnList.add(0, header); return returnList; } }