/* * 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.gui.deletions; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import model.manager.DeletionsManager; import model.manager.DrugManager; import model.manager.PackageManager; import model.manager.PatientManager; import model.manager.StockManager; import org.apache.log4j.Logger; import org.celllife.idart.commonobjects.CommonObjects; import org.celllife.idart.commonobjects.iDartProperties; import org.celllife.idart.commonobjects.iDartProperties.LabelType; import org.celllife.idart.database.hibernate.AccumulatedDrugs; import org.celllife.idart.database.hibernate.Appointment; import org.celllife.idart.database.hibernate.Drug; import org.celllife.idart.database.hibernate.Form; import org.celllife.idart.database.hibernate.PackagedDrugs; import org.celllife.idart.database.hibernate.Packages; import org.celllife.idart.database.hibernate.Patient; import org.celllife.idart.database.hibernate.PatientAttribute; import org.celllife.idart.database.hibernate.PatientIdentifier; import org.celllife.idart.database.hibernate.PrescribedDrugs; import org.celllife.idart.database.hibernate.Prescription; import org.celllife.idart.database.hibernate.Stock; import org.celllife.idart.database.hibernate.StockCenter; import org.celllife.idart.database.hibernate.util.HibernateUtil; import org.celllife.idart.gui.platform.GenericOthersGui; import org.celllife.idart.gui.search.PatientSearch; import org.celllife.idart.gui.search.Search; import org.celllife.idart.gui.user.ConfirmWithPasswordDialogAdapter; import org.celllife.idart.gui.utils.ResourceUtils; import org.celllife.idart.gui.utils.iDartColor; import org.celllife.idart.gui.utils.iDartFont; import org.celllife.idart.gui.utils.iDartImage; import org.celllife.idart.messages.Messages; import org.celllife.idart.misc.PatientBarcodeParser; import org.celllife.idart.misc.iDARTUtil; import org.celllife.idart.print.label.PrintThread; import org.celllife.idart.print.label.ScriptSummaryLabel; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.hibernate.HibernateException; import org.hibernate.Transaction; /** */ public class DeleteStockPrescriptionsPackages extends GenericOthersGui { private Group grpDeletionTypeSelection; private Button rdBtnStock; private Button rdBtnPackage; private Button rdBtnPrescription; private Button rdBtnItem; private Label lblPackage; private Label lblPrescription; private Label lblStock; private Label lblItem; private Group grpPatientInfo; private Label lblPatientId; private Text txtPatientId; private Button btnSearch; private Button btnClose; private Button btnClear; private Patient localPatient; private Drug localDrug; private Group grpPackageInfo; private Label lblPackageId; private Text txtPackageId; private Label lblDatePacked; private Text txtDatePacked; private Label lblDrugsInPackage; private Table tblDrugsInPackage; private Packages packageToRemove; private Prescription prescriptionToRemove; private List<Stock> stockToRemove; private Button btnRemovePackage; private KeyListener patientIDListener; /** * @param parent */ public DeleteStockPrescriptionsPackages(Shell parent) { super(parent, HibernateUtil.getNewSession()); activate(); } /** * @param parent * @param patient */ public DeleteStockPrescriptionsPackages(Shell parent, Patient patient) { super(parent, HibernateUtil.getNewSession()); activate(); localPatient = PatientManager.getPatient(getHSession(), patient.getId()); txtPatientId.setText(patient.getPatientId()); getPatientsPackages(); } /** * This method initializes getShell() */ @Override protected void createShell() { String shellTxt = "Stock, Prescription and Package Deletions"; Rectangle bounds = new Rectangle(25, 0, 900, 700); buildShell(shellTxt, bounds); patientIDListener = new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if ((e.character == SWT.CR) || (e.character == (char) iDartProperties.intValueOfAlternativeBarcodeEndChar)) { cmdSearchWidgetSelected(); } } }; createGrpDeletionTypeSelection(); createGrpPatientInfo(); createGrpPackageInfo(); } /** * This method initializes compHeader * */ @Override protected void createCompHeader() { String txt = "Stock, Prescription and Package Deletions"; iDartImage icoImage = iDartImage.REDOPACKAGE; buildCompHeader(txt, icoImage); } private void createGrpDeletionTypeSelection() { // grpDeletionTypeSelection grpDeletionTypeSelection = new Group(getShell(), SWT.NONE); grpDeletionTypeSelection .setBounds(new org.eclipse.swt.graphics.Rectangle(30, 80, 840, 100)); lblPackage = new Label(grpDeletionTypeSelection, SWT.NONE); lblPackage.setBounds(new org.eclipse.swt.graphics.Rectangle(100, 15, 50, 43)); lblPackage.setText(""); lblPackage.setImage(ResourceUtils.getImage(iDartImage.PACKAGEDELETE)); rdBtnPackage = new Button(grpDeletionTypeSelection, SWT.RADIO); rdBtnPackage.setBounds(30, 60, 180, 20); rdBtnPackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); rdBtnPackage.setText("Undo Created Package"); rdBtnPackage.setSelection(true); rdBtnPackage .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { if (rdBtnPackage.getSelection()) { switchDeletionType(); } } }); lblItem = new Label(grpDeletionTypeSelection, SWT.NONE); lblItem.setBounds(new org.eclipse.swt.graphics.Rectangle(310, 15, 50, 43)); lblItem.setText(""); lblItem.setImage(ResourceUtils.getImage(iDartImage.DRUGALLERGY)); rdBtnItem = new Button(grpDeletionTypeSelection, SWT.RADIO); rdBtnItem.setBounds(230, 60, 190, 20); rdBtnItem.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); rdBtnItem.setText("Redo Single Item in Package"); rdBtnItem .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { if (rdBtnItem.getSelection()) { switchDeletionType(); } } }); lblStock = new Label(grpDeletionTypeSelection, SWT.NONE); lblStock.setBounds(new org.eclipse.swt.graphics.Rectangle(510, 15, 50, 43)); lblStock.setText(""); lblStock.setImage(ResourceUtils.getImage(iDartImage.STOCKDELETE)); rdBtnStock = new Button(grpDeletionTypeSelection, SWT.RADIO); rdBtnStock.setBounds(430, 60, 180, 20); rdBtnStock.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); rdBtnStock.setText("Delete Incorrect Stock Batch"); rdBtnStock .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { if (rdBtnStock.getSelection()) { switchDeletionType(); } } }); lblPrescription = new Label(grpDeletionTypeSelection, SWT.NONE); lblPrescription.setBounds(new org.eclipse.swt.graphics.Rectangle(710, 15, 50, 43)); lblPrescription.setText(""); lblPrescription.setImage(ResourceUtils .getImage(iDartImage.PRESCRIPTIONDELETE)); rdBtnPrescription = new Button(grpDeletionTypeSelection, SWT.RADIO); rdBtnPrescription.setBounds(630, 60, 185, 20); rdBtnPrescription.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); rdBtnPrescription.setText("Delete Incorrect Prescription"); rdBtnPrescription .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { if (rdBtnPrescription.getSelection()) { switchDeletionType(); } } }); } /** * This method initializes grpPackageInfo * */ private void createGrpPatientInfo() { if (grpPatientInfo != null) { grpPatientInfo.dispose(); } grpPatientInfo = new Group(getShell(), SWT.NONE); grpPatientInfo.setBounds(new org.eclipse.swt.graphics.Rectangle(200, 195, 500, 55)); lblPatientId = new Label(grpPatientInfo, SWT.NONE); lblPatientId.setBounds(new org.eclipse.swt.graphics.Rectangle(20, 20, 60, 20)); lblPatientId.setText(Messages.getString("patient.label.patientid")); //$NON-NLS-1$ lblPatientId.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); txtPatientId = new Text(grpPatientInfo, SWT.BORDER); txtPatientId.setBounds(new org.eclipse.swt.graphics.Rectangle(90, 15, 240, 20)); txtPatientId.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); if (!rdBtnStock.getSelection()) { txtPatientId.addKeyListener(patientIDListener); } txtPatientId.setFocus(); btnSearch = new Button(grpPatientInfo, SWT.NONE); btnSearch.setBounds(new org.eclipse.swt.graphics.Rectangle(350, 10, 100, 30)); btnSearch.setText("Patient Search"); btnSearch.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); btnSearch .setToolTipText("Press this button to search for an existing patient."); btnSearch .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { cmdSearchWidgetSelected(); } }); } /** * This method initializes createGrpDrugInfo * */ private void createGrpDrugInfo() { if (grpPatientInfo != null) { grpPatientInfo.dispose(); } grpPatientInfo = new Group(getShell(), SWT.NONE); grpPatientInfo.setBounds(new org.eclipse.swt.graphics.Rectangle(200, 195, 500, 55)); lblPatientId = new Label(grpPatientInfo, SWT.NONE); lblPatientId.setBounds(new org.eclipse.swt.graphics.Rectangle(20, 20, 60, 20)); lblPatientId.setText("Drug:"); lblPatientId.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); txtPatientId = new Text(grpPatientInfo, SWT.BORDER); txtPatientId.setBounds(new org.eclipse.swt.graphics.Rectangle(90, 15, 240, 20)); if (rdBtnStock.getSelection()) { txtPatientId.addKeyListener(patientIDListener); } txtPatientId.setEnabled(false); btnSearch = new Button(grpPatientInfo, SWT.NONE); btnSearch.setBounds(new org.eclipse.swt.graphics.Rectangle(350, 10, 100, 30)); btnSearch.setText("Drug Search"); btnSearch.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); btnSearch .setToolTipText("Press this button to search for the drug for which you wish to delete a stock batch."); btnSearch .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { cmdDrugSearchWidgetSelected(); } }); } /** * This method initializes compButtons * */ @Override protected void createCompButtons() { btnClear = new Button(getCompButtons(), SWT.NONE); btnClear.setText("Clear"); btnClear.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); btnClear .setToolTipText("Press this button to close this screen.\nThe information you've entered here will be lost."); btnClear .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { packageToRemove = null; prescriptionToRemove = null; stockToRemove = null; clearForm(); } }); btnClose = new Button(getCompButtons(), SWT.NONE); btnClose.setText("Close"); btnClose.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); btnClose .setToolTipText("Press this button to close this screen.\nThe information you've entered here will be lost."); btnClose .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { cmdCloseWidgetSelected(); } }); } /** * This method is called when the user presses the 'Close' button * */ private void cmdCloseWidgetSelected() { closeShell(true); } private void cmdSearchWidgetSelected() { boolean showInactivePatients = rdBtnPrescription.getSelection(); String patientId = PatientBarcodeParser.getPatientId(txtPatientId .getText().trim()); PatientSearch search = new PatientSearch(getShell(), getHSession()); search.setShowInactive(showInactivePatients); PatientIdentifier identifier = search.search(patientId); if (identifier != null) { // First clear the form and fields packageToRemove = null; prescriptionToRemove = null; stockToRemove = null; clearForm(); // load patient localPatient = identifier.getPatient(); txtPatientId.setText(localPatient.getPatientId()); if (rdBtnPackage.getSelection() || rdBtnItem.getSelection()) { getPatientsPackages(); } else if (rdBtnPrescription.getSelection()) { getPatientsPrescriptions(); } } } private void cmdDrugSearchWidgetSelected() { Search drugSearch = new Search(getHSession(), getShell(), CommonObjects.DRUG); if (drugSearch.getValueSelected() != null) { localDrug = DrugManager.getDrug(getHSession(), drugSearch .getValueSelected()[0]); txtPatientId.setText(localDrug.getName()); getStockBatches(); } } private void getPatientsPackages() { packageToRemove = PackageManager.getLastPackageMade(getHSession(), localPatient); if (packageToRemove == null) { MessageBox mb = new MessageBox(getShell(), SWT.ICON_WARNING | SWT.OK); mb.setText("No Packages to Remove"); mb .setMessage("Patient '" + localPatient.getPatientId() + "' does not have any packages that can be removed from the database at this point.\n\n " + "Only the most recent package for a patient can be removed."); mb.open(); txtPatientId.setText(""); txtPackageId.setFocus(); } else if (rdBtnItem.getSelection() && ((packageToRemove.getPackagedDrugs().size() + packageToRemove .getAccumulatedDrugs().size()) <= 1)) { MessageBox mb = new MessageBox(getShell(), SWT.ICON_WARNING | SWT.OK); mb.setText("Cannot Remove Last Item In Package"); mb .setMessage("There is only 1 item in this package, so you cannot remove this simgle item.\n\nTo remove the entire package, select Undo Created Package."); mb.open(); txtPatientId.setText(""); txtPackageId.setFocus(); } else { populatePackageGUI(); btnRemovePackage.setEnabled(true); } } private void getPatientsPrescriptions() { prescriptionToRemove = PackageManager .getMostRecentPrescriptionWithoutPackages(getHSession(), localPatient); if (prescriptionToRemove == null) { MessageBox mb = new MessageBox(getShell()); mb.setText("No Prescription to Remove"); mb .setMessage("Patient '" + localPatient.getPatientId() + "' does not have any prescription that can be removed from the database at this point. \n\nThe only prescriptions that " + "can be removed are those for which no packages have been created."); mb.open(); txtPatientId.setText(""); txtPackageId.setFocus(); } else { populatePrescriptionGUI(); btnRemovePackage.setEnabled(true); } } private void getStockBatches() { stockToRemove = StockManager.getEmptyBatchesForDrug(getHSession(), txtPatientId.getText()); if ((stockToRemove == null) || (stockToRemove.size() == 0)) { MessageBox mb = new MessageBox(getShell()); mb.setText("No Stock to Remove"); mb .setMessage("Drug '" + txtPatientId.getText() + "' does not have any batches that can be removed from the database at this point. \n\nThe only batches that " + "can be removed are those from which nothing has been dispensed."); mb.open(); txtPatientId.setText(""); } else { populateStockGUI(); btnRemovePackage.setEnabled(true); } } private void populatePackageGUI() { String itemText[]; txtPackageId.setText(packageToRemove.getPackageId()); String date = (new SimpleDateFormat("dd/MM/yyyy 'at' h:mm a")) .format(packageToRemove.getPackDate()); txtDatePacked.setText(date); List<PackagedDrugs> drugsInPackage = packageToRemove.getPackagedDrugs(); java.util.Set<AccumulatedDrugs> accumInPackage = packageToRemove .getAccumulatedDrugs(); TableItem[] t = new TableItem[drugsInPackage.size() + accumInPackage.size()]; for (int j = 0; j < drugsInPackage.size(); j++) { PackagedDrugs pd = drugsInPackage.get(j); if (pd != null) { t[j] = new TableItem(tblDrugsInPackage, SWT.NONE); itemText = new String[5]; itemText[0] = "Dispensed"; itemText[1] = pd.getStock().getDrug().getName(); itemText[2] = pd.getAmount() + ""; itemText[3] = pd.getStock().getBatchNumber(); t[j].setText(itemText); t[j].setData(pd); } } Iterator<AccumulatedDrugs> it = accumInPackage.iterator(); int k = 0; while (it.hasNext()) { AccumulatedDrugs acc = it.next(); if (acc != null) { t[k + drugsInPackage.size()] = new TableItem(tblDrugsInPackage, SWT.NONE); itemText = new String[5]; itemText[0] = "Accumulated"; itemText[1] = acc.getPillCount().getDrug().getName(); itemText[2] = acc.getPillCount().getAccum() + ""; itemText[3] = ""; t[k + drugsInPackage.size()].setText(itemText); t[k + drugsInPackage.size()].setData(acc); k++; } } } private void populatePrescriptionGUI() { String itemText[]; txtPackageId.setText(prescriptionToRemove.getPrescriptionId()); String date = (new SimpleDateFormat("dd/MM/yyyy 'at' h:mm a")) .format(prescriptionToRemove.getDate()); txtDatePacked.setText(date); List<PrescribedDrugs> drugsInScript = prescriptionToRemove .getPrescribedDrugs(); TableItem[] t = new TableItem[drugsInScript.size()]; for (int j = 0; j < drugsInScript.size(); j++) { t[j] = new TableItem(tblDrugsInPackage, SWT.NONE); PrescribedDrugs pd = drugsInScript.get(j); String tempAmtPerTime = ""; if (new BigDecimal(pd.getAmtPerTime()).scale() == 0) { tempAmtPerTime = "" + new BigDecimal(pd.getAmtPerTime()).unscaledValue() .intValue(); } else { tempAmtPerTime = "" + pd.getAmtPerTime(); } itemText = new String[2]; itemText[0] = pd.getDrug().getName(); Form theForm = pd.getDrug().getForm(); if (theForm.getFormLanguage1().equals("")) // is a cream, no amount // per time { itemText[1] = theForm.getActionLanguage1() + " " + pd.getTimesPerDay() + " times a day."; } else { itemText[1] = theForm.getActionLanguage1() + " " + tempAmtPerTime + " " + theForm.getFormLanguage1() + " " + pd.getTimesPerDay() + " times a day."; } t[j].setText(itemText); } } private void populateStockGUI() { java.util.List<Stock> batchList = null; // Clear the table of all previous rows tblDrugsInPackage.removeAll(); try { batchList = stockToRemove; Iterator<Stock> iter = batchList.iterator(); while (iter.hasNext()) { Stock thisStock = iter.next(); final TableItem ti = new TableItem(tblDrugsInPackage, SWT.NONE); ti.setBackground(ResourceUtils.getColor(iDartColor.WHITE)); SimpleDateFormat df = new SimpleDateFormat("MM/yyyy"); SimpleDateFormat dfDays = new SimpleDateFormat("dd/MM/yyyy"); ti.setText(2, thisStock.getBatchNumber()); ti.setText(3, (thisStock.getManufacturer() == null ? "" : thisStock.getManufacturer())); ti.setText(4, df.format(thisStock.getExpiryDate())); ti.setText(0, dfDays.format(thisStock.getDateReceived())); ti.setText(1, (new Integer(thisStock.getUnitsReceived())) .toString()); ti.setText(5, thisStock.getStockCenter().getStockCenterName()); ti.setData(thisStock); } } catch (HibernateException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { batchList = null; } } private void cmdRemoveSelected() { // package deletion if (fieldsOk()) { // before we try anything, lets ask the user for their password ConfirmWithPasswordDialogAdapter passwordDialog = new ConfirmWithPasswordDialogAdapter( getShell(), getHSession()); passwordDialog.setMessage("Please enter your Password"); // if password verified String messg = passwordDialog.open(); if (messg.equalsIgnoreCase("verified")) { if (rdBtnPackage.getSelection()) { deletePackage(); clearForm(); closeAndReopenSession(); } else if (rdBtnPrescription.getSelection()) { deleteScript(); clearForm(); closeAndReopenSession(); } else if (rdBtnStock.getSelection()) { deleteStock(); clearForm(); closeAndReopenSession(); } else if (rdBtnItem.getSelection()) { deleteItem(); clearForm(); txtPatientId.setText(packageToRemove.getPrescription() .getPatient().getPatientId()); closeAndReopenSession(); cmdSearchWidgetSelected(); } } // Incorrect password entered, else if (messg.equalsIgnoreCase("unverified")) { cmdCloseWidgetSelected(); } else if (messg.equalsIgnoreCase("cancel")) { clearForm(); } } } /** * This method closes and reopens a session. It should be used in screens * that don't close after a write * */ public void closeAndReopenSession() { try { if (getHSession() != null) { getHSession().close(); } setHSession(HibernateUtil.getNewSession()); } catch (HibernateException he) { getLog().error(he); } } /** * This method initializes group * */ private void createGrpPackageInfo() { if (grpPackageInfo != null) { grpPackageInfo.dispose(); } grpPackageInfo = new Group(getShell(), SWT.NONE); grpPackageInfo.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); grpPackageInfo.setText("Package To Remove:"); grpPackageInfo.setBounds(new org.eclipse.swt.graphics.Rectangle(30, 260, 840, 330)); lblPackageId = new Label(grpPackageInfo, SWT.NONE); lblPackageId.setBounds(new Rectangle(260, 30, 100, 20)); lblPackageId.setText("Package ID:"); lblPackageId.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); txtPackageId = new Text(grpPackageInfo, SWT.BORDER); txtPackageId.setBounds(new Rectangle(380, 30, 180, 20)); txtPackageId.setEnabled(false); txtPackageId.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); lblDatePacked = new Label(grpPackageInfo, SWT.NONE); lblDatePacked.setBounds(new Rectangle(260, 55, 100, 20)); lblDatePacked.setText("Date Packed:"); lblDatePacked.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); txtDatePacked = new Text(grpPackageInfo, SWT.BORDER); txtDatePacked.setBounds(new Rectangle(380, 55, 180, 20)); txtDatePacked.setEnabled(false); txtDatePacked.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); lblDrugsInPackage = new Label(grpPackageInfo, SWT.CENTER); lblDrugsInPackage.setBounds(new Rectangle(230, 100, 380, 15)); lblDrugsInPackage.setText("Drugs in This Package:"); lblDrugsInPackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); createTblDrugsInPackage(); btnRemovePackage = new Button(grpPackageInfo, SWT.NONE); btnRemovePackage.setBounds(new org.eclipse.swt.graphics.Rectangle(330, 290, 170, 30)); btnRemovePackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); btnRemovePackage.setEnabled(false); if (rdBtnPackage.getSelection()) { btnRemovePackage.setText("Remove this Package"); } else if (rdBtnItem.getSelection()) { btnRemovePackage.setText("Remove this Drug"); } btnRemovePackage .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { cmdRemoveSelected(); } }); txtPatientId.setText(""); } /** * This method initializes tblDrugsInPackage * */ private void createTblDrugsInPackage() { tblDrugsInPackage = new Table(grpPackageInfo, SWT.BORDER | SWT.FULL_SELECTION | SWT.SINGLE); tblDrugsInPackage.setHeaderVisible(true); tblDrugsInPackage.setLinesVisible(true); tblDrugsInPackage.setBounds(new org.eclipse.swt.graphics.Rectangle(30, 118, 780, 160)); tblDrugsInPackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); TableColumn tblColDrugSource = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColDrugSource.setText("Dispensed / Accum"); tblColDrugSource.setWidth(125); TableColumn tblColDrugName = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColDrugName.setText("Drug Name"); tblColDrugName.setWidth(380); TableColumn tblColQuantity = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColQuantity.setText("Qty"); tblColQuantity.setWidth(80); TableColumn tblColBatchNo = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColBatchNo.setText("Batch No"); tblColBatchNo.setWidth(125); } /** * This method initializes group * */ private void createGrpPrescriptionInfo() { if (grpPackageInfo != null) { grpPackageInfo.dispose(); } grpPackageInfo = new Group(getShell(), SWT.NONE); grpPackageInfo.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); grpPackageInfo.setText("Prescription To Remove:"); grpPackageInfo.setBounds(new org.eclipse.swt.graphics.Rectangle(30, 260, 840, 330)); lblPackageId = new Label(grpPackageInfo, SWT.NONE); lblPackageId.setBounds(new Rectangle(260, 30, 100, 20)); lblPackageId.setText("Prescription ID:"); lblPackageId.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); txtPackageId = new Text(grpPackageInfo, SWT.BORDER); txtPackageId.setBounds(new Rectangle(380, 30, 180, 20)); txtPackageId.setEnabled(false); txtPackageId.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); lblDatePacked = new Label(grpPackageInfo, SWT.NONE); lblDatePacked.setBounds(new Rectangle(260, 55, 100, 20)); lblDatePacked.setText("Date Captured"); lblDatePacked.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); txtDatePacked = new Text(grpPackageInfo, SWT.BORDER); txtDatePacked.setBounds(new Rectangle(380, 55, 180, 20)); txtDatePacked.setEnabled(false); txtDatePacked.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); lblDrugsInPackage = new Label(grpPackageInfo, SWT.CENTER); lblDrugsInPackage.setBounds(new Rectangle(230, 100, 380, 15)); lblDrugsInPackage.setText("Drugs on the Prescription:"); lblDrugsInPackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); createTblDrugsInPrescription(); btnRemovePackage = new Button(grpPackageInfo, SWT.NONE); btnRemovePackage.setBounds(new org.eclipse.swt.graphics.Rectangle(330, 290, 170, 30)); btnRemovePackage.setEnabled(false); btnRemovePackage.setText("Remove this Prescription"); btnRemovePackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); btnRemovePackage .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { cmdRemoveSelected(); } }); txtPatientId.setText(""); } /** * This method initializes group * */ private void createGrpStockBatchSelection() { if (grpPackageInfo != null) { grpPackageInfo.dispose(); } grpPackageInfo = new Group(getShell(), SWT.NONE); grpPackageInfo.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); grpPackageInfo.setText("Available Batches for Drug:"); grpPackageInfo.setBounds(new org.eclipse.swt.graphics.Rectangle(30, 260, 840, 330)); createTblStockForDrug(); btnRemovePackage = new Button(grpPackageInfo, SWT.NONE); btnRemovePackage.setBounds(new org.eclipse.swt.graphics.Rectangle(330, 290, 170, 30)); btnRemovePackage.setEnabled(false); btnRemovePackage.setText("Remove Selected Batch"); btnRemovePackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); btnRemovePackage .addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() { @Override public void widgetSelected( org.eclipse.swt.events.SelectionEvent e) { cmdRemoveSelected(); } }); txtPatientId.setText(""); } /** * This method initializes tblDrugsInPackage * */ private void createTblStockForDrug() { tblDrugsInPackage = new Table(grpPackageInfo, SWT.BORDER | SWT.FULL_SELECTION); tblDrugsInPackage.setHeaderVisible(true); tblDrugsInPackage.setLinesVisible(true); tblDrugsInPackage.setBounds(new org.eclipse.swt.graphics.Rectangle(30, 48, 780, 220)); tblDrugsInPackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); TableColumn tblColDrugName = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColDrugName.setText("Date Received"); tblColDrugName.setWidth(100); TableColumn tblColQuantity = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColQuantity.setText("Qty"); tblColQuantity.setWidth(60); TableColumn tblColBatchNo = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColBatchNo.setText("Batch No"); tblColBatchNo.setWidth(120); TableColumn tblColManufacturer = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColManufacturer.setText("Manufacturer"); tblColManufacturer.setWidth(120); TableColumn tblColExpiryDate = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColExpiryDate.setText("Expiry Date"); tblColExpiryDate.setWidth(100); TableColumn tblColClinic = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColClinic.setText("Pharmacy"); tblColClinic.setWidth(100); } /** * This method initializes tblDrugsInPackage * */ private void createTblDrugsInPrescription() { tblDrugsInPackage = new Table(grpPackageInfo, SWT.BORDER | SWT.FULL_SELECTION); tblDrugsInPackage.setHeaderVisible(true); tblDrugsInPackage.setLinesVisible(true); tblDrugsInPackage.setBounds(new org.eclipse.swt.graphics.Rectangle(30, 118, 780, 160)); tblDrugsInPackage.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); TableColumn tblColDrugName = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColDrugName.setText("Drug Name"); tblColDrugName.setWidth(380); TableColumn tblColQuantity = new TableColumn(tblDrugsInPackage, SWT.NONE); tblColQuantity.setText("Dosage"); tblColQuantity.setWidth(265); } private void clearForm() { txtPatientId.setText(""); btnRemovePackage.setEnabled(false); if (rdBtnPrescription.getSelection() || rdBtnPackage.getSelection()) { txtPackageId.setText(""); txtDatePacked.setText(""); } tblDrugsInPackage.clearAll(); tblDrugsInPackage.removeAll(); txtPatientId.setFocus(); } /** * Method fieldsOk. * * @return boolean */ private boolean fieldsOk() { if (rdBtnPackage.getSelection()) { if (txtPackageId.getText().equals("")) { MessageBox mb = new MessageBox(getShell()); mb.setText("No Package To Remove"); mb .setMessage("There is no package that can be removed. Please " + "enter a patient number (or use the Search button) to load a " + "possible package that can be removed."); mb.open(); return false; } else return true; } else if (rdBtnPrescription.getSelection()) { if (txtPackageId.getText().equals("")) { MessageBox mb = new MessageBox(getShell()); mb.setText("No Prescription To Remove"); mb .setMessage("There is no prescription that can be removed. Please " + "enter a patient number (or use the Search button) to load a " + "possible prescription that can be removed."); mb.open(); return false; } else return true; } else if (rdBtnStock.getSelection()) { if (tblDrugsInPackage.getItemCount() == 0) { MessageBox mb = new MessageBox(getShell()); mb.setText("No Stock Batch To Remove"); mb.setMessage("Please " + "use the Drug Search button to load " + "possible batches that can be removed."); mb.open(); return false; } else if (tblDrugsInPackage.getSelection().length == 0) { MessageBox mb = new MessageBox(getShell()); mb.setText("No Stock Batch Selected"); mb .setMessage("Please select a stock batch to remove by clicking a row in the table"); mb.open(); return false; } else return true; } else if (rdBtnItem.getSelection()) { if (tblDrugsInPackage.getItemCount() == 0) { MessageBox mb = new MessageBox(getShell()); mb.setText("No Drug To Remove"); mb .setMessage("There are no drugs that can be removed. Please " + "enter a patient number (or use the Search button) to load a " + "possible package with drugs that can be removed."); mb.open(); return false; } else if (tblDrugsInPackage.getSelection().length == 0) { MessageBox mb = new MessageBox(getShell()); mb.setText("No Drug To Remove"); mb .setMessage("No drug has been selected from the package. Please " + "select a drug to be removed from the list of drugs in " + "the table. "); mb.open(); return false; } else return true; } else return false; // should never happen } private void switchDeletionType() { if (rdBtnPackage.getSelection()) { prescriptionToRemove = null; stockToRemove = null; createGrpPatientInfo(); createGrpPackageInfo(); } else if (rdBtnPrescription.getSelection()) { packageToRemove = null; stockToRemove = null; createGrpPatientInfo(); createGrpPrescriptionInfo(); } else if (rdBtnStock.getSelection()) { packageToRemove = null; stockToRemove = null; createGrpDrugInfo(); createGrpStockBatchSelection(); } else if (rdBtnItem.getSelection()) { createGrpPatientInfo(); createGrpPackageInfo(); } } /** * Method printSummaryLabel. * * @param thePatient * Patient * @param thePackage * Packages */ private void printSummaryLabel(Patient thePatient, Packages thePackage) { StockCenter stockCenter; if (packageToRemove.getPackagedDrugs().size() > 0) { stockCenter = packageToRemove.getPackagedDrugs().get(0).getStock() .getStockCenter(); } else { getLog().error("There are no drugs in this package"); return; } Prescription prescription = thePackage.getPrescription(); List<Object> printerQueue = new ArrayList<Object>(); String duration = ""; if (prescription.getDuration() == 2) { duration = "2 week"; } else { duration = prescription.getDuration() / 4 + " month"; } // Obtaining next appointment date Appointment app = PatientManager .getLatestActiveAppointmentForPatient(thePatient); // First get list of drugs for label List<String> drugList = new ArrayList<String>(); for (int i = 0; i < tblDrugsInPackage.getItemCount(); i++) { TableItem ti = tblDrugsInPackage.getItem(i); drugList.add(ti.getText(1) + " " + ti.getText(2)); } ScriptSummaryLabel sml = new ScriptSummaryLabel(); sml.setPharmacyName(stockCenter.getStockCenterName()); sml.setDispDate(iDARTUtil.format(packageToRemove.getPackDate())); sml.setFolderNumber(thePatient.getPatientId()); sml.setPatientFirstName(thePatient.getFirstNames()); sml.setPatientLastName(thePatient.getLastname()); sml.setPrescriptionId(packageToRemove.getPackageId()); sml.setDrugs(drugList); sml.setNextAppointmentDate(iDARTUtil.format(app.getAppointmentDate())); if (iDartProperties.labelType.equals(LabelType.EKAPA)) { sml.setIssuesString(String.valueOf((prescription.getPackages() .size() + 1)) + " of a " + duration + " month script"); sml .setBoldIssuesString(((prescription.getPackages().size() + 1) >= Integer .parseInt((duration.split(" "))[0])) ? true : false); } else { sml.setIssuesString(String.valueOf((prescription.getPackages() .size() + 1)) + " of a " + duration + " script"); } printerQueue.add(sml); new PrintThread(printerQueue); } private void deletePackage() { // do we need to delete a pill count too? Packages previousPack = PackageManager.getPreviousPackageCollected( getHSession(), packageToRemove); boolean pillCountDelete = false; if ((previousPack != null) && (previousPack.getPillCounts() != null) && (previousPack.getPillCounts().size() > 0)) { MessageBox deletePillcount = new MessageBox(getShell(), SWT.YES | SWT.NO | SWT.ICON_QUESTION); deletePillcount .setMessage("A Pill Count was recorded when the package was created." + "\n\nWould you like to delete this Pill Count?"); deletePillcount.setText("Delete Pill Count"); switch (deletePillcount.open()) { case SWT.YES: pillCountDelete = true; break; } } Transaction tx = null; try { tx = getHSession().beginTransaction(); DeletionsManager.removePackage(getHSession(), packageToRemove); boolean shouldRemoveARVStartDate = DeletionsManager .isFirstPackageOnNewPatientEpisode(packageToRemove); boolean patientHasArvStartDate = (localPatient .getAttributeByName(PatientAttribute.ARV_START_DATE) == null ? false : true); if (shouldRemoveARVStartDate && patientHasArvStartDate) { MessageBox deleteARVStartDate = new MessageBox(getShell(), SWT.YES | SWT.NO | SWT.ICON_QUESTION); deleteARVStartDate .setMessage("The patient is a new patient and now contains no ARV packages." + "\n\nWould you like to remove the ARV start date for this patient."); deleteARVStartDate.setText("Remove ARV Start Date?"); switch (deleteARVStartDate.open()) { case SWT.YES: Patient p = packageToRemove.getPrescription().getPatient(); p.removePatientAttribute(PatientAttribute.ARV_START_DATE); break; } } if (pillCountDelete) { DeletionsManager.removePillCountInfo(getHSession(), previousPack); } getHSession().flush(); tx.commit(); MessageBox mb = new MessageBox(getShell()); mb.setText("Package Deletion Successful"); mb .setMessage("This package was successfully removed from the database." + (pillCountDelete ? "Pill counts recorded at package creation time were also deleted." : "") + "\n\nTo re-package this set of drugs for this patient, go back to the Patient Packaging page."); mb.open(); } catch (HibernateException he) { if (tx != null) { tx.rollback(); } MessageBox mb = new MessageBox(getShell()); mb.setText("Package Deletion Unsuccessful"); mb .setMessage("There was a problem removing this package from the database."); mb.open(); getLog().error("Package Deletion Unsuccessful", he); } if (getHSession() != null) { getHSession().close(); } setHSession(HibernateUtil.getNewSession()); clearForm(); } private void deleteItem() { Object selectedDrug = null; String type = ""; if (tblDrugsInPackage.getSelection().length > 0) { TableItem ti = tblDrugsInPackage.getSelection()[0]; selectedDrug = ti.getData(); type = ti.getText(0); } if (selectedDrug != null) { Transaction tx = null; try { tx = getHSession().beginTransaction(); if (type.equals("Dispensed")) { DeletionsManager.removePackagedDrug(getHSession(), (PackagedDrugs) selectedDrug, packageToRemove); } else if (type.equals("Accumulated")) { DeletionsManager.removeAccumulatedDrug(getHSession(), (AccumulatedDrugs) selectedDrug); } // remove item from table tblDrugsInPackage.remove(tblDrugsInPackage.getSelectionIndex()); MessageBox summaryLabel = new MessageBox(getShell(), SWT.YES | SWT.NO); summaryLabel.setText("Print Summary Label?"); summaryLabel .setMessage("Would you like to print a new Script Summary Label?."); switch (summaryLabel.open()) { case SWT.YES: printSummaryLabel(localPatient, packageToRemove); break; case SWT.NO: break; } getHSession().flush(); tx.commit(); MessageBox mb = new MessageBox(getShell()); mb.setText("Package Deletion Successful"); mb .setMessage("This drug was successfully removed from the package."); mb.open(); } catch (HibernateException he) { MessageBox mb = new MessageBox(getShell()); mb.setText("Drug Deletion Unsuccessful"); mb .setMessage("There was a problem removing this drug from the package."); mb.open(); if (tx != null) { tx.rollback(); } getLog().error(he); } } else { MessageBox mb = new MessageBox(getShell()); mb.setText("No Drug Selected"); mb .setMessage("Please select an accumulated or dispensed drug from the table."); mb.open(); } } private void deleteScript() { Transaction tx = null; try { tx = getHSession().beginTransaction(); DeletionsManager.removeUndispensedPrescription(getHSession(), prescriptionToRemove); getHSession().flush(); tx.commit(); MessageBox mb = new MessageBox(getShell()); mb.setText("Prescription Deletion Successful"); mb .setMessage("This prescription was successfully removed from the database."); mb.open(); } catch (HibernateException he) { if (tx != null) { tx.rollback(); } MessageBox mb = new MessageBox(getShell()); mb.setText("Prescription Deletion Unsuccessful"); mb .setMessage("There was a problem removing this prescription from the database."); mb.open(); getLog().error(he); } if (getHSession() != null) { getHSession().close(); } setHSession(HibernateUtil.getNewSession()); clearForm(); } private void deleteStock() { Transaction tx = null; try { tx = getHSession().beginTransaction(); DeletionsManager.removeUndispensedStock(getHSession(), (Stock) tblDrugsInPackage.getSelection()[0].getData()); getHSession().flush(); tx.commit(); MessageBox mb = new MessageBox(getShell()); mb.setText("Stock Batch Deletion Successful"); mb .setMessage("This stock batch was successfully removed from the database."); mb.open(); } catch (HibernateException he) { if (tx != null) { tx.rollback(); } MessageBox mb = new MessageBox(getShell()); mb.setText("Stock Batch Deletion Unsuccessful"); mb .setMessage("There was a problem removing this stock batch from the database."); mb.open(); getLog().error(he); } } @Override protected void createCompOptions() { } @Override protected void setLogger() { setLog(Logger.getLogger(this.getClass())); } /** * Method getShell. * * @return Shell */ @Override public Shell getShell() { return super.getShell(); } }