/******************************************************************************* * Copyright (c) 2006-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; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSourceAdapter; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; import ch.elexis.core.data.events.ElexisEvent; import ch.elexis.core.data.events.ElexisEventDispatcher; import ch.elexis.core.data.events.ElexisEventListener; import ch.elexis.core.ui.actions.GlobalEventDispatcher; import ch.elexis.core.ui.actions.IActivationListener; import ch.elexis.core.ui.dialogs.EditAUFDialog; import ch.elexis.core.ui.events.ElexisUiEventListenerImpl; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.core.ui.util.ViewMenus; import ch.elexis.core.ui.util.viewers.DefaultLabelProvider; import ch.elexis.data.AUF; import ch.elexis.data.Fall; import ch.elexis.data.Konsultation; import ch.elexis.data.Patient; import ch.elexis.data.Query; import ch.rgw.tools.ExHandler; /** * Arbeitsunfähigkeitszeugnisse erstellen und verwalten. * * @author gerry * */ public class AUF2 extends ViewPart implements IActivationListener { public static final String ID = "ch.elexis.auf"; //$NON-NLS-1$ TableViewer tv; private Action newAUF, delAUF, modAUF, printAUF; private ElexisEventListener eli_auf = new ElexisUiEventListenerImpl(AUF.class) { public void runInUi(ElexisEvent ev){ boolean bSelect = (ev.getType() == ElexisEvent.EVENT_SELECTED); modAUF.setEnabled(bSelect); delAUF.setEnabled(bSelect); } }; private ElexisEventListener eli_pat = new ElexisUiEventListenerImpl(Patient.class) { public void runInUi(ElexisEvent ev){ if (ev.getType() == ElexisEvent.EVENT_SELECTED) { tv.refresh(); ElexisEventDispatcher.clearSelection(AUF.class); newAUF.setEnabled(true); } else { newAUF.setEnabled(false); modAUF.setEnabled(false); delAUF.setEnabled(false); } } }; public AUF2(){ setTitleImage(Images.IMG_VIEW_WORK_INCAPABLE.getImage()); } @Override public void createPartControl(Composite parent){ // setTitleImage(Desk.getImage(ICON)); setPartName(Messages.AUF2_certificate); //$NON-NLS-1$ tv = new TableViewer(parent); tv.setLabelProvider(new DefaultLabelProvider()); tv.setContentProvider(new AUFContentProvider()); makeActions(); ViewMenus menus = new ViewMenus(getViewSite()); menus.createMenu(newAUF, delAUF, modAUF, printAUF); menus.createToolbar(newAUF, delAUF, printAUF); tv.setUseHashlookup(true); GlobalEventDispatcher.addActivationListener(this, this); tv.addSelectionChangedListener(GlobalEventDispatcher.getInstance().getDefaultListener()); tv.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event){ modAUF.run(); } }); tv.setInput(getViewSite()); final Transfer[] dragTransferTypes = new Transfer[] { TextTransfer.getInstance() }; tv.addDragSupport(DND.DROP_COPY, dragTransferTypes, new DragSourceAdapter() { @Override public void dragSetData(DragSourceEvent event){ IStructuredSelection selection = (IStructuredSelection) tv.getSelection(); StringBuilder sb = new StringBuilder(); if (selection != null && !selection.isEmpty()) { AUF auf = (AUF) selection.getFirstElement(); sb.append(auf.storeToString()).append(","); //$NON-NLS-1$ } event.data = sb.toString().replace(",$", ""); //$NON-NLS-1$ //$NON-NLS-2$ } }); } @Override public void dispose(){ GlobalEventDispatcher.removeActivationListener(this, this); } @Override public void setFocus(){ // TODO Auto-generated method stub } private void makeActions(){ newAUF = new Action(Messages.AUF2_new) { //$NON-NLS-1$ { setImageDescriptor(Images.IMG_NEW.getImageDescriptor()); setToolTipText(Messages.AUF2_createNewCert); //$NON-NLS-1$ } @Override public void run(){ Patient pat = (Patient) ElexisEventDispatcher.getSelected(Patient.class); if (pat == null) { SWTHelper.showError(Messages.AUF2_NoPatientSelected, //$NON-NLS-1$ Messages.AUF2_PleaseDoSelectPatient); //$NON-NLS-1$ return; } Konsultation kons = (Konsultation) ElexisEventDispatcher.getSelected(Konsultation.class); Fall fall = null; if (kons != null) { fall = kons.getFall(); if (fall == null) { SWTHelper.showError(Messages.AUF2_noCaseSelected, Messages.AUF2_selectCase); //$NON-NLS-1$ //$NON-NLS-2$ return; } if (!fall.getPatient().equals(pat)) { kons = null; } } if (kons == null) { kons = pat.getLetzteKons(false); if (kons == null) { SWTHelper.showError(Messages.AUF2_noCaseSelected, Messages.AUF2_selectCase); //$NON-NLS-1$ //$NON-NLS-2$ return; } fall = kons.getFall(); } new EditAUFDialog(getViewSite().getShell(), null, fall).open(); tv.refresh(false); } }; delAUF = new Action(Messages.AUF2_delete) { //$NON-NLS-1$ { setImageDescriptor(Images.IMG_DELETE.getImageDescriptor()); setToolTipText(Messages.AUF2_deleteCertificate); //$NON-NLS-1$ } @Override public void run(){ AUF sel = getSelectedAUF(); if (sel != null) { if (MessageDialog.openConfirm(getViewSite().getShell(), Messages.AUF2_deleteReally, Messages.AUF2_doyoywantdeletereally)) { //$NON-NLS-1$ //$NON-NLS-2$ sel.delete(); tv.refresh(false); } } } }; modAUF = new Action(Messages.AUF2_edit) { //$NON-NLS-1$ { setImageDescriptor(Images.IMG_EDIT.getImageDescriptor()); setToolTipText(Messages.AUF2_editCertificate); //$NON-NLS-1$ } @Override public void run(){ AUF sel = getSelectedAUF(); if (sel != null) { new EditAUFDialog(getViewSite().getShell(), sel, sel.getFall()).open(); tv.refresh(true); } } }; printAUF = new Action(Messages.AUF2_print) { //$NON-NLS-1$ { setImageDescriptor(Images.IMG_PRINTER.getImageDescriptor()); setToolTipText(Messages.AUF2_createPrint); //$NON-NLS-1$ } @Override public void run(){ try { AUFZeugnis az = (AUFZeugnis) getViewSite().getPage().showView(AUFZeugnis.ID); AUF actAUF = (ch.elexis.data.AUF) ElexisEventDispatcher.getSelected(AUF.class); az.createAUZ(actAUF); } catch (Exception ex) { ExHandler.handle(ex); } } }; } private ch.elexis.data.AUF getSelectedAUF(){ IStructuredSelection sel = (IStructuredSelection) tv.getSelection(); if ((sel == null) || (sel.isEmpty())) { return null; } return (AUF) sel.getFirstElement(); } class AUFContentProvider implements IStructuredContentProvider { public Object[] getElements(Object inputElement){ Patient pat = (Patient) ElexisEventDispatcher.getSelected(Patient.class); if (pat == null) { return new Object[0]; } Query<AUF> qbe = new Query<AUF>(AUF.class); qbe.add(AUF.FLD_PATIENT_ID, Query.EQUALS, pat.getId()); qbe.orderBy(true, AUF.FLD_DATE_FROM, AUF.FLD_DATE_UNTIL); List<AUF> list = qbe.execute(); return list.toArray(); } public void dispose(){ /* leer */ } public void inputChanged(Viewer viewer, Object oldInput, Object newInput){ /* leer */ } } public void activation(boolean mode){ /* egal */ } public void visible(boolean mode){ if (mode) { ElexisEventDispatcher.getInstance().addListeners(eli_auf, eli_pat); eli_pat .catchElexisEvent(new ElexisEvent(ElexisEventDispatcher.getSelected(Patient.class), null, ElexisEvent.EVENT_SELECTED)); } else { ElexisEventDispatcher.getInstance().removeListeners(eli_auf, eli_pat); } } }