org.celllife.idart.gui.stockOnHand.StockOnHandGui.java Source code

Java tutorial

Introduction

Here is the source code for org.celllife.idart.gui.stockOnHand.StockOnHandGui.java

Source

/*
 * 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
 *
 */

/**
 * created on 08/05/2007
 * @author Rashid
 * gui class for stock take
 *
 * 2 functions
 *    1) print out a form of all the stock in the clinic
 *    2) allows users to capture the stock date information.
 */

package org.celllife.idart.gui.stockOnHand;

import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import model.manager.AdministrationManager;
import model.manager.DrugManager;
import model.manager.StockManager;
import model.nonPersistent.BatchDetail;
import model.nonPersistent.DrugDetail;
import model.nonPersistent.StockLevelInfo;

import org.apache.log4j.Logger;
import org.celllife.idart.commonobjects.CommonObjects;
import org.celllife.idart.database.hibernate.Drug;
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.stockOnHand.treeViewerDetails.StockTreeContentProvider;
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.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

/**
 */
public class StockOnHandGui extends GenericOthersGui {

    private Composite cmpStock;

    private Label lblPharmacy;

    private Label lblSummary;

    private CCombo cmbPharmacy;

    private Button btnClose;

    private Button rdbtnShowBatches;

    private Button rdbtnHideBatches;

    private TreeViewer tblStockTable;

    private StockCenter localStockCenter;

    private final String initialStockCenter;

    private static String[] columnNames = { "Drug", "Date Rec", "Received", "Dispensed(-)", "Destroyed(-)",
            "Adjusted(+-)", "Returned(+)", "On Hand" };

    /**
     * @param parent
     */
    public StockOnHandGui(Shell parent, String StockCenter) {
        super(parent, HibernateUtil.getNewSession());
        initialStockCenter = StockCenter;
        activate();
        // drugList = DrugManager.getDrugsList(getHSession());
    }

    /**
     * This method initialises getShell()
     */
    @Override
    protected void createShell() {
        String shellTxt = "Stock on Hand";
        Rectangle bounds = new Rectangle(50, 50, 900, 700);

        buildShell(shellTxt, bounds);

        createGrpStockDetails();
        populateStockGUI();

    }

    /**
     * This method initialises getCompHeader()
     * 
     */
    @Override
    protected void createCompHeader() {

        // getCompHeader()
        setCompHeader(new Composite(getShell(), SWT.NONE));
        getCompHeader().setBounds(new Rectangle(172, 0, 570, 50));

        // lblIcon
        lblIcon = new Label(getCompHeader(), SWT.NONE);
        lblIcon.setBounds(new org.eclipse.swt.graphics.Rectangle(50, 10, 50, 43));
        lblIcon.setText("");
        lblIcon.setImage(ResourceUtils.getImage(iDartImage.PRESCRIPTIONNEW));

        // lblHeader
        lblHeader = new Label(getCompHeader(), SWT.CENTER | SWT.SHADOW_IN);
        lblHeader.setBackground(ResourceUtils.getColor(iDartColor.WIDGET_NORMAL_SHADOW_BACKGROUND));

        lblHeader.setFont(ResourceUtils.getFont(iDartFont.VERASANS_14));
        lblHeader.setBounds(new Rectangle(110, 20, 410, 30));
        lblHeader.setText("Stock on Hand");

    }

    /**
     * This method initialises createGrpDrugInfo
     * 
     */
    private void createGrpStockDetails() {

        if (cmpStock != null) {
            cmpStock.dispose();
        }
        cmpStock = new Composite(getShell(), SWT.NONE);
        cmpStock.setBounds(new Rectangle(20, 20, 860, 600));
        cmpStock.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));

        lblSummary = new Label(cmpStock, SWT.NONE);
        lblSummary.setBounds(new Rectangle(250, 51, 400, 20));
        lblSummary.setText(
                "This table shows you all stock on hand at " + (new SimpleDateFormat("hh:mma")).format(new Date())
                        + " on " + (new SimpleDateFormat("dd MMM yyyy").format(new Date())));
        lblSummary.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));

        lblPharmacy = new Label(cmpStock, SWT.NONE);
        lblPharmacy.setBounds(new Rectangle(250, 81, 149, 20));
        lblPharmacy.setText("Select a Pharmacy:");
        lblPharmacy.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));

        cmbPharmacy = new CCombo(cmpStock, SWT.BORDER);
        cmbPharmacy.setBounds(new Rectangle(405, 81, 180, 20));
        cmbPharmacy.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        cmbPharmacy.setBackground(ResourceUtils.getColor(iDartColor.WHITE));
        cmbPharmacy.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent se) {
                localStockCenter = AdministrationManager.getStockCenter(getHSession(),
                        cmbPharmacy.getText().trim());
                populateStockGUI();
            }
        });
        cmbPharmacy.setEditable(false);

        rdbtnShowBatches = new Button(cmpStock, SWT.RADIO);
        rdbtnShowBatches.setBounds(new Rectangle(300, 111, 120, 20));
        rdbtnShowBatches.setText("Show Batches");
        rdbtnShowBatches.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        rdbtnShowBatches.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent arg0) {
                tblStockTable.expandAll();
            }
        });
        rdbtnShowBatches.setSelection(true);

        rdbtnHideBatches = new Button(cmpStock, SWT.RADIO);
        rdbtnHideBatches.setBounds(new Rectangle(430, 111, 120, 20));
        rdbtnHideBatches.setText("Hide Batches");
        rdbtnHideBatches.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        rdbtnHideBatches.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent arg0) {
                tblStockTable.collapseAll();
            }
        });

        populatePharmacyCombo();
        localStockCenter = AdministrationManager.getStockCenter(getHSession(), cmbPharmacy.getText().trim());

        tblStockTable = new TreeViewer(cmpStock, SWT.VIRTUAL | SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
        tblStockTable.setContentProvider(new StockTreeContentProvider());
        tblStockTable.getTree().setBounds(15, 150, 830, 420);
        tblStockTable.getTree().setHeaderVisible(true);
        tblStockTable.getTree().setLinesVisible(true);
        tblStockTable.getTree().setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        createColumns(tblStockTable);

    }

    /**
     * This method initialises compButtons
     * 
     */
    @Override
    protected void createCompButtons() {

        btnClose = new Button(getCompButtons(), SWT.NONE);
        btnClose.setText("Close");
        btnClose.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        // btnClose.setBounds(new Rectangle(300, 5, 100, 30));
        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();
            }
        });
    }

    private void populatePharmacyCombo() {

        CommonObjects.populateStockCenters(getHSession(), cmbPharmacy);
        cmbPharmacy.setEnabled(true);
        cmbPharmacy.setText(initialStockCenter);
    }

    private void populateStockGUI() {

        if (localStockCenter == null) {
            getLog().info("Tried to retrieve stock list, but localPharmay is null");
            return;
        }

        final List<DrugDetail> dataList = new ArrayList<DrugDetail>();
        final List<Drug> drugList = DrugManager.getAllDrugs(getHSession());
        final String parmacy = cmbPharmacy.getText();

        try {
            new ProgressMonitorDialog(getShell()).run(true, true, new IRunnableWithProgress() {
                @Override
                public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                    monitor.beginTask("Calculating stock values", drugList.size());
                    for (Drug drug : drugList) {
                        if (monitor.isCanceled()) {
                            throw new OperationCanceledException("Calculation cancelled");
                        }
                        monitor.subTask("Calculating values for " + drug.getName());
                        DrugDetail dd = StockManager.getDrugDetail(getHSession(), drug,
                                AdministrationManager.getStockCenter(getHSession(), parmacy));

                        dataList.add(dd);
                        monitor.worked(1);
                    }
                    monitor.done();
                }
            });
        } catch (InvocationTargetException e) {
            showMessage(MessageDialog.ERROR, Messages.getString("common.error"), //$NON-NLS-1$
                    Messages.getString("stockOnHand.error")); //$NON-NLS-1$
        } catch (InterruptedException e) {
            showMessage(MessageDialog.WARNING, Messages.getString("common.warning"), //$NON-NLS-1$
                    Messages.getString("stockOnHand.warning")); //$NON-NLS-1$
        }

        tblStockTable.setInput(dataList);

        tblStockTable.refresh();
        tblStockTable.expandAll();

    }

    @Override
    protected void createCompOptions() {
    }

    @Override
    protected void setLogger() {
        setLog(Logger.getLogger(this.getClass()));
    }

    private void cmdCloseWidgetSelected() {
        closeShell(true);
    }

    public void createColumns(final TreeViewer viewer) {

        // Column 0: Drug
        TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.NONE);
        column.getColumn().setWidth(300);
        column.getColumn().setText(columnNames[0]);
        column.getColumn().setMoveable(true);
        column.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                if (element instanceof DrugDetail)
                    return ((DrugDetail) element).getDrugDetails();
                else
                    return ((BatchDetail) element).getBatchName();
            }

            @Override
            public Font getFont(Object element) {
                if (element instanceof DrugDetail) {
                    return ResourceUtils.getFont(iDartFont.VERASANS_10_BOLD);
                } else
                    return super.getFont(element);
            }
        });

        // column.setLabelProvider(new StockTreeLabelProvider());

        // Column 1: Date Received
        TreeViewerColumn column1 = new TreeViewerColumn(viewer, SWT.NONE);
        column1.getColumn().setWidth(75);
        column1.getColumn().setText(columnNames[1]);
        column1.getColumn().setMoveable(true);
        column1.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                if (element instanceof DrugDetail)
                    return "";
                else
                    return new SimpleDateFormat("yyyy/MM/dd").format(((BatchDetail) element).getDateReceived());
            }

            @Override
            public Font getFont(Object element) {
                if (element instanceof DrugDetail) {
                    return ResourceUtils.getFont(iDartFont.VERASANS_10_BOLD);
                } else
                    return super.getFont(element);
            }
        });

        // Column 2: Total Received
        TreeViewerColumn column2 = new TreeViewerColumn(viewer, SWT.NONE);
        column2.getColumn().setWidth(65);
        column2.getColumn().setText(columnNames[2]);
        column2.getColumn().setMoveable(true);
        column2.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                if (element instanceof DrugDetail)
                    return String.valueOf(((DrugDetail) element).getUnitsReceived());
                else
                    return String.valueOf(((BatchDetail) element).getUnitsReceived());
            }

            @Override
            public Font getFont(Object element) {
                if (element instanceof DrugDetail) {
                    return ResourceUtils.getFont(iDartFont.VERASANS_10_BOLD);
                } else
                    return super.getFont(element);
            }
        });

        // Column 3: Dispensed
        TreeViewerColumn column3 = new TreeViewerColumn(viewer, SWT.NONE);
        column3.getColumn().setWidth(75);
        column3.getColumn().setText(columnNames[3]);
        column3.getColumn().setMoveable(true);
        column3.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                StockLevelInfo info = null;
                if (element instanceof DrugDetail) {
                    info = ((DrugDetail) element).getStockLevelInfo();
                } else {
                    info = ((BatchDetail) element).getStockLevelInfo();
                }
                return info.getDispensedString();
            }

            @Override
            public Font getFont(Object element) {
                if (element instanceof DrugDetail) {
                    return ResourceUtils.getFont(iDartFont.VERASANS_10_BOLD);
                } else
                    return super.getFont(element);
            }
        });

        // Column 4: Destroyed
        TreeViewerColumn column4 = new TreeViewerColumn(viewer, SWT.NONE);
        column4.getColumn().setWidth(75);
        column4.getColumn().setText(columnNames[4]);
        column4.getColumn().setMoveable(true);
        column4.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                StockLevelInfo info = null;
                if (element instanceof DrugDetail) {
                    info = ((DrugDetail) element).getStockLevelInfo();
                } else {
                    info = ((BatchDetail) element).getStockLevelInfo();
                }
                return info.getDestroyedString();
            }

            @Override
            public Font getFont(Object element) {
                if (element instanceof DrugDetail) {
                    return ResourceUtils.getFont(iDartFont.VERASANS_10_BOLD);
                } else
                    return super.getFont(element);
            }
        });

        // Column 5: Adjusted
        TreeViewerColumn column5 = new TreeViewerColumn(viewer, SWT.NONE);
        column5.getColumn().setWidth(75);
        column5.getColumn().setText(columnNames[5]);
        column5.getColumn().setMoveable(true);
        column5.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                StockLevelInfo info = null;
                if (element instanceof DrugDetail) {
                    info = ((DrugDetail) element).getStockLevelInfo();
                } else {
                    info = ((BatchDetail) element).getStockLevelInfo();
                }
                return info.getAdjustedString();
            }

            @Override
            public Font getFont(Object element) {
                if (element instanceof DrugDetail) {
                    return ResourceUtils.getFont(iDartFont.VERASANS_10_BOLD);
                } else
                    return super.getFont(element);
            }
        });

        // Column 6: Returned
        TreeViewerColumn column6 = new TreeViewerColumn(viewer, SWT.NONE);
        column6.getColumn().setWidth(75);
        column6.getColumn().setText(columnNames[6]);
        column6.getColumn().setMoveable(true);
        column6.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                StockLevelInfo info = null;
                if (element instanceof DrugDetail) {
                    info = ((DrugDetail) element).getStockLevelInfo();
                } else {
                    info = ((BatchDetail) element).getStockLevelInfo();
                }
                return info.getReturnedString();
            }

            @Override
            public Font getFont(Object element) {
                if (element instanceof DrugDetail) {
                    return ResourceUtils.getFont(iDartFont.VERASANS_10_BOLD);
                } else
                    return super.getFont(element);
            }
        });

        // Column 7: On hand
        TreeViewerColumn column7 = new TreeViewerColumn(viewer, SWT.NONE);
        column7.getColumn().setWidth(65);
        column7.getColumn().setText(columnNames[7]);
        column7.getColumn().setMoveable(true);
        column7.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                StockLevelInfo info = null;
                if (element instanceof DrugDetail) {
                    info = ((DrugDetail) element).getStockLevelInfo();
                } else {
                    info = ((BatchDetail) element).getStockLevelInfo();
                }
                return info.getOnhandString();
            }

            @Override
            public Font getFont(Object element) {
                if (element instanceof DrugDetail) {
                    return ResourceUtils.getFont(iDartFont.VERASANS_10_BOLD);
                } else
                    return super.getFont(element);
            }
        });
    }
}