package ch.elexis.data;
import java.util.List;
import ch.rgw.tools.JdbcLink;
import ch.rgw.tools.StringTool;
import ch.rgw.tools.TimeTool;
import ch.rgw.tools.VersionInfo;
public class TarmedKumulation extends PersistentObject {
private static final String TABLENAME = "TARMED_KUMULATION"; //$NON-NLS-1$
private static final String VERSION = "1.0.0";
private static final String VERSION_ID = "Version";
public static final String FLD_MASTER_CODE = "MasterCode";
public static final String FLD_MASTER_ART = "MasterArt";
public static final String FLD_SLAVE_CODE = "SlaveCode";
public static final String FLD_SLAVE_ART = "SlaveArt";
public static final String FLD_TYP = "Typ";
public static final String FLD_VIEW = "View";
public static final String FLD_VALID_SIDE = "ValidSide";
public static final String FLD_VALID_FROM = "ValidFrom";
public static final String FLD_VALID_TO = "ValidTo";
public static final String TYP_EXCLUSION = "E";
public static final String TYP_INCLUSION = "I";
public static final String TYP_EXCLUSIVE = "X";
public static TimeTool timeHelper = new TimeTool();
// @formatter:off
public static final String createDB = "CREATE TABLE " + TABLENAME + " ("
+"ID VARCHAR(25) primary key, "
+"lastupdate BIGINT,"
+"deleted CHAR(1) default '0',"
+ "MasterCode VARCHAR(25),"
+ "MasterArt CHAR(1),"
+ "SlaveCode VARCHAR(25),"
+ "SlaveArt CHAR(1),"
+ "Typ CHAR(1),"
+ "View CHAR(1),"
+ "ValidSide CHAR(1),"
+ "ValidFrom CHAR(10),"
+ "ValidTo CHAR(10)"
+ ");"
+ "CREATE INDEX tarmedKumulation on " + TABLENAME + " (" + FLD_MASTER_CODE + ");"
+ "INSERT INTO " + TABLENAME + " (ID, " + FLD_MASTER_CODE + ") VALUES (" + JdbcLink.wrap(VERSION_ID) + ", " + JdbcLink.wrap(VERSION) + ");";
//@formatter:on
static {
addMapping(TABLENAME, FLD_MASTER_CODE, FLD_MASTER_ART, FLD_SLAVE_CODE, FLD_SLAVE_ART,
FLD_TYP, FLD_VIEW, FLD_VALID_SIDE, FLD_VALID_FROM, FLD_VALID_TO);
if (!tableExists(TABLENAME)) {
createOrModifyTable(createDB);
} else {
TarmedKumulation version = load(VERSION_ID);
VersionInfo vi = new VersionInfo(version.get(FLD_MASTER_CODE));
if (vi.isOlder(VERSION)) {
version.set(FLD_MASTER_CODE, VERSION);
}
}
}
public TarmedKumulation(){
// leer
}
public static TarmedKumulation load(String id){
return new TarmedKumulation(id);
}
protected TarmedKumulation(String id){
super(id);
}
public TarmedKumulation(String masterCode, String masterArt, String slaveCode, String slaveArt,
String typ, String view, String validSide, String from, String to){
create(null);
String[] values = new String[] {
masterCode, masterArt, slaveCode, slaveArt, typ, view, validSide, from, to
};
String[] fields =
new String[] {
FLD_MASTER_CODE, FLD_MASTER_ART, FLD_SLAVE_CODE, FLD_SLAVE_ART, FLD_TYP, FLD_VIEW,
FLD_VALID_SIDE, FLD_VALID_FROM, FLD_VALID_TO
};
set(fields, values);
}
public static String getDBTableName(){
return TABLENAME;
}
@Override
protected String getTableName(){
return TABLENAME;
}
@Override
public String getLabel(){
return getMasterCode() + ": " + getTyp() + " -> " + getSlaveCode() + " ["
+ getValidFromTime().toString(TimeTool.DATE_COMPACT) + " - "
+ getValidToTime().toString(TimeTool.DATE_COMPACT) + "]";
}
/**
* Get the exclusions as String, containing the service and chapter codes. Group exclusions are
* NOT part of the String.
*
* @param code
* @param date
* @return
*/
public static String getExclusions(String code, TimeTool date){
Query<TarmedKumulation> query = new Query<TarmedKumulation>(TarmedKumulation.class);
query.add(TarmedKumulation.FLD_MASTER_CODE, Query.EQUALS, code);
query.add(TarmedKumulation.FLD_TYP, Query.EQUALS, TarmedKumulation.TYP_EXCLUSION);
List<TarmedKumulation> exclusions = query.execute();
if (exclusions == null || exclusions.isEmpty()) {
return null;
}
StringBuilder sb = new StringBuilder();
for (TarmedKumulation excl : exclusions) {
if ("G".equals(excl.getSlaveArt())) {
continue;
}
if (excl.isValidKumulation(date)) {
if (!sb.toString().isEmpty()) {
sb.append(",");
}
sb.append(excl.getSlaveCode());
}
}
return sb.toString();
}
/**
* Checks if the kumulation is still/already valid on the given date
*
* @param date
* on which it should be valid
* @return true if valid, false otherwise
*/
public boolean isValidKumulation(TimeTool date){
TimeTool from = new TimeTool(getValidFrom());
TimeTool to = new TimeTool(getValidTo());
if (date.isAfterOrEqual(from) && date.isBeforeOrEqual(to)) {
return true;
}
return false;
}
private TimeTool parseDate(String date){
if (!StringTool.isNothing(date)) {
timeHelper.set(date);
return timeHelper;
} else {
return null;
}
}
public String getMasterCode(){
return get(FLD_MASTER_CODE);
}
public String getSlaveCode(){
return get(FLD_SLAVE_CODE);
}
public String getMasterArt(){
return get(FLD_MASTER_ART);
}
public String getSlaveArt(){
return get(FLD_SLAVE_ART);
}
public String getTyp(){
return get(FLD_TYP);
}
public String getView(){
return get(FLD_VIEW);
}
public String getValidSide(){
return get(FLD_VALID_SIDE);
}
public String getValidFrom(){
return get(FLD_VALID_FROM);
}
public TimeTool getValidFromTime(){
return parseDate(getValidFrom());
}
public String getValidTo(){
return get(FLD_VALID_TO);
}
public TimeTool getValidToTime(){
return parseDate(getValidTo());
}
public void setMasterCode(final String mc){
set(FLD_MASTER_CODE, mc);
}
public void setSlaveCode(String sc){
set(FLD_SLAVE_CODE, sc);
}
public void setMasterArt(String mArt){
set(FLD_MASTER_ART, mArt);
}
public void setSlaveArt(String sArt){
set(FLD_SLAVE_ART, sArt);
}
public void setTyp(String typ){
set(FLD_TYP, typ);
}
public void setView(String view){
set(FLD_VIEW, view);
}
public void setValidSide(String validSide){
set(FLD_VALID_SIDE, validSide);
}
public void setValidFrom(String vFrom){
set(FLD_VALID_FROM, vFrom);
}
public void setValidTo(String vTo){
set(FLD_VALID_TO, vTo);
}
}