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); } }