/*
* iDART: The Intelligent Dispensing of Antiretroviral Treatment
* Copyright (C) 2006 Cell-Life
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version
* 2 for more details.
*
* You should have received a copy of the GNU General Public License version 2
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.celllife.idart.database.hibernate;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.IndexColumn;
/**
*/
@Entity
@Table(name = "Package")
public class Packages {
@Id
@GeneratedValue
private Integer id;
private Date dateLeft;
private Date dateReceived;
private char modified;
private String packageId;
private String drugTypes;
@OneToMany
@JoinColumn(name = "parentPackage")
@IndexColumn(name = "packageddrugsindex")
@Cascade( { org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private List<PackagedDrugs> packagedDrugs;
@ManyToOne
@JoinColumn(name = "clinic")
private Clinic clinic;
private Date packDate;
private Date pickupDate;
/**
* Packages representing destroyed stock have null prescription
*/
@ManyToOne
@JoinColumn(name = "prescription", nullable = true)
private Prescription prescription;
private int weekssupply;
private Date dateReturned;
private boolean stockReturned;
private boolean packageReturned;
private String reasonForPackageReturn;
@OneToMany(mappedBy = "withPackage")
@Cascade( { org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private Set<AccumulatedDrugs> accumulatedDrugs;
@OneToMany(mappedBy = "previousPackage")
@Cascade( { org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private Set<PillCount> pillCounts; // pillcounts on return
@Transient
private HashSet<Drug> arvDrugSet;
/**
* Constructor for Packages.
*
* @param dateLeft
* Date
* @param dateReceived
* Date
* @param modified
* char
* @param packageId
* String
* @param packagedDrugs
* List<PackagedDrugs>
* @param packDate
* Date
* @param pickupDate
* Date
* @param prescription
* Prescription
* @param weekssupply
* int
* @param pillCounts
* Set<PillCount>
* @param accumulatedDrugs
* Set<AccumulatedDrugs>
*/
public Packages(Date dateLeft, Date dateReceived, char modified,
String packageId, List<PackagedDrugs> packagedDrugs, Date packDate,
Date pickupDate, Prescription prescription, int weekssupply,
Set<PillCount> pillCounts, Set<AccumulatedDrugs> accumulatedDrugs,
Clinic clinic) {
this.dateLeft = dateLeft;
this.dateReceived = dateReceived;
this.modified = modified;
this.packageId = packageId;
this.packagedDrugs = packagedDrugs;
this.packDate = packDate;
this.pickupDate = pickupDate;
this.prescription = prescription;
this.weekssupply = weekssupply;
this.accumulatedDrugs = accumulatedDrugs;
this.clinic = clinic;
}
public Packages() {
super();
}
/**
* Method getDateLeft.
*
* @return Date
*/
public Date getDateLeft() {
return dateLeft;
}
/**
* Method getDateReceived.
*
* @return Date
*/
public Date getDateReceived() {
return dateReceived;
}
/**
* Method getId.
*
* @return int
*/
public int getId() {
return id;
}
/**
* Method getModified.
*
* @return char
*/
public char getModified() {
return modified;
}
/**
* Method getPackageId.
*
* @return String
*/
public String getPackageId() {
return packageId;
}
/**
* Method getPackagedDrugs.
*
* @return List<PackagedDrugs>
*/
public List<PackagedDrugs> getPackagedDrugs() {
if (packagedDrugs == null) {
packagedDrugs = new ArrayList<PackagedDrugs>();
}
return packagedDrugs;
}
/**
* Method getPackDate.
*
* @return Date
*/
public Date getPackDate() {
return packDate;
}
/**
* Method getPickupDate.
*
* @return Date
*/
public Date getPickupDate() {
return pickupDate;
}
/**
* Method getPrescription.
*
* @return Prescription
*/
public Prescription getPrescription() {
return prescription;
}
/**
* Method setDateLeft.
*
* @param dateLeft
* Date
*/
public void setDateLeft(Date dateLeft) {
this.dateLeft = dateLeft;
}
/**
* Method setDateReceived.
*
* @param dateReceived
* Date
*/
public void setDateReceived(Date dateReceived) {
this.dateReceived = dateReceived;
}
/**
* Method setId.
*
* @param id
* int
*/
public void setId(Integer id) {
this.id = id;
}
/**
* Method setModified.
*
* @param modified
* char
*/
public void setModified(char modified) {
this.modified = modified;
}
/**
* Method setPackageId.
*
* @param packageId
* String
*/
public void setPackageId(String packageId) {
this.packageId = packageId;
}
/**
* Method setPackagedDrugs.
*
* @param packagedDrugs
* List<PackagedDrugs>
*/
public void setPackagedDrugs(List<PackagedDrugs> packagedDrugs) {
this.packagedDrugs = packagedDrugs;
}
/**
* Method setPackDate.
*
* @param packDate
* Date
*/
public void setPackDate(Date packDate) {
this.packDate = packDate;
}
/**
* Method setPickupDate.
*
* @param pickupDate
* Date
*/
public void setPickupDate(Date pickupDate) {
this.pickupDate = pickupDate;
}
/**
* Method setPrescription.
*
* @param prescription
* Prescription
*/
public void setPrescription(Prescription prescription) {
this.prescription = prescription;
}
/**
* Method getWeekssupply.
*
* @return int
*/
public int getWeekssupply() {
return weekssupply;
}
/**
* Method setWeekssupply.
*
* @param weekssupply
* int
*/
public void setWeekssupply(int weekssupply) {
this.weekssupply = weekssupply;
}
/**
* Method getAccumulatedDrugs.
*
* @return Set<AccumulatedDrugs>
*/
public Set<AccumulatedDrugs> getAccumulatedDrugs() {
if (accumulatedDrugs == null) {
accumulatedDrugs = new HashSet<AccumulatedDrugs>();
}
return accumulatedDrugs;
}
/**
* Method setAccumulatedDrugs.
*
* @param accumulatedDrugs
* Set<AccumulatedDrugs>
*/
public void setAccumulatedDrugs(Set<AccumulatedDrugs> accumulatedDrugs) {
this.accumulatedDrugs = accumulatedDrugs;
}
/**
* Method getPillCounts.
*
* @return Set<PillCount>
*/
public Set<PillCount> getPillCounts() {
if (pillCounts == null) {
pillCounts = new HashSet<PillCount>();
}
return pillCounts;
}
/**
* Method setPillCounts.
*
* @param pillCounts
* Set<PillCount>
*/
public void setPillCounts(Set<PillCount> pillCounts) {
this.pillCounts = pillCounts;
}
/**
* @return the dateReturned
*/
public Date getDateReturned() {
return dateReturned;
}
/**
* @param dateReturned
* the dateReturned to set
*/
public void setDateReturned(Date dateReturned) {
this.dateReturned = dateReturned;
}
/**
* @return the packageReturned
*/
public boolean isPackageReturned() {
return packageReturned;
}
/**
* @param packageReturned
* the packageReturned to set
*/
public void setPackageReturned(boolean packageReturned) {
this.packageReturned = packageReturned;
}
/**
* @return the stockReturned
*/
public boolean isStockReturned() {
return stockReturned;
}
/**
* @param stockReturned
* the stockReturned to set
*/
public void setStockReturned(boolean stockReturned) {
this.stockReturned = stockReturned;
}
/**
* @return the reasonForStockReturn
*/
public String getReasonForStockReturn() {
return reasonForPackageReturn;
}
/**
* @param reasonForStockReturn
* the reasonForStockReturn to set
*/
public void setReasonForStockReturn(String reasonForStockReturn) {
this.reasonForPackageReturn = reasonForStockReturn;
}
/**
* Method hasARVDrug.
*
* @return boolean
*/
public boolean hasARVDrug() {
for (PackagedDrugs pd : getPackagedDrugs()) {
if (pd.getStock().getDrug().getSideTreatment() == 'F')
return true;
}
return false;
}
/**
* @return the clinic
*/
public Clinic getClinic() {
return clinic;
}
/**
* @param clinic
* the clinic to set
*/
public void setClinic(Clinic clinic) {
this.clinic = clinic;
}
public Set<Drug> getARVDrugSet() {
if (arvDrugSet == null) {
arvDrugSet = new HashSet<Drug>();
}
for (PackagedDrugs pd : packagedDrugs) {
Drug theDrug = pd.getStock().getDrug();
if (theDrug.isARV()) {
arvDrugSet.add(theDrug);
}
}
return arvDrugSet;
}
/**
* @return the drugTypes
*/
public String getDrugTypes() {
return drugTypes;
}
/**
* @param drugTypes the drugTypes to set
*/
public void setDrugTypes(String drugTypes) {
this.drugTypes = drugTypes;
}
public int getNextIssueNo() {
if(packageId == null || "".equalsIgnoreCase(packageId)) {
return 1;
}
else {
int months;
if(weekssupply <= 4) {
months = 1;
}
else {
months = weekssupply / 4;
}
/// char c = packageId.charAt(packageId.length() - 1);
return (Character.getNumericValue(packageId.charAt(packageId.length() - 1)) + months );
}
}
}