/******************************************************************************* * 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 static ch.elexis.core.ui.text.TextTemplateRequirement.TT_INTAKE_LIST; import static ch.elexis.core.ui.text.TextTemplateRequirement.TT_PRESCRIPTION; import java.util.Arrays; import java.util.List; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.data.events.ElexisEventDispatcher; import ch.elexis.core.data.interfaces.IOutputter; import ch.elexis.core.lock.types.LockResponse; import ch.elexis.core.ui.actions.GlobalEventDispatcher; import ch.elexis.core.ui.actions.IActivationListener; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.locks.LockResponseHelper; import ch.elexis.core.ui.text.ITextPlugin.ICallback; import ch.elexis.core.ui.text.ITextPlugin.Parameter; import ch.elexis.core.ui.text.TextContainer; import ch.elexis.data.Brief; import ch.elexis.data.Konsultation; import ch.elexis.data.OutputLog; import ch.elexis.data.Patient; import ch.elexis.data.Prescription; import ch.elexis.data.Rezept; import ch.rgw.tools.StringTool; import ch.rgw.tools.TimeTool; public class RezeptBlatt extends ViewPart implements ICallback, IActivationListener, IOutputter { public final static String ID = "ch.elexis.RezeptBlatt"; //$NON-NLS-1$ TextContainer text; Brief actBrief; public RezeptBlatt(){ } @Override public void dispose(){ if (actBrief != null) { CoreHub.getLocalLockService().releaseLock(actBrief); } GlobalEventDispatcher.removeActivationListener(this, this); super.dispose(); } private void updateTextLock(){ // test lock and set read only before opening the Brief LockResponse result = CoreHub.getLocalLockService().acquireLock(actBrief); if (result.isOk()) { text.getPlugin().setParameter(null); } else { LockResponseHelper.showInfo(result, actBrief, null); text.getPlugin().setParameter(Parameter.READ_ONLY); } } /** * load a Rezept from the database * * @param brief * the Brief for the Rezept to be shown */ public void loadRezeptFromDatabase(Rezept rp, Brief brief){ if (actBrief != null) { CoreHub.getLocalLockService().releaseLock(actBrief); } actBrief = brief; updateTextLock(); text.open(brief); rp.setBrief(actBrief); } @Override public void createPartControl(Composite parent){ text = new TextContainer(getViewSite()); text.getPlugin().createContainer(parent, this); GlobalEventDispatcher.addActivationListener(this, this); } @Override public void setFocus(){ // TODO Automatisch erstellter Methoden-Stub } /** * Create a recipe document, with a list of prescriptions from Rezept parameter. * * @param rp * @param template * @param replace * @return */ public boolean createList(Rezept rp, String template, String replace){ if (actBrief != null) { CoreHub.getLocalLockService().releaseLock(actBrief); } actBrief = text.createFromTemplateName(Konsultation.getAktuelleKons(), template, Brief.RP, (Patient) ElexisEventDispatcher.getSelected(Patient.class), template + " " + rp.getDate()); updateTextLock(); List<Prescription> lines = rp.getLines(); String[][] fields = new String[lines.size()][]; if (replace.equals(Messages.RezeptBlatt_4)) { fields = createRezeptListFields(lines); } else { fields = createTakingListFields(lines); } int[] wt = new int[] { 10, 70, 20 }; rp.setBrief(actBrief); if (text.getPlugin().insertTable(replace, 0, fields, wt)) { if (text.getPlugin().isDirectOutput()) { text.getPlugin().print(null, null, true); getSite().getPage().hideView(this); } text.saveBrief(actBrief, Brief.RP); return true; } text.saveBrief(actBrief, Brief.RP); return false; } /** * Create a document with a list of prescriptions, not a recipe. * * @param prescriptions * @param template * @param replace * @return */ public boolean createList(Prescription[] prescriptions, String template, String replace){ if (actBrief != null) { CoreHub.getLocalLockService().releaseLock(actBrief); } TimeTool now = new TimeTool(); actBrief = text.createFromTemplateName(Konsultation.getAktuelleKons(), template, Brief.UNKNOWN, (Patient) ElexisEventDispatcher.getSelected(Patient.class), template + " " + now.toString(TimeTool.DATE_GER)); updateTextLock(); List<Prescription> lines = Arrays.asList(prescriptions); String[][] fields = new String[lines.size()][]; if (replace.equals(Messages.RezeptBlatt_4)) { fields = createRezeptListFields(lines); } else { fields = createTakingListFields(lines); } int[] wt = new int[] { 10, 70, 20 }; if (text.getPlugin().insertTable(replace, 0, fields, wt)) { if (text.getPlugin().isDirectOutput()) { text.getPlugin().print(null, null, true); getSite().getPage().hideView(this); } text.saveBrief(actBrief, Brief.UNKNOWN); return true; } text.saveBrief(actBrief, Brief.UNKNOWN); return false; } public String[][] createRezeptListFields(List<Prescription> lines){ String[][] fields = new String[lines.size()][]; for (int i = 0; i < fields.length; i++) { Prescription p = lines.get(i); fields[i] = new String[3]; fields[i][0] = p.get(Messages.RezeptBlatt_number); //$NON-NLS-1$ String bem = p.getBemerkung(); if (StringTool.isNothing(bem)) { fields[i][1] = p.getSimpleLabel(); } else { fields[i][1] = p.getSimpleLabel() + "\t\r" + bem; //$NON-NLS-1$ } fields[i][2] = p.getDosis(); } return fields; } public String[][] createTakingListFields(List<Prescription> lines){ String[][] fields = new String[lines.size()][]; for (int i = 0; i < fields.length; i++) { Prescription p = lines.get(i); fields[i] = new String[3]; fields[i][0] = p.get(Messages.RezeptBlatt_number); //$NON-NLS-1$ String bem = p.getBemerkung(); String patInfo = p.getDisposalComment(); if (StringTool.isNothing(bem)) { fields[i][1] = p.getSimpleLabel(); } else { if (patInfo == null || patInfo.isEmpty()) { fields[i][1] = p.getSimpleLabel() + "\t\r" + bem; //$NON-NLS-1$ } else { fields[i][1] = p.getSimpleLabel() + "\t\r" + bem + "\r" + patInfo; //$NON-NLS-1$ } } fields[i][2] = p.getDosis(); } return fields; } public boolean createRezept(Rezept rp){ if (createList(rp, TT_PRESCRIPTION, Messages.RezeptBlatt_4)) { //$NON-NLS-1$ //$NON-NLS-2$ new OutputLog(rp, this); return true; } return false; } public boolean createEinnahmeliste(Patient pat, Prescription[] pres){ return createList(pres, TT_INTAKE_LIST, Messages.RezeptBlatt_6); //$NON-NLS-1$ //$NON-NLS-2$ } public void save(){ if (actBrief != null) { actBrief.save(text.getPlugin().storeToByteArray(), text.getPlugin().getMimeType()); } } public boolean saveAs(){ // TODO Automatisch erstellter Methoden-Stub return false; } public void activation(boolean mode){ if (mode == false) { save(); } } public void visible(boolean mode){ } public String getOutputterDescription(){ return "Druckerausgabe erstellt"; } public String getOutputterID(){ return "ch.elexis.RezeptBlatt"; } public Image getSymbol(){ return Images.IMG_PRINTER.getImage(); } }