Skip to content
Snippets Groups Projects
EditSingleReferralAction.java 6.68 KiB
package edu.ncsu.csc.itrust.action;

import edu.ncsu.csc.itrust.beans.MessageBean;
import edu.ncsu.csc.itrust.beans.ReferralBean;
import edu.ncsu.csc.itrust.dao.DAOFactory;
import edu.ncsu.csc.itrust.dao.mysql.OfficeVisitDAO;
import edu.ncsu.csc.itrust.dao.mysql.PatientDAO;
import edu.ncsu.csc.itrust.dao.mysql.PersonnelDAO;
import edu.ncsu.csc.itrust.dao.mysql.ReferralDAO;
import edu.ncsu.csc.itrust.exception.DBException;
import edu.ncsu.csc.itrust.exception.ITrustException;

/**
 * Class that allows creating, editing, and deleting of a single referral.
 *  
 *
 */
public class EditSingleReferralAction {
	
	private ReferralDAO referralDAO;
	private PatientDAO patientDAO;
	private PersonnelDAO personnelDAO;
	private OfficeVisitDAO ovDAO;
	private SendMessageAction messageAction;
	private long hcpid;
	
    public EditSingleReferralAction(DAOFactory factory, long hcpid)
	  throws ITrustException {
	    referralDAO = factory.getReferralDAO();
	    patientDAO = factory.getPatientDAO();
	    personnelDAO = factory.getPersonnelDAO();
	    ovDAO = factory.getOfficeVisitDAO();
	    messageAction = new SendMessageAction(factory, hcpid);
	    this.hcpid = hcpid;
	}
    
	/**
	 * Get a specific referral.
	 * @param id
	 * @return
	 * @throws DBException
	 */
	public ReferralBean getReferral(long id) throws DBException {
		return referralDAO.getReferral(id);
	}
	
	/**
	 * Add a new referral to the database.
	 * @param bean
	 * @throws Exception
	 */
	public void addReferral(ReferralBean bean) throws Exception {
		if (bean.getSenderID() != hcpid) {
			throw new ITrustException("New referrals must be from the current HCP.");
		}
		long id = referralDAO.addReferral(bean);
		bean = referralDAO.getReferral(id);
		sendReferralCreatedMessages(bean);
	}
	
	/**
	 * Edit an existing referral.
	 * @param bean
	 * @throws ITrustException
	 */
	public void editReferral(ReferralBean bean) throws ITrustException {
		if (bean.getSenderID() != hcpid) {
			throw new ITrustException("Edited referrals must be from the current HCP.");
		}
		referralDAO.editReferral(bean);
	}
	
	/**
	 * Delete a referral from the database.
	 * @param bean
	 * @throws Exception
	 */
	public void deleteReferral(ReferralBean bean) throws Exception {
		if (bean.getSenderID() != hcpid) {
			throw new ITrustException("Deleted referrals must be from the current HCP.");
		}
		referralDAO.removeReferral(bean.getId());
		sendReferralCancelledMessages(bean);
	}

	/**
	 * Get the patient name associated with the given referral.
	 * @param bean
	 * @return The patient's name as a String.
	 * @throws ITrustException
	 */
	public String getPatientName(ReferralBean bean) throws ITrustException {
		return patientDAO.getName(bean.getPatientID());
	}
	
	/**
	 * Get the name of the receiving HCP associated with the given referral.
	 * @param bean
	 * @return The HCP's name as a String.
	 * @throws ITrustException
	 */
	public String getReceivingHCPName(ReferralBean bean) throws ITrustException {
		return personnelDAO.getName(bean.getReceiverID());
	}
	
	public String getReceivingHCPSpecialty(ReferralBean bean) throws ITrustException {
		String s = personnelDAO.getPersonnel(bean.getReceiverID()).getSpecialty();
		return s==null ? "" : s;
	}
	
	public String getOfficeVisitDate(ReferralBean bean) throws ITrustException {
		return ovDAO.getOfficeVisit(bean.getOvid()).getVisitDateStr();
	}
	
	/**
	 * Send messages to the users associated with creating a referral.
	 * @param bean
	 * @throws Exception
	 */
	public void sendReferralCreatedMessages(ReferralBean bean) throws Exception {
		StringBuilder body = new StringBuilder();
		body.append("Referral information:\n");
		String senderSpecialty = personnelDAO.getPersonnel(bean.getSenderID()).getSpecialty();
		String receiverSpecialty = personnelDAO.getPersonnel(bean.getReceiverID()).getSpecialty();
		senderSpecialty = senderSpecialty==null ? "no specialty" : senderSpecialty;
		receiverSpecialty = receiverSpecialty==null ? "no specialty" : receiverSpecialty;
		body.append("Sending HCP: " + personnelDAO.getName(bean.getSenderID()) + " (" + 
								      senderSpecialty + ")\n");
		body.append("Receiving HCP: " + personnelDAO.getName(bean.getReceiverID()) + " (" + 
										receiverSpecialty + ")\n");
		body.append("Patient: " + getPatientName(bean) + "\n");
		body.append("Notes: " + bean.getReferralDetails() + "\n");
		body.append("Created on: " + bean.getTimeStamp() + "\n");
		
		
		MessageBean senderMsg = new MessageBean();
		senderMsg.setFrom(bean.getSenderID());
		senderMsg.setTo(bean.getSenderID());
		senderMsg.setBody(body.toString());
		senderMsg.setSubject("You Created a New Referral");
		senderMsg.setRead(0);
		messageAction.sendMessage(senderMsg);
		
		MessageBean receiverMsg = new MessageBean();
		receiverMsg.setFrom(bean.getSenderID());
		receiverMsg.setTo(bean.getReceiverID());
		receiverMsg.setBody(body.toString());
		receiverMsg.setSubject("You Received a New Referral");
		receiverMsg.setRead(0);
		messageAction.sendMessage(receiverMsg);
		
		MessageBean patientMsg = new MessageBean();
		patientMsg.setFrom(bean.getSenderID());
		patientMsg.setTo(bean.getPatientID());
		patientMsg.setBody(body.toString());
		patientMsg.setSubject("You Received a New Referral");
		patientMsg.setRead(0);
		messageAction.sendMessage(patientMsg);
	}
	
	/**
	 * Send messages to the users associated with canceling a referral.
	 * @param bean
	 * @throws Exception
	 */
	public void sendReferralCancelledMessages(ReferralBean bean) throws Exception {
		StringBuilder body = new StringBuilder();
		body.append("The referral created on "+bean.getTimeStamp()+"has been deleted.\n\n");
		body.append("The referral is reproduced here for your convienence:\n");
		body.append("Sending HCP: " + personnelDAO.getName(bean.getSenderID()) + " (" + 
									  personnelDAO.getPersonnel(bean.getSenderID()).getSpecialty() + ")\n");
		body.append("Receiving HCP: " + personnelDAO.getName(bean.getReceiverID()) + " (" + 
				  						personnelDAO.getPersonnel(bean.getReceiverID()).getSpecialty() + ")\n");
		body.append("Patient: " + getPatientName(bean) + "\n");
		body.append("Notes: " + bean.getReferralDetails() + "\n");
		body.append("Created on: " + bean.getTimeStamp() + "\n");
		
		MessageBean receiverMsg = new MessageBean();
		receiverMsg.setFrom(bean.getSenderID());
		receiverMsg.setTo(bean.getReceiverID());
		receiverMsg.setBody(body.toString());
		receiverMsg.setSubject("Your Referral Was Cancelled");
		receiverMsg.setRead(0);
		messageAction.sendMessage(receiverMsg);
		
		MessageBean patientMsg = new MessageBean();
		patientMsg.setFrom(bean.getSenderID());
		patientMsg.setTo(bean.getPatientID());
		patientMsg.setBody(body.toString());
		patientMsg.setSubject("Your Referral Was Cancelled");
		patientMsg.setRead(0);
		messageAction.sendMessage(patientMsg);
	}
	
}