ch.elexis.core.ui.views.rechnung.RnActions.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.core.ui.views.rechnung.RnActions.java

Source

/*******************************************************************************
 * Copyright (c) 2007-2010, G. Weirich and Elexis
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    G. Weirich - initial implementation
 * 
 *******************************************************************************/

package ch.elexis.core.ui.views.rechnung;

import java.util.List;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;

import ch.elexis.admin.AccessControlDefaults;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.exceptions.ElexisException;
import ch.elexis.core.ui.commands.Handler;
import ch.elexis.core.ui.commands.MahnlaufCommand;
import ch.elexis.core.ui.constants.UiResourceConstants;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.core.ui.locks.AllOrNoneLockRequestingAction;
import ch.elexis.core.ui.locks.AllOrNoneLockRequestingRestrictedAction;
import ch.elexis.core.ui.locks.LockRequestingAction;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.core.ui.views.FallDetailView;
import ch.elexis.core.ui.views.rechnung.invoice.InvoiceActions;
import ch.elexis.data.AccountTransaction;
import ch.elexis.data.Fall;
import ch.elexis.data.Patient;
import ch.elexis.data.Rechnung;
import ch.elexis.data.RnStatus;
import ch.rgw.tools.ExHandler;
import ch.rgw.tools.Money;

/**
 * Collection of bill-related actions
 * 
 * @author gerry
 * 
 */
public class RnActions {
    /**
     * @deprecated please replace with {@link InvoiceActions}
     */
    Action rnExportAction, increaseLevelAction, addPaymentAction, addExpenseAction, changeStatusAction,
            stornoAction, addAccountExcessAction;
    Action editCaseAction, delRnAction, reactivateRnAction, patDetailAction;
    Action expandAllAction, collapseAllAction, reloadAction, mahnWizardAction;
    Action printListeAction, rnFilterAction;

    RnActions(final RechnungsListeView view) {

        printListeAction = new Action(Messages.RnActions_printListAction) { //$NON-NLS-1$
            {
                setImageDescriptor(Images.IMG_PRINTER.getImageDescriptor());
                setToolTipText(Messages.RnActions_printListTooltip); //$NON-NLS-1$
            }

            @Override
            public void run() {
                Object[] sel = view.cv.getSelection();
                new RnListeDruckDialog(view.getViewSite().getShell(), sel).open();
            }
        };
        mahnWizardAction = new Action(Messages.RnActions_remindersAction) { //$NON-NLS-1$
            {
                setToolTipText(Messages.RnActions_remindersTooltip); //$NON-NLS-1$
                setImageDescriptor(Images.IMG_WIZARD.getImageDescriptor());
            }

            @Override
            public void run() {
                if (!MessageDialog.openConfirm(view.getViewSite().getShell(),
                        Messages.RnActions_reminderConfirmCaption, //$NON-NLS-1$
                        Messages.RnActions_reminderConfirmMessage)) { //$NON-NLS-1$
                    return;
                }
                Handler.execute(view.getViewSite(), MahnlaufCommand.ID, null);
                view.cfp.clearValues();
                view.cfp.cbStat.setText(RnControlFieldProvider.stats[RnControlFieldProvider.stats.length - 5]);
                view.cfp.fireChangedEvent();
            }
        };
        rnExportAction = new Action(Messages.RechnungsListeView_printAction) { //$NON-NLS-1$
            {
                setToolTipText(Messages.RechnungsListeView_printToolTip); //$NON-NLS-1$
                setImageDescriptor(Images.IMG_GOFURTHER.getImageDescriptor());
            }

            @Override
            public void run() {
                List<Rechnung> list = view.createList();
                new RnOutputDialog(view.getViewSite().getShell(), list).open();
            }
        };

        patDetailAction = new Action(Messages.RnActions_patientDetailsAction) { //$NON-NLS-1$
            @Override
            public void run() {
                IWorkbenchPage rnPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
                try {
                    /* PatientDetailView fdv=(PatientDetailView) */rnPage
                            .showView(UiResourceConstants.PatientDetailView2_ID);
                } catch (Exception ex) {
                    ExHandler.handle(ex);
                }
            }

        };
        editCaseAction = new Action(Messages.RnActions_edirCaseAction) { //$NON-NLS-1$

            @Override
            public void run() {
                IWorkbenchPage rnPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
                try {
                    rnPage.showView(FallDetailView.ID);
                } catch (Exception ex) {
                    ExHandler.handle(ex);
                }
            }

        };
        delRnAction = new AllOrNoneLockRequestingAction<Rechnung>(Messages.RnActions_deleteBillAction) {

            @Override
            public List<Rechnung> getTargetedObjects() {
                return view.createList();
            }

            @Override
            public void doRun(List<Rechnung> lockedElements) {
                for (Rechnung rn : lockedElements) {
                    rn.storno(true);
                }
            }
        };
        reactivateRnAction = new AllOrNoneLockRequestingAction<Rechnung>(Messages.RnActions_reactivateBillAction) {

            @Override
            public List<Rechnung> getTargetedObjects() {
                return view.createList();
            }

            @Override
            public void doRun(List<Rechnung> lockedElements) {
                for (Rechnung rn : lockedElements) {
                    rn.setStatus(RnStatus.OFFEN);
                }
            }
        };
        expandAllAction = new Action(Messages.RnActions_expandAllAction) { //$NON-NLS-1$
            @Override
            public void run() {
                view.cv.getViewerWidget().getControl().setRedraw(false);
                ((TreeViewer) view.cv.getViewerWidget()).expandAll();
                view.cv.getViewerWidget().getControl().setRedraw(true);
            }
        };
        collapseAllAction = new Action(Messages.RnActions_collapseAllAction) { //$NON-NLS-1$
            @Override
            public void run() {
                view.cv.getViewerWidget().getControl().setRedraw(false);
                ((TreeViewer) view.cv.getViewerWidget()).collapseAll();
                view.cv.getViewerWidget().getControl().setRedraw(true);
            }
        };
        reloadAction = new Action(Messages.RnActions_reloadAction) { //$NON-NLS-1$
            {
                setToolTipText(Messages.RnActions_reloadTooltip); //$NON-NLS-1$
                setImageDescriptor(Images.IMG_REFRESH.getImageDescriptor());
            }

            @Override
            public void run() {
                view.cfp.fireChangedEvent();
            }
        };

        addPaymentAction = new Action(Messages.RnActions_addBookingAction) { //$NON-NLS-1$
            {
                setToolTipText(Messages.RnActions_addBookingTooltip); //$NON-NLS-1$
                setImageDescriptor(Images.IMG_ADDITEM.getImageDescriptor());
            }

            @Override
            public void run() {
                List<Rechnung> list = view.createList();
                if (list.size() > 0) {
                    Rechnung actRn = list.get(0);
                    try {
                        if (new RnDialogs.BuchungHinzuDialog(view.getViewSite().getShell(), actRn)
                                .open() == Dialog.OK) {
                            ElexisEventDispatcher.update(actRn);
                        }
                    } catch (ElexisException e) {
                        SWTHelper.showError("Zahlung hinzufgen ist nicht mglich", e.getLocalizedMessage());
                    }
                }
            }
        };

        addExpenseAction = new Action(Messages.RnActions_addFineAction) { //$NON-NLS-1$
            {
                setImageDescriptor(Images.IMG_REMOVEITEM.getImageDescriptor());
            }

            @Override
            public void run() {
                List<Rechnung> list = view.createList();
                if (!list.isEmpty()) {
                    try {
                        if (list.size() == 1) {
                            Rechnung actRn = list.get(0);
                            if (new RnDialogs.GebuehrHinzuDialog(view.getViewSite().getShell(), actRn)
                                    .open() == Dialog.OK) {
                                ElexisEventDispatcher.update(actRn);
                            }
                        } else {
                            if (new RnDialogs.MultiGebuehrHinzuDialog(view.getViewSite().getShell(), list)
                                    .open() == Dialog.OK) {
                                for (Rechnung rn : list) {
                                    ElexisEventDispatcher.update(rn);
                                }
                            }
                        }
                    } catch (ElexisException e) {
                        SWTHelper.showError("Zahlung hinzufgen ist nicht mglich", e.getLocalizedMessage());
                    }
                }
            }
        };

        changeStatusAction = new AllOrNoneLockRequestingRestrictedAction<Rechnung>(
                AccessControlDefaults.ADMIN_CHANGE_BILLSTATUS_MANUALLY, Messages.RnActions_changeStateAction) { //$NON-NLS-1$
            {
                setToolTipText(Messages.RnActions_changeStateTooltip); //$NON-NLS-1$
                setImageDescriptor(Images.IMG_EDIT.getImageDescriptor());
            }

            @Override
            public List<Rechnung> getTargetedObjects() {
                return view.createList();
            }

            @Override
            public void doRun(List<Rechnung> list) {
                if (list.size() == 1) {
                    Rechnung actRn = list.get(0);
                    if (new RnDialogs.StatusAendernDialog(view.getViewSite().getShell(), actRn)
                            .open() == Dialog.OK) {
                        ElexisEventDispatcher.update(actRn);
                    }
                } else {
                    if (new RnDialogs.MultiStatusAendernDialog(view.getViewSite().getShell(), list)
                            .open() == Dialog.OK) {
                        for (Rechnung rn : list) {
                            ElexisEventDispatcher.update(rn);
                        }
                    }
                }
            }
        };
        stornoAction = new LockRequestingAction<Rechnung>(Messages.RnActions_stornoAction) {
            {
                setImageDescriptor(Images.IMG_DELETE.getImageDescriptor());
                setToolTipText(Messages.RnActions_stornoActionTooltip);
            }

            @Override
            public Rechnung getTargetedObject() {
                List<Rechnung> list = view.createList();
                if (!list.isEmpty()) {
                    return list.get(0);
                }
                return null;
            }

            @Override
            public void doRun(Rechnung actRn) {
                if (new RnDialogs.StornoDialog(view.getViewSite().getShell(), actRn).open() == Dialog.OK) {
                    ElexisEventDispatcher.update(actRn);
                }
            }
        };
        increaseLevelAction = new Action(Messages.RnActions_increaseReminderLevelAction) { //$NON-NLS-1$
            {
                setToolTipText(Messages.RnActions_increadeReminderLevelTooltip); //$NON-NLS-1$
            }

            @Override
            public void run() {
                List<Rechnung> list = view.createList();
                if (list.size() > 0) {
                    for (Rechnung actRn : list) {
                        switch (actRn.getStatus()) {
                        case RnStatus.OFFEN_UND_GEDRUCKT:
                            actRn.setStatus(RnStatus.MAHNUNG_1);
                            break;
                        case RnStatus.MAHNUNG_1_GEDRUCKT:
                            actRn.setStatus(RnStatus.MAHNUNG_2);
                            break;
                        case RnStatus.MAHNUNG_2_GEDRUCKT:
                            actRn.setStatus(RnStatus.MAHNUNG_3);
                            break;
                        default:
                            SWTHelper.showInfo(Messages.RnActions_changeStateErrorCaption, //$NON-NLS-1$
                                    Messages.RnActions_changeStateErrorMessage); //$NON-NLS-1$
                        }
                    }
                }

            }
        };
        addAccountExcessAction = new Action(Messages.RnActions_addAccountGood) { //$NON-NLS-1$
            {
                setToolTipText(Messages.RnActions_addAccountGoodTooltip); //$NON-NLS-1$
            }

            @Override
            public void run() {
                List<Rechnung> list = view.createList();
                if (list.size() > 0) {
                    Rechnung actRn = list.get(0);

                    // Allfaelliges Guthaben des Patienten der Rechnung als
                    // Anzahlung hinzufuegen
                    Fall fall = actRn.getFall();
                    Patient patient = fall.getPatient();
                    Money prepayment = patient.getAccountExcess();
                    if (prepayment.getCents() > 0) {
                        // make sure prepayment is not bigger than amount of
                        // bill
                        Money amount;
                        if (prepayment.getCents() > actRn.getBetrag().getCents()) {
                            amount = new Money(actRn.getBetrag());
                        } else {
                            amount = new Money(prepayment);
                        }

                        if (SWTHelper.askYesNo(Messages.RnActions_transferMoneyCaption, //$NON-NLS-1$
                                "Das Konto von Patient \"" + patient.getLabel()
                                        + "\" weist ein positives Kontoguthaben auf. Wollen Sie den Betrag von "
                                        + amount.toString() + " dieser Rechnung \"" + actRn.getNr() + ": "
                                        + fall.getLabel() + "\" zuweisen?")) {

                            // remove amount from account and transfer it to the
                            // bill
                            Money accountAmount = new Money(amount);
                            accountAmount.negate();
                            new AccountTransaction(patient, null, accountAmount, null,
                                    "Anzahlung von Kontoguthaben auf Rechnung " + actRn.getNr());
                            actRn.addZahlung(amount, "Anzahlung von Kontoguthaben", null);
                        }
                    }
                }
            }
        };
        rnFilterAction = new Action(Messages.RnActions_filterListAction, Action.AS_CHECK_BOX) { //$NON-NLS-1$
            {
                setImageDescriptor(Images.IMG_FILTER.getImageDescriptor());
                setToolTipText(Messages.RnActions_filterLIstTooltip); //$NON-NLS-1$
            }

            @Override
            public void run() {
                if (isChecked()) {
                    RnFilterDialog rfd = new RnFilterDialog(view.getViewSite().getShell());
                    if (rfd.open() == Dialog.OK) {
                        view.cntp.setConstraints(rfd.ret);
                        view.cfp.fireChangedEvent();
                    }
                } else {
                    view.cntp.setConstraints(null);
                    view.cfp.fireChangedEvent();
                }

            }
        };
    }

}