/*******************************************************************************
* Copyright (c) 2007-2008, 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.berchtold.emanuel.privatrechnung.rechnung;
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.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.progress.IProgressService;
import ch.elexis.core.data.interfaces.IRnOutputter;
import ch.elexis.core.data.util.ResultAdapter;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Fall;
import ch.elexis.data.Rechnung;
import ch.elexis.data.RnStatus;
import ch.rgw.tools.ExHandler;
import ch.rgw.tools.Result;
public class RechnungsDrucker implements IRnOutputter {
// String templateESR, templateBill;
Button bFirst, bSecond;
boolean bSummary, bDetail;
/**
* We'll take all sorts of bills
*/
public boolean canBill(final Fall fall){
return true;
}
/**
* We never storno
*/
public boolean canStorno(final Rechnung rn){
return false;
}
/**
* Create the Control that will be presented to the user before selecting the bill output
* target. Here we simply chose a template to use for the bill. In fact we need two templates: a
* template for the page with summary and giro and a template for the other pages
*/
public Object createSettingsControl(Object parent){
Composite compParent = (Composite) parent;
Composite ret = new Composite(compParent, SWT.NONE);
ret.setLayout(new GridLayout());
bFirst = new Button(ret, SWT.CHECK);
bFirst.setText("Zusammenfassung");
bSecond = new Button(ret, SWT.CHECK);
bSecond.setText("Detail");
bFirst.setSelection(true);
bSecond.setSelection(true);
return ret;
}
/**
* Print the bill(s)
*/
public Result<Rechnung> doOutput(final TYPE type, final Collection<Rechnung> rnn,
final Properties props){
IWorkbenchPage rnPage;
final Result<Rechnung> result = new Result<Rechnung>(); // =new
// Result<Rechnung>(Log.ERRORS,99,"Not
// yet implemented",null,true);
rnPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
final Result<Rechnung> res = new Result<Rechnung>();
props.setProperty("Summary", Boolean.toString(bSummary));
props.setProperty("Detail", Boolean.toString(bDetail));
try {
final RnPrintView rnp = (RnPrintView) rnPage.showView(RnPrintView.ID);
progressService.runInUI(PlatformUI.getWorkbench().getProgressService(),
new IRunnableWithProgress() {
public void run(final IProgressMonitor monitor){
monitor.beginTask("Drucke Rechnungen", rnn.size() * 10);
int errors = 0;
for (Rechnung rn : rnn) {
try {
result.add(rnp.doPrint(rn, props));
monitor.worked(10);
if (!result.isOK()) {
String errms =
"Rechnung " + rn.getNr() + "konnte nicht gedruckt werden";
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() + ": "
+ RnStatus.getStatusText(rn.getStatus()));
} catch (Exception ex) {
SWTHelper.showError(
"Fehler beim Drucken der Rechnung " + rn.getRnId(),
ex.getMessage());
errors++;
}
}
monitor.done();
if (errors == 0) {
SWTHelper.showInfo("OK", "OK");
} else {
SWTHelper.showError("Fehler", "Fehler");
}
}
}, null);
rnPage.hideView(rnp);
} catch (Exception ex) {
ExHandler.handle(ex);
res.add(Result.SEVERITY.ERROR, 2, ex.getMessage(), null, true);
ErrorDialog.openError(null, "Exception", "Exception",
ResultAdapter.getResultAsStatus(res));
return res;
}
if (!result.isOK()) {
ResultAdapter.displayResult(result, "Fehler beim Rechnungsdruck");
}
return result;
}
public String getDescription(){
return "Privatrechnung B. auf Drucker";
}
public void saveComposite(){
bSummary = bFirst.getSelection();
bDetail = bSecond.getSelection();
}
}