/******************************************************************************* * 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.TarmedRechnung; import java.io.File; import java.util.Collection; import java.util.Properties; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.IProgressService; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.data.interfaces.IRnOutputter; import ch.elexis.core.data.util.ResultAdapter; import ch.elexis.core.ui.Hub; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.data.Fall; import ch.elexis.data.Rechnung; import ch.elexis.data.RnStatus; import ch.elexis.tarmedprefs.PreferenceConstants; import ch.elexis.views.RnPrintView2; import ch.rgw.tools.ExHandler; import ch.rgw.tools.Result; public class RechnungsDrucker implements IRnOutputter { // Mandant actMandant; TarmedACL ta = TarmedACL.getInstance(); RnPrintView2 rnp; IWorkbenchPage rnPage; // IProgressMonitor monitor; private Button bESR, bForms, bIgnoreFaults, bSaveFileAs; String dirname = CoreHub.localCfg.get(PreferenceConstants.RNN_EXPORTDIR, null); Text tName; private boolean bESRSelected, bFormsSelected, bIgnoreFaultsSelected, bSaveFileAsSelected; public Result<Rechnung> doOutput(final IRnOutputter.TYPE type, final Collection<Rechnung> rechnungen, Properties props){ rnPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IProgressService progressService = PlatformUI.getWorkbench().getProgressService(); final Result<Rechnung> res = new Result<Rechnung>(); // ElexisEventCascade.getInstance().stop(); try { rnp = (RnPrintView2) rnPage.showView(RnPrintView2.ID); progressService.runInUI(PlatformUI.getWorkbench().getProgressService(), new IRunnableWithProgress() { public void run(final IProgressMonitor monitor){ monitor.beginTask(Messages.RechnungsDrucker_PrintingBills, rechnungen.size() * 10); int errors = 0; for (Rechnung rn : rechnungen) { try { if (rnp.doPrint(rn, type, bSaveFileAsSelected ? dirname + File.separator + rn.getNr() + ".xml" : null, bESRSelected, //$NON-NLS-1$ bFormsSelected, !bIgnoreFaultsSelected, monitor) == false) { String errms = Messages.RechnungsDrucker_TheBill + rn.getNr() + Messages.RechnungsDrucker_Couldntbeprintef; res.add(Result.SEVERITY.ERROR, 1, errms, rn, true); errors++; continue; } int status_vorher = rn.getStatus(); if ((status_vorher == RnStatus.OFFEN) || (status_vorher == RnStatus.MAHNUNG_1) || (status_vorher == RnStatus.MAHNUNG_2) || (status_vorher == RnStatus.MAHNUNG_3)) { rn.setStatus(status_vorher + 1); } rn.addTrace(Rechnung.OUTPUT, getDescription() + ": " //$NON-NLS-1$ + RnStatus.getStatusText(rn.getStatus())); } catch (Exception ex) { ExHandler.handle(ex); String msg = ex.getMessage(); if (msg == null) { msg = Messages.RechnungsDrucker_MessageErrorInternal; } SWTHelper.showError( Messages.RechnungsDrucker_MessageErrorWhilePrinting + rn.getNr(), msg); errors++; } } monitor.done(); if (errors == 0) { SWTHelper.showInfo(Messages.RechnungsDrucker_PrintingFinished, Messages.RechnungsDrucker_AllFinishedNoErrors); } else { SWTHelper.showError(Messages.RechnungsDrucker_ErrorsWhilePrinting, Integer.toString(errors) + Messages.RechnungsDrucker_ErrorsWhiilePrintingAdvice); } } }, null); rnPage.hideView(rnp); } catch (Exception ex) { ExHandler.handle(ex); res.add(Result.SEVERITY.ERROR, 2, ex.getMessage(), null, true); ErrorDialog.openError(null, Messages.RechnungsDrucker_ErrorsWhilePrinting, Messages.RechnungsDrucker_CouldntOpenPrintView, ResultAdapter.getResultAsStatus(res)); return res; } finally { // ElexisEventCascade.getInstance().start(); } return res; } public String getDescription(){ return Messages.RechnungsDrucker_PrintAsTarmed; } @Override public Control createSettingsControl(final Object parent){ final Composite parentInc = (Composite) parent; Composite ret = new Composite(parentInc, SWT.NONE); ret.setLayout(new GridLayout()); bESR = new Button(ret, SWT.CHECK); bForms = new Button(ret, SWT.CHECK); bESR.setText(Messages.RechnungsDrucker_WithESR); bESR.setSelection(true); bForms.setText(Messages.RechnungsDrucker_WithForm); bForms.setSelection(true); bIgnoreFaults = new Button(ret, SWT.CHECK); bIgnoreFaults.setText(Messages.RechnungsDrucker_IgnoreFaults); bIgnoreFaults.setSelection(CoreHub.localCfg.get(PreferenceConstants.RNN_RELAXED, true)); bIgnoreFaults.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ CoreHub.localCfg.set(PreferenceConstants.RNN_RELAXED, bIgnoreFaults.getSelection()); } }); Group cSaveCopy = new Group(ret, SWT.NONE); cSaveCopy.setText(Messages.RechnungsDrucker_FileForTrustCenter); cSaveCopy.setLayout(new GridLayout(2, false)); bSaveFileAs = new Button(cSaveCopy, SWT.CHECK); bSaveFileAs.setText(Messages.RechnungsDrucker_AskSaveForTrustCenter); bSaveFileAs.setLayoutData(SWTHelper.getFillGridData(2, true, 1, false)); bSaveFileAs.setSelection(CoreHub.localCfg.get(PreferenceConstants.RNN_SAVECOPY, false)); bSaveFileAs.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ CoreHub.localCfg.set(PreferenceConstants.RNN_SAVECOPY, bSaveFileAs.getSelection()); } }); Button bSelectFile = new Button(cSaveCopy, SWT.PUSH); bSelectFile.setText(Messages.RechnungsDrucker_Directory); bSelectFile.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ DirectoryDialog ddlg = new DirectoryDialog(parentInc.getShell()); dirname = ddlg.open(); if (dirname == null) { SWTHelper.alert(Messages.RechnungsDrucker_DirNameMissingCaption, Messages.RechnungsDrucker_DirnameMissingText); } else { CoreHub.localCfg.set(PreferenceConstants.RNN_EXPORTDIR, dirname); tName.setText(dirname); } } }); tName = new Text(cSaveCopy, SWT.BORDER | SWT.READ_ONLY); tName.setText(CoreHub.localCfg.get(PreferenceConstants.RNN_EXPORTDIR, "")); //$NON-NLS-1$ return ret; } public boolean canStorno(final Rechnung rn){ // We do not need to react on cancel messages return false; } public boolean canBill(final Fall fall){ return true; } public void saveComposite(){ bESRSelected = bESR.getSelection(); bFormsSelected = bForms.getSelection(); bIgnoreFaultsSelected = bIgnoreFaults.getSelection(); bSaveFileAsSelected = bSaveFileAs.getSelection(); } }