package ch.elexis.data;
import java.util.ArrayList;
import java.util.List;
import ch.elexis.core.data.interfaces.IVerrechenbar;
import ch.rgw.tools.JdbcLink;
import ch.rgw.tools.Money;
import ch.rgw.tools.TimeTool;
import ch.rgw.tools.VersionInfo;
public class VerrechnetCopy extends Verrechnet {
public static final String RECHNUNGID = "RechnungId"; //$NON-NLS-1$
public static final String BEHANDLUNGID = "BehandlungId"; //$NON-NLS-1$
public static final String VERSIONID = "VERSION"; //$NON-NLS-1$
private static final String TABLENAME = "VERRECHNETCOPY"; //$NON-NLS-1$
public static final String VERSION = "1.0.0"; //$NON-NLS-1$
// @formatter:off
static final String create =
"CREATE TABLE " + TABLENAME + " (" + //$NON-NLS-1$ //$NON-NLS-2$
"ID VARCHAR(25) primary key, " + //$NON-NLS-1$
"lastupdate BIGINT," + //$NON-NLS-1$
"deleted CHAR(1) default '0'," + //$NON-NLS-1$
"RechnungId VARCHAR(25), " + //$NON-NLS-1$
"BehandlungId VARCHAR(25), " + //$NON-NLS-1$
"Leistg_txt VARCHAR(255)," + //$NON-NLS-1$
"Leistg_code VARCHAR(25)," + //$NON-NLS-1$
"Klasse VARCHAR(80)," + //$NON-NLS-1$
"Zahl CHAR(3)," + //$NON-NLS-1$
"EK_Kosten CHAR(8)," + //$NON-NLS-1$
"VK_TP CHAR(8)," + //$NON-NLS-1$
"VK_Scale CHAR(8)," + //$NON-NLS-1$
"VK_Preis CHAR(8)," + //$NON-NLS-1$
"Scale CHAR(4) DEFAULT '100'," + //$NON-NLS-1$
"Scale2 CHAR(4) DEFAULT '100'," + //$NON-NLS-1$
"userID VARCHAR(25)," + //$NON-NLS-1$
"Detail BLOB" + //$NON-NLS-1$
");" + //$NON-NLS-1$
"CREATE INDEX verrechnetcopy1 ON " + TABLENAME + " (" + RECHNUNGID + ");" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
"CREATE INDEX verrechnetcopy2 ON " + TABLENAME + " (" + BEHANDLUNGID + ");" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
"INSERT INTO " + TABLENAME + " (ID," + RECHNUNGID + ") VALUES (" + JdbcLink.wrap(VERSIONID) + "," + JdbcLink.wrap(VERSION) + ");"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
// @formatter:on
static {
addMapping(TABLENAME, RECHNUNGID, BEHANDLUNGID, LEISTG_TXT, LEISTG_CODE, CLASS, COUNT,
COST_BUYING, SCALE_TP_SELLING, SCALE_SELLING, PRICE_SELLING, SCALE, SCALE2,
"ExtInfo=Detail", USERID);
if (!tableExists(TABLENAME)) {
createOrModifyTable(create);
} else {
VerrechnetCopy version = load(VERSIONID);
VersionInfo vi = new VersionInfo(version.get(RECHNUNGID));
if (vi.isOlder(VERSION)) {
// put update code here when needed
}
}
}
public VerrechnetCopy(){}
public VerrechnetCopy(String id){
super(id);
}
public static VerrechnetCopy load(final String id){
return new VerrechnetCopy(id);
}
@Override
protected String getTableName(){
return TABLENAME;
}
/**
* {@link VerrechnetCopy} instances are created on successful creation of a {@link Rechnung}.
* <b>Using this class differently is not allowed!</b>
*
* @param verrechnet
* @param bill
*/
public VerrechnetCopy(Verrechnet verrechnet, Rechnung bill){
create(null);
set(new String[] {
RECHNUNGID, BEHANDLUNGID, LEISTG_TXT, LEISTG_CODE, CLASS, COUNT, COST_BUYING,
SCALE_TP_SELLING, SCALE_SELLING, PRICE_SELLING, SCALE, SCALE2, USERID
},
new String[] {
bill.getId(), verrechnet.getKons().getId(), verrechnet.get(LEISTG_TXT),
verrechnet.get(LEISTG_CODE), verrechnet.get(CLASS), verrechnet.get(COUNT),
verrechnet.get(COST_BUYING), verrechnet.get(SCALE_TP_SELLING),
verrechnet.get(SCALE_SELLING), verrechnet.get(PRICE_SELLING),
verrechnet.get(SCALE), verrechnet.get(SCALE2), verrechnet.get(USERID)
});
// copy vat scale for reporting
setDetail(Verrechnet.VATSCALE, verrechnet.getDetail(Verrechnet.VATSCALE));
}
/**
* Get a list of all {@link Verrechnet} for a bill. Also returns {@link Verrechnet} for canceled
* bills.
*
* @param bill
* @return
*/
public static List<Verrechnet> getVerrechnetByBill(Rechnung bill){
ArrayList<Verrechnet> ret = new ArrayList<Verrechnet>();
Query<VerrechnetCopy> vcQuery = new Query<VerrechnetCopy>(VerrechnetCopy.class);
vcQuery.add(VerrechnetCopy.RECHNUNGID, Query.EQUALS, bill.getId());
List<VerrechnetCopy> res = vcQuery.execute();
ret.addAll(res);
return ret;
}
/**
* Get a list of all {@link VerrechnetCopy} for a {@link Konsultation}. This information can be
* used to determine all {@link Rechnung} for a {@link Konsultation}.
*
* @param consultation
* @return
*/
public static List<VerrechnetCopy> getVerrechnetCopyByConsultation(Konsultation consultation){
Query<VerrechnetCopy> vcQuery = new Query<VerrechnetCopy>(VerrechnetCopy.class);
vcQuery.add(VerrechnetCopy.BEHANDLUNGID, Query.EQUALS, consultation.getId());
return vcQuery.execute();
}
public Money getBruttoPreis(){
int tp = checkZero(get(SCALE_TP_SELLING));
TimeTool date = new TimeTool(getLastUpdate());
Konsultation k = Konsultation.load(get(BEHANDLUNGID));
Fall fall = k.getFall();
IVerrechenbar v = getVerrechenbar();
double tpw = 1.0;
if (v != null) { // Unknown tax system
tpw = v.getFactor(date, fall);
}
return new Money((int) Math.round(tpw * tp));
}
}