/*******************************************************************************
* Copyright (c) 2007-2011, 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 API and implementation
******************************************************************************/
package ch.elexis.scripting;
import java.io.File;
import java.io.FileWriter;
import java.util.List;
import ch.elexis.core.ui.util.SWTHelper;
import ch.elexis.data.Fall;
import ch.elexis.data.Konsultation;
import ch.elexis.data.PersistentObject;
import ch.elexis.data.Query;
import ch.elexis.data.Verrechnet;
import ch.rgw.tools.ExHandler;
import ch.rgw.tools.JdbcLink;
import ch.rgw.tools.Money;
import ch.rgw.tools.StringTool;
import ch.rgw.tools.TimeTool;
public class TarmedTaxpunktkorrektur {
FileWriter writer;
/**
* Rechne alle Konsultationen seit einem Stichdatum (inklusive) auf einen neuen Taxpunktwert um
*
* @param dateFrom
* @param abrsystem
* @param newTP
* @return Einen String, der das Resulktat beschreibt.
*/
public String recalc(String dateFrom, String abrsystem, double newTP){
File file =
new File(System.getProperty("user.home") + File.separator + "elexis" + File.separator
+ "taxpunktkorrektur.log");
try {
writer = new FileWriter(file);
if (SWTHelper.askYesNo("WARNUNG", "Wirklich alle Konsultationen seit dem " + dateFrom
+ " auf " + Double.toString(newTP) + " umrechnen?")) {
TimeTool ttFrom = new TimeTool();
if (!ttFrom.set(dateFrom)) {
writer.write("bad date format: " + dateFrom + " aborting.\n");
return "Datumformat kann nicht interpretiert werden. Bitte als dd.mm.yyyy eingeben";
}
StringBuilder del = new StringBuilder();
del.append("DELETE FROM VK_PREISE WHERE TYP=").append(JdbcLink.wrap(abrsystem))
.append(" and DATUM_VON>=")
.append(JdbcLink.wrap(ttFrom.toString(TimeTool.DATE_COMPACT)));
writer.write("removing old tp values\n");
PersistentObject.getConnection().exec(del.toString());
del = new StringBuilder();
TimeTool yesterday = new TimeTool(ttFrom);
yesterday.addDays(-1);
del.append("UPDATE VK_PREISE SET DATUM_BIS=")
.append(JdbcLink.wrap(yesterday.toString(TimeTool.DATE_COMPACT)))
.append(" WHERE DATUM_BIS>")
.append(JdbcLink.wrap(yesterday.toString(TimeTool.DATE_COMPACT)));
writer.write("adjusting multiplicators\n");
PersistentObject.getConnection().exec(del.toString());
del = new StringBuilder();
del.append("INSERT INTO VK_PREISE (ID,DATUM_VON,DATUM_BIS,TYP,MULTIPLIKATOR) VALUES (")
.append(JdbcLink.wrap(StringTool.unique("rtsu"))).append(",")
.append(JdbcLink.wrap(ttFrom.toString(TimeTool.DATE_COMPACT))).append(",")
.append("'99991231',").append(JdbcLink.wrap(abrsystem)).append(",")
.append(JdbcLink.wrap(Double.toString(newTP))).append(");");
writer.write("inserting new TP value\n");
PersistentObject.getConnection().exec(del.toString());
writer.write("collecting consultations\n");
Query<Konsultation> qbe = new Query<Konsultation>(Konsultation.class);
qbe.add("RechnungsID", "is", null);
qbe.add("Datum", ">=", ttFrom.toString(TimeTool.DATE_COMPACT));
int i = 0;
Money old = new Money();
Money changed = new Money();
for (Konsultation k : qbe.execute()) {
Fall fall = k.getFall();
String abr = fall.getAbrechnungsSystem();
if (abr.equals(abrsystem)) {
List<Verrechnet> vv = k.getLeistungen();
for (Verrechnet v : vv) {
old.addMoney(new Money(v.get("VK_Preis")).multiply(v.getZahl() / 100.0));
v.setStandardPreis();
changed.addMoney(v.getBruttoPreis().multiply(v.getZahl()));
}
writer.write("konvertierte " + k.getVerboseLabel() + "\n");
}
i++;
}
return "Abgeschlossen. " + Integer.toString(i)
+ " Konsultationen wurden umgrechnet.\nAlter Gesamtbetrag: "
+ old.getAmountAsString() + "\nNeuer Gesamtbetrag: "
+ changed.getAmountAsString();
} else {
writer.write("aborted by user\n");
}
} catch (Exception ex) {
ExHandler.handle(ex);
return ex.getMessage();
} finally {
try {
writer.close();
} catch (Exception ex) {}
}
return "allgemeiner Fehler";
}
}