package model.nonPersistent; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import model.manager.exports.columns.PackageDetailsEnum; public class ExportPackageInfo { private Date dateCollected; private Integer patientID; private String packageID; private List<ExportDrugInfo> lstExportDrugInfo; private String regimen; private String drugGroupName; private Date dispenseDate; private Date expectedRunoutDate; public ExportPackageInfo() { } public ExportPackageInfo(Date dateCollected, Integer patientID, String packageID, List<ExportDrugInfo> lstExportDrugInfo) { this.dateCollected = dateCollected; this.patientID = patientID; this.packageID = packageID; this.lstExportDrugInfo = lstExportDrugInfo; } /** * @return the dateCollected */ public Date getDateCollected() { return dateCollected; } /** * @param dateCollected * the dateCollected to set */ public void setDateCollected(Date dateCollected) { this.dateCollected = dateCollected; } /** * @return the patientID */ public Integer getPatientID() { return patientID; } /** * @param patientID * the patientID to set */ public void setPatientID(Integer patientID) { this.patientID = patientID; } /** * @return the lstExportDrugInfo */ public List<ExportDrugInfo> getListOfExportDrugInfo() { if (lstExportDrugInfo == null) { setListOfExportDrugInfo(new ArrayList<ExportDrugInfo>()); } return lstExportDrugInfo; } /** * @param lstExportDrugInfo * the lstExportDrugInfo to set */ public void setListOfExportDrugInfo(List<ExportDrugInfo> lstExportDrugInfo) { this.lstExportDrugInfo = lstExportDrugInfo; } /** * @return the packageID */ public String getPackageID() { return packageID; } /** * @param packageID * the packageID to set */ public void setPackageID(String packageID) { this.packageID = packageID; } @Override public String toString() { String tmp = "ExportPackageDrug"; tmp += "\nDateCollected: " + dateCollected.toString(); tmp += "\nPatientID: " + patientID.toString(); tmp += "\nPackage ID: " + packageID; for (ExportDrugInfo edi : lstExportDrugInfo) { tmp += "\nExportDrugInfo: " + edi.toString(); } return tmp; } public Set<Integer> getARVDrugIdSet() { Set<Integer> arvIdSet = new HashSet<Integer>(); for (ExportDrugInfo edi : getListOfExportDrugInfo()) { if (edi.isARV()) { arvIdSet.add(edi.getDrugId()); } } return arvIdSet; } public void setRegimen(String regimen) { this.regimen = regimen; } public String getRegimen() { return regimen; } public void setDrugGroupName(String drugGroupName) { this.drugGroupName = drugGroupName; } public String getDrugGroupName() { return drugGroupName; } public List<ExportDrugInfo> getDrugsWithId(int drugId) { List<ExportDrugInfo> listOfExportDrugInfo = getListOfExportDrugInfo(); List<ExportDrugInfo> exportDrugsWithDrug = new ArrayList<ExportDrugInfo>(); for (ExportDrugInfo exportDrugInfo : listOfExportDrugInfo) { if (exportDrugInfo.getDrugId() == drugId) exportDrugsWithDrug.add(exportDrugInfo); } return exportDrugsWithDrug; } public Object getFieldValue(PackageDetailsEnum field){ switch (field) { case COLLECTION_DATE: return getDateCollected(); case COLLECTED_DRUGS: return getCollectedDrugs(); case DRUG_GROUP_NAME: return getDrugGroupName(); case PACKAGE_ID: return getPackageID(); case REGIMEN: return getRegimen(); case DATE_DISPENSED: return getDispenseDate(); case EXPECTED_RUNOUT_DATE: return getExpectedRunoutDate(); default: return null; } } public Date getDispenseDate() { return dispenseDate; } public void setDispenseDate(Date date){ this.dispenseDate = date; } private String getCollectedDrugs() { List<ExportDrugInfo> drugsInPackageList = getListOfExportDrugInfo(); String drugsInPackageString = ""; for (ExportDrugInfo currentDrug : drugsInPackageList) { drugsInPackageString += currentDrug.getChemicalCompoundName() + " (" + currentDrug.getQuantityDispensed(); if (currentDrug.getAccumulatedDrugs() != 0) { drugsInPackageString += " + " + currentDrug.getAccumulatedDrugs(); } drugsInPackageString += "); "; } return drugsInPackageString.trim(); } public Date getExpectedRunoutDate() { if (expectedRunoutDate == null){ calculateRunoutDate(); } return expectedRunoutDate; } private void calculateRunoutDate() { Date collectionDate = getDateCollected(); if (collectionDate != null) { int mindaysLeft = Integer.MAX_VALUE; for (ExportDrugInfo edi : lstExportDrugInfo) { Double daysLeft = edi.getDaysTillRunout(); if (daysLeft < mindaysLeft) { mindaysLeft = daysLeft.intValue(); } } Calendar cal = Calendar.getInstance(); cal.setTime(collectionDate); cal.add(Calendar.DAY_OF_MONTH, mindaysLeft); this.expectedRunoutDate = cal.getTime(); } } }