package ch.elexis.data;
import org.apache.commons.lang.StringUtils;
import ch.elexis.core.constants.Preferences;
import ch.elexis.core.constants.StringConstants;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.model.IStockEntry;
/**
*
* @since 3.2
*/
public class StockEntry extends PersistentObject implements IStockEntry {
public static final String TABLENAME = "STOCK_ENTRY";
public static final String FLD_STOCK = "STOCK";
public static final String FLD_ARTICLE_TYPE = "ARTICLE_TYPE";
public static final String FLD_ARTICLE_ID = "ARTICLE_ID";
public static final String FLD_MIN = "MIN";
public static final String FLD_CURRENT = "CURRENT";
public static final String FLD_MAX = "MAX";
public static final String FLD_FRACTIONUNITS = "FRACTIONUNITS";
public static final String FLD_PROVIDER = "PROVIDER";
static {
addMapping(TABLENAME, FLD_STOCK, FLD_ARTICLE_TYPE, FLD_ARTICLE_ID,
FLD_MIN + "=S:N:" + FLD_MIN, FLD_CURRENT + "=S:N:" + FLD_CURRENT,
FLD_MAX + "=S:N:" + FLD_MAX, FLD_FRACTIONUNITS + "=S:N:" + FLD_FRACTIONUNITS,
FLD_PROVIDER);
}
protected StockEntry(){}
protected StockEntry(final String id){
super(id);
}
public StockEntry(Stock stock, PersistentObject article){
String provider =
CoreHub.globalCfg.get(Preferences.INVENTORY_DEFAULT_ARTICLE_PROVIDER, null);
String[] fields = new String[] {
FLD_STOCK, FLD_ARTICLE_TYPE, FLD_ARTICLE_ID, FLD_PROVIDER
};
String[] values = new String[] {
stock.getId(), article.getClass().getName(), article.getId(),
(provider != null) ? provider : null
};
create(null, fields, values);
}
public static StockEntry load(final String id){
return new StockEntry(id);
}
@Override
public boolean isDragOK(){
return true;
}
@Override
public String getLabel(){
return null;
}
@Override
protected String getTableName(){
return TABLENAME;
}
public Artikel getArticle(){
String[] vals = get(false, FLD_ARTICLE_TYPE, FLD_ARTICLE_ID);
if (StringUtils.isNotBlank(vals[1])) {
return (Artikel) CoreHub.poFactory
.createFromString(vals[0] + StringConstants.DOUBLECOLON + vals[1]);
}
return null;
}
public void setArticle(Artikel article){
if (article != null) {
set(new String[] {
FLD_ARTICLE_TYPE, FLD_ARTICLE_ID
}, article.getClass().getName(), article.getId());
} else {
set(new String[] {
FLD_ARTICLE_TYPE, FLD_ARTICLE_ID
}, null, null);
}
}
public Stock getStock(){
return Stock.load(get(FLD_STOCK));
}
public void setStock(Stock stock){
set(FLD_STOCK, stock.getId());
}
public int getCurrentStock(){
return getInt(FLD_CURRENT);
}
public void setCurrentStock(int currentStock){
// ACHTUNG CoreHub.globalCfg.get(Preferences.INVENTORY_CHECK_ILLEGAL_VALUES
/**
* Istbestand setzen. Wenn INVENTORY_CHECK_ILLEGAL-VALUES gesetzt ist, erscheint eine
* Warnung, wenn der Istbestand unter null komt.
*
* @param s
* Wieviele Packungen tatsächlich auf Lager sind
*/
setInt(FLD_CURRENT, currentStock);
}
public int getMinimumStock(){
return getInt(FLD_MIN);
}
public int getMaximumStock(){
return getInt(FLD_MAX);
}
@Override
public int getFractionUnits(){
return getInt(FLD_FRACTIONUNITS);
}
@Override
public void setFractionUnits(int rest){
setInt(FLD_FRACTIONUNITS, rest);
}
@Override
public void setMinimumStock(int minStock){
setInt(FLD_MIN, minStock);
}
@Override
public void setMaximumStock(int maxStock){
setInt(FLD_MAX, maxStock);
}
@Override
public Kontakt getProvider(){
String providerId = get(FLD_PROVIDER);
if (StringUtils.isNotBlank(providerId)) {
return Kontakt.load(providerId);
}
return null;
}
@Override
public void setProvider(Object provider){
if (provider instanceof Kontakt) {
set(FLD_PROVIDER, ((Kontakt) provider).getId());
}
}
}