Java tutorial
/******************************************************************************* * 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.views.rechnung; import java.util.ArrayList; 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.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import ch.elexis.ElexisException; import ch.elexis.Hub; import ch.elexis.actions.ElexisEventDispatcher; import ch.elexis.actions.RestrictedAction; import ch.elexis.admin.AccessControlDefaults; import ch.elexis.commands.Handler; import ch.elexis.commands.MahnlaufCommand; import ch.elexis.core.icons.Images; import ch.elexis.data.AccountTransaction; import ch.elexis.data.Brief; import ch.elexis.data.Fall; import ch.elexis.data.Patient; import ch.elexis.data.Rechnung; import ch.elexis.data.RnStatus; import ch.elexis.text.ITextPlugin.ICallback; import ch.elexis.text.TextContainer; import ch.elexis.util.SWTHelper; import ch.elexis.views.FallDetailView; import ch.elexis.views.PatientDetailView2; import ch.rgw.tools.ExHandler; import ch.rgw.tools.Money; import ch.rgw.tools.TimeTool; import ch.rgw.tools.Tree; /** * Collection of bill-related actions * * @author gerry * */ public class RnActions { Action rnExportAction, editCaseAction, delRnAction, reactivateRnAction, patDetailAction; Action expandAllAction, collapseAllAction, reloadAction, mahnWizardAction; Action addPaymentAction, addExpenseAction, changeStatusAction, stornoAction; Action increaseLevelAction, printListeAction, rnFilterAction; Action addAccountExcessAction; RnActions(final RechnungsListeView view) { printListeAction = new Action(Messages.getString("RnActions.printListAction")) { //$NON-NLS-1$ { setImageDescriptor(Images.IMG_PRINTER.getImageDescriptor()); setToolTipText(Messages.getString("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.getString("RnActions.remindersAction")) { //$NON-NLS-1$ { setToolTipText(Messages.getString("RnActions.remindersTooltip")); //$NON-NLS-1$ setImageDescriptor(Images.IMG_WIZARD.getImageDescriptor()); } @Override public void run() { if (!MessageDialog.openConfirm(view.getViewSite().getShell(), Messages.getString("RnActions.reminderConfirmCaption"), //$NON-NLS-1$ Messages.getString("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 - 3]); view.cfp.fireChangedEvent(); } }; rnExportAction = new Action(Messages.getString("RechnungsListeView.printAction")) { //$NON-NLS-1$ { setToolTipText(Messages.getString("RechnungsListeView.printToolTip")); //$NON-NLS-1$ setImageDescriptor(Images.IMG_GOFURTHER.getImageDescriptor()); /* * GlobalEvents.getInstance().addSelectionListener(new * GlobalEvents.SelectionListener() { * * public void selectionEvent(PersistentObject obj){ if(obj instanceof Rechnung) * * } * * public void clearEvent(Class<? extends PersistentObject> template){ // TODO * Auto-generated method stub * * } }) */ } @Override public void run() { List<Rechnung> list = view.createList(); new RnOutputDialog(view.getViewSite().getShell(), list).open(); } }; patDetailAction = new Action(Messages.getString("RnActions.patientDetailsAction")) { //$NON-NLS-1$ @Override public void run() { IWorkbenchPage rnPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { /* PatientDetailView fdv=(PatientDetailView) */rnPage.showView(PatientDetailView2.ID); } catch (Exception ex) { ExHandler.handle(ex); } } }; editCaseAction = new Action(Messages.getString("RnActions.edirCaseAction")) { //$NON-NLS-1$ @Override public void run() { IWorkbenchPage rnPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { /* FallDetailView fdv=(FallDetailView) */rnPage.showView(FallDetailView.ID); } catch (Exception ex) { ExHandler.handle(ex); } } }; delRnAction = new Action(Messages.getString("RnActions.deleteBillAction")) { //$NON-NLS-1$ @Override public void run() { List<Rechnung> list = view.createList(); for (Rechnung rn : list) { rn.storno(true); } } }; reactivateRnAction = new Action(Messages.getString("RnActions.reactivateBillAction")) { //$NON-NLS-1$ @Override public void run() { List<Rechnung> list = view.createList(); for (Rechnung rn : list) { rn.setStatus(RnStatus.OFFEN); } } }; expandAllAction = new Action(Messages.getString("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.getString("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.getString("RnActions.reloadAction")) { //$NON-NLS-1$ { setToolTipText(Messages.getString("RnActions.reloadTooltip")); //$NON-NLS-1$ setImageDescriptor(Images.IMG_REFRESH.getImageDescriptor()); } @Override public void run() { view.cfp.fireChangedEvent(); } }; addPaymentAction = new Action(Messages.getString("RnActions.addBookingAction")) { //$NON-NLS-1$ { setToolTipText(Messages.getString("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.getString("RnActions.addFineAction")) { //$NON-NLS-1$ { setImageDescriptor(Images.IMG_REMOVEITEM.getImageDescriptor()); } @Override public void run() { List<Rechnung> list = view.createList(); if (list.size() > 0) { Rechnung actRn = list.get(0); try { if (new RnDialogs.GebuehrHinzuDialog(view.getViewSite().getShell(), actRn) .open() == Dialog.OK) { ElexisEventDispatcher.update(actRn); } } catch (ElexisException e) { SWTHelper.showError("Zahlung hinzufgen ist nicht mglich", e.getLocalizedMessage()); } } } }; changeStatusAction = new RestrictedAction(AccessControlDefaults.ADMIN_CHANGE_BILLSTATUS_MANUALLY, Messages.getString("RnActions.changeStateAction")) { //$NON-NLS-1$ { setToolTipText(Messages.getString("RnActions.changeStateTooltip")); //$NON-NLS-1$ setImageDescriptor(Images.IMG_EDIT.getImageDescriptor()); } @Override public void doRun() { List<Rechnung> list = view.createList(); if (list.size() > 0) { Rechnung actRn = list.get(0); if (new RnDialogs.StatusAendernDialog(view.getViewSite().getShell(), actRn) .open() == Dialog.OK) { ElexisEventDispatcher.update(actRn); } } } }; stornoAction = new Action(Messages.getString("RnActions.stornoAction")) { //$NON-NLS-1$ { setImageDescriptor(Images.IMG_DELETE.getImageDescriptor()); setToolTipText(Messages.getString("RnActions.stornoActionTooltip")); //$NON-NLS-1$ } @Override public void run() { List<Rechnung> list = view.createList(); if (list.size() > 0) { Rechnung actRn = list.get(0); if (new RnDialogs.StornoDialog(view.getViewSite().getShell(), actRn).open() == Dialog.OK) { ElexisEventDispatcher.update(actRn); } } } }; increaseLevelAction = new Action(Messages.getString("RnActions.increaseReminderLevelAction")) { //$NON-NLS-1$ { setToolTipText(Messages.getString("RnActions.increadeReminderLevelTooltip")); //$NON-NLS-1$ } @Override public void run() { List<Rechnung> list = view.createList(); if (list.size() > 0) { Rechnung actRn = list.get(0); 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.getString("RnActions.changeStateErrorCaption"), //$NON-NLS-1$ Messages.getString("RnActions.changeStateErrorMessage")); //$NON-NLS-1$ } } } }; addAccountExcessAction = new Action(Messages.getString("RnActions.addAccountGood")) { //$NON-NLS-1$ { setToolTipText(Messages.getString("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.getString("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.getString("RnActions.filterListAction"), Action.AS_CHECK_BOX) { //$NON-NLS-1$ { setImageDescriptor(Images.IMG_FILTER.getImageDescriptor()); setToolTipText(Messages.getString("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(); } } }; } static class RnListeDruckDialog extends TitleAreaDialog implements ICallback { ArrayList<Rechnung> rnn; private TextContainer text; public RnListeDruckDialog(final Shell shell, final Object[] tree) { super(shell); rnn = new ArrayList<Rechnung>(tree.length); for (Object o : tree) { if (o instanceof Tree) { Tree tr = (Tree) o; if (tr.contents instanceof Rechnung) { tr = tr.getParent(); } if (tr.contents instanceof Fall) { tr = tr.getParent(); } if (tr.contents instanceof Patient) { for (Tree tFall : (Tree[]) tr.getChildren().toArray(new Tree[0])) { Fall fall = (Fall) tFall.contents; for (Tree tRn : (Tree[]) tFall.getChildren().toArray(new Tree[0])) { Rechnung rn = (Rechnung) tRn.contents; rnn.add(rn); } } } } } } @SuppressWarnings("unchecked") @Override protected Control createDialogArea(final Composite parent) { Composite ret = new Composite(parent, SWT.NONE); text = new TextContainer(getShell()); ret.setLayout(new FillLayout()); ret.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); text.getPlugin().createContainer(ret, this); text.getPlugin().showMenu(false); text.getPlugin().showToolbar(false); text.createFromTemplateName(null, "Liste", Brief.UNKNOWN, Hub.actUser, //$NON-NLS-1$ Messages.getString("RnActions.bills")); //$NON-NLS-1$ text.getPlugin().insertText("[Titel]", //$NON-NLS-1$ Messages.getString("RnActions.billsListPrintetAt") + new TimeTool().toString(TimeTool.DATE_GER) //$NON-NLS-1$ + "\n", //$NON-NLS-1$ SWT.CENTER); String[][] table = new String[rnn.size() + 1][]; Money sum = new Money(); int i; for (i = 0; i < rnn.size(); i++) { Rechnung rn = rnn.get(i); table[i] = new String[3]; StringBuilder sb = new StringBuilder(); Fall fall = rn.getFall(); Patient p = fall.getPatient(); table[i][0] = rn.getNr(); sb.append(p.getLabel()).append(" - ").append(fall.getLabel()); //$NON-NLS-1$ table[i][1] = sb.toString(); Money betrag = rn.getBetrag(); sum.addMoney(betrag); table[i][2] = betrag.getAmountAsString(); } table[i] = new String[3]; table[i][0] = ""; //$NON-NLS-1$ table[i][1] = Messages.getString("RnActions.sum"); //$NON-NLS-1$ table[i][2] = sum.getAmountAsString(); text.getPlugin().setFont("Helvetica", SWT.NORMAL, 9); //$NON-NLS-1$ text.getPlugin().insertTable("[Liste]", 0, table, new int[] { //$NON-NLS-1$ 10, 80, 10 }); text.getPlugin().showMenu(true); text.getPlugin().showToolbar(true); return ret; } @Override public void create() { super.create(); getShell().setText(Messages.getString("RnActions.billsList")); //$NON-NLS-1$ setTitle(Messages.getString("RnActions.printListCaption")); //$NON-NLS-1$ setMessage(Messages.getString("RnActions.printListMessage")); //$NON-NLS-1$ getShell().setSize(900, 700); SWTHelper.center(Hub.plugin.getWorkbench().getActiveWorkbenchWindow().getShell(), getShell()); } @Override protected void okPressed() { super.okPressed(); } public void save() { // TODO Auto-generated method stub } public boolean saveAs() { // TODO Auto-generated method stub return false; } } }