package org.celllife.idart.gui.patient.tabs;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import model.manager.PatientManager;
import org.apache.log4j.Logger;
import org.celllife.idart.database.hibernate.Appointment;
import org.celllife.idart.database.hibernate.Patient;
import org.celllife.idart.gui.misc.GenericTab;
import org.celllife.idart.gui.utils.ResourceUtils;
import org.celllife.idart.gui.utils.iDartFont;
import org.celllife.idart.gui.widget.DateButton;
import org.celllife.idart.misc.iDARTUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.hibernate.Session;
public class TreatmentManagementTab extends GenericTab implements IPatientTab {
private DateButton btnNextAppointment;
private Session hSession;
private boolean isPatientActive;
private final Logger log = Logger.getLogger(getClass());
private TabFolder parent;
private int style;
private Text txtTreatmentSupporterName;
private Text txtTreatmentSupporterPhone;
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.patient.util.IPatientTab#changesMade(org.celllife.idart.database.hibernate.Patient)
*/
@Override
public boolean changesMade(Patient patient) {
boolean noChangesMade = true;
noChangesMade &= patient.getNextOfKinName().trim().equals(
txtTreatmentSupporterName.getText().trim());
noChangesMade &= patient.getNextOfKinPhone().trim().equals(
txtTreatmentSupporterPhone.getText().trim());
Date theNewAppointmentDate = btnNextAppointment.getDate();
Appointment currentAppointment = PatientManager
.getLatestActiveAppointmentForPatient(patient);
if (currentAppointment != null) {
Date theLatestAppointmentDate = currentAppointment
.getAppointmentDate();
if (theLatestAppointmentDate == null) {
log
.error("appointment extists, but next appointment date is null!");
noChangesMade = false;
} else if (theNewAppointmentDate != null
&& theNewAppointmentDate
.compareTo(theLatestAppointmentDate) != 0) {
noChangesMade = false;
}
} else if (theNewAppointmentDate != null) {
noChangesMade = false;
}
return !noChangesMade;
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.patient.util.IPatientTab#clear()
*/
@Override
public void clear() {
btnNextAppointment.setText("Next App Date");
txtTreatmentSupporterName.setText("");
txtTreatmentSupporterPhone.setText("");
btnNextAppointment.setDate(null);
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.misc.IGenericTab#create()
*/
@Override
public void create() {
tabItem = new TabItem(parent, style);
tabItem.setText(" Treatment Management ");
createGrpTreatmentManagement();
}
/**
* This method initializes grpTreatmentSupporter
*/
private void createGrpTreatmentManagement() {
Group grpTreatmentSupporter = new Group(tabItem.getParent(), SWT.NONE);
grpTreatmentSupporter.setBounds(new Rectangle(3, 3, 750, 140));
grpTreatmentSupporter.setFont(ResourceUtils
.getFont(iDartFont.VERASANS_8));
tabItem.setControl(grpTreatmentSupporter);
Label lblNextAppointment = new Label(grpTreatmentSupporter, SWT.NONE);
lblNextAppointment.setBounds(new Rectangle(6, 94, 114, 18));
lblNextAppointment.setText(" Next Appointment:");
lblNextAppointment.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
btnNextAppointment = new DateButton(grpTreatmentSupporter,
DateButton.ZERO_TIMESTAMP,
null);
btnNextAppointment.setBounds(new Rectangle(195, 90, 200, 25));
btnNextAppointment.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
btnNextAppointment.setText("Next App Date");
// Treatment Supporter Name
Label lblTreatmentSupporterName = new Label(grpTreatmentSupporter,
SWT.NONE);
lblTreatmentSupporterName.setBounds(new Rectangle(6, 32, 179, 20));
lblTreatmentSupporterName.setFont(ResourceUtils
.getFont(iDartFont.VERASANS_8));
lblTreatmentSupporterName.setText(" Treatment Supporter's Name:");
txtTreatmentSupporterName = new Text(grpTreatmentSupporter, SWT.BORDER);
txtTreatmentSupporterName.setBounds(new Rectangle(194, 32, 200, 20));
txtTreatmentSupporterName.setFont(ResourceUtils
.getFont(iDartFont.VERASANS_8));
// Treatment Supporter Phone
Label lblTreatmentSupporterPhone = new Label(grpTreatmentSupporter,
SWT.NONE);
lblTreatmentSupporterPhone.setBounds(new Rectangle(6, 62, 179, 20));
lblTreatmentSupporterPhone.setFont(ResourceUtils
.getFont(iDartFont.VERASANS_8));
lblTreatmentSupporterPhone.setText(" Treatment Supporter's Phone:");
txtTreatmentSupporterPhone = new Text(grpTreatmentSupporter, SWT.BORDER);
txtTreatmentSupporterPhone.setBounds(new Rectangle(194, 62, 200, 20));
txtTreatmentSupporterPhone.setFont(ResourceUtils
.getFont(iDartFont.VERASANS_8));
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.patient.util.IPatientTab#enable(boolean,
* org.eclipse.swt.graphics.Color)
*/
@Override
public void enable(boolean enable, Color color) {
txtTreatmentSupporterName.setEnabled(enable);
txtTreatmentSupporterPhone.setEnabled(enable);
btnNextAppointment.setEnabled(enable);
if (enable) {
btnNextAppointment.setEnabled(isPatientActive);
}
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.patient.util.IPatientTab#populate(org.hibernate.Session,
* org.celllife.idart.database.hibernate.Patient, boolean)
*/
@Override
public void loadPatientDetails(Patient patient, @SuppressWarnings("hiding")
boolean isPatientActive) {
this.isPatientActive = isPatientActive;
txtTreatmentSupporterName.setText(patient.getNextOfKinName());
txtTreatmentSupporterPhone.setText(patient.getNextOfKinPhone());
Date theDateExpected = null;
Appointment latestApp = PatientManager
.getLatestActiveAppointmentForPatient(patient);
if (latestApp != null) {
theDateExpected = latestApp.getAppointmentDate();
}
if (theDateExpected != null) {
btnNextAppointment.setText(iDARTUtil.format(theDateExpected));
} else {
btnNextAppointment.setText("Next App Date");
}
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.misc.IGenericTab#setParent(org.eclipse.swt.widgets.TabFolder)
*/
@Override
public void setParent(TabFolder parent) {
this.parent = parent;
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.patient.util.IPatientTab#setPatientDetails(org.celllife.idart.database.hibernate.Patient)
*/
@Override
public void setPatientDetails(Patient patient) {
patient.setNextOfKinName(txtTreatmentSupporterName.getText());
patient.setNextOfKinPhone(txtTreatmentSupporterPhone.getText());
if (btnNextAppointment.getDate() != null) {
PatientManager.setNextAppointmentDate(hSession, patient,
btnNextAppointment.getDate());
}
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.misc.IGenericTab#setSession(org.hibernate.Session)
*/
@Override
public void setSession(Session session) {
this.hSession = session;
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.misc.IGenericTab#setStyle(int)
*/
@Override
public void setStyle(int SWTStyle) {
this.style = SWTStyle;
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.patient.util.IPatientTab#submit(org.hibernate.Session,
* org.celllife.idart.database.hibernate.Patient)
*/
@Override
public void submit(Patient patient) {
}
/*
* (non-Javadoc)
*
* @see org.celllife.idart.gui.patient.IPatientTab#validateFields()
*/
@Override
public Map<String, String> validateFields(Patient patient) {
// SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy");
// if (sdf.format(theNewAppointmentDate);
Map<String, String> map = new HashMap<String, String>();
if (btnNextAppointment.getDate() != null) {
Date theNewAppointmentDate = btnNextAppointment.getDate();
Calendar today = Calendar.getInstance();
today.setTime(new Date());
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MILLISECOND, 0);
boolean validNextAppointmentDate = (theNewAppointmentDate
.compareTo(today.getTime()) == 0 || theNewAppointmentDate
.after(today.getTime()));
map.put("result", String.valueOf(validNextAppointmentDate));
if (!validNextAppointmentDate) {
map.put("title", "Error with next appointment date");
map.put("message",
"You can't set an appointment date in the past. Please select a date after today.");
}
return map;
} else {
map.put("result", String.valueOf(true));
return map;
}
}
}