package ch.elexis.core.ui.eigenartikel;
import java.util.List;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.observable.value.WritableValue;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.databinding.swt.WidgetProperties;
import org.eclipse.jface.databinding.viewers.ViewerProperties;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.eigenartikel.Eigenartikel;
import ch.elexis.core.model.eigenartikel.EigenartikelTyp;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.core.ui.locks.IUnlockable;
import ch.elexis.core.ui.views.controls.StockDetailComposite;
public class EigenartikelComposite extends Composite implements IUnlockable {
private DataBindingContext m_bindingContext;
private WritableValue productEigenartikel = new WritableValue(null, Eigenartikel.class);
private WritableValue drugPackageEigenartikel = new WritableValue(null, Eigenartikel.class);
private Button btnAddDrugPackage;
private Button btnDeleteDrugPackage;
private Text txtProductName;
private Text txtAtcCode;
private Text txtPackageSizeString;
private Text txtGtin;
private Text txtPharmacode;
private Text txtPackageSizeInt;
private Text txtExfPrice;
private Text txtpubPrice;
private Combo comboDpSelector;
private ComboViewer comboViewerDpSelector;
private ComboViewer comboViewerProductType;
private Combo comboProductType;
private Label lblAtcCode;
private Label lblMeasurementUnit;
private Text txtMeasurementUnit;
private Group grpDrugPackages;
private Button btnHiCostAbsorption;
private Text txtSellUnit;
private Label lblVerkaufseinheit;
private StockDetailComposite sdc;
/**
* Create the composite.
*
* @param parent
* @param style
*/
public EigenartikelComposite(Composite parent, int style){
super(parent, style);
setLayout(new GridLayout(2, false));
Label lblProductName = new Label(this, SWT.NONE);
lblProductName.setAlignment(SWT.RIGHT);
lblProductName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblProductName.setText(Messages.EigenartikelDisplay_productName);
txtProductName = new Text(this, SWT.BORDER);
txtProductName.setTextLimit(127);
txtProductName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label lblProductType = new Label(this, SWT.NONE);
lblProductType.setAlignment(SWT.RIGHT);
lblProductType.setText(Messages.EigenartikelComposite_lblProductType_text);
comboViewerProductType = new ComboViewer(this, SWT.NONE);
comboProductType = comboViewerProductType.getCombo();
comboProductType.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
Eigenartikel.copyProductAttributesToArticleSetAsChild(getProductArtikel(), null);
ElexisEventDispatcher.update(getProductArtikel());
}
});
GridData gd_comboProductType = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_comboProductType.widthHint = 150;
comboProductType.setLayoutData(gd_comboProductType);
comboViewerProductType.setContentProvider(ArrayContentProvider.getInstance());
comboViewerProductType.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element){
return ((EigenartikelTyp) element).getLocaleText();
}
});
comboViewerProductType.setInput(EigenartikelTyp.values());
lblAtcCode = new Label(this, SWT.NONE);
lblAtcCode.setAlignment(SWT.RIGHT);
lblAtcCode.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblAtcCode.setText(Messages.EigenartikelDisplay_atcCode);
Composite compAtcCode = new Composite(this, SWT.NONE);
GridLayout gl_compAtcCode = new GridLayout(2, false);
gl_compAtcCode.marginWidth = 0;
gl_compAtcCode.marginHeight = 0;
compAtcCode.setLayout(gl_compAtcCode);
compAtcCode.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
txtAtcCode = new Text(compAtcCode, SWT.BORDER);
GridData gd_txtAtcCode = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_txtAtcCode.widthHint = 80;
txtAtcCode.setLayoutData(gd_txtAtcCode);
txtAtcCode.setTextLimit(8);
new Label(compAtcCode, SWT.NONE);
new Label(this, SWT.NONE);
new Label(this, SWT.NONE);
new Label(this, SWT.NONE);
new Label(this, SWT.NONE);
grpDrugPackages = new Group(this, SWT.NONE);
grpDrugPackages.setLayout(new GridLayout(1, false));
grpDrugPackages.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 2, 1));
grpDrugPackages.setText(Messages.EigenartikelComposite_grpDrugPackages_text);
Composite compDpSelector = new Composite(grpDrugPackages, SWT.NONE);
compDpSelector.setLayout(new GridLayout(3, false));
compDpSelector.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
btnAddDrugPackage = new Button(compDpSelector, SWT.FLAT);
btnAddDrugPackage.setImage(Images.IMG_NEW.getImage());
btnAddDrugPackage.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
Eigenartikel product = (Eigenartikel) productEigenartikel.getValue();
if (product != null) {
Eigenartikel articleNew =
new Eigenartikel(product.getName(), product.getInternalName());
Eigenartikel.copyProductAttributesToArticleSetAsChild(product, articleNew);
comboViewerDpSelector.add(articleNew);
comboViewerDpSelector.setSelection(new StructuredSelection(articleNew));
ElexisEventDispatcher.reload(Eigenartikel.class);
}
}
});
btnDeleteDrugPackage = new Button(compDpSelector, SWT.FLAT);
btnDeleteDrugPackage.setImage(Images.IMG_DELETE.getImage());
btnDeleteDrugPackage.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
StructuredSelection ss = (StructuredSelection) comboViewerDpSelector.getSelection();
if (ss.isEmpty()) {
return;
}
Eigenartikel selection = (Eigenartikel) ss.getFirstElement();
selection.delete();
comboViewerDpSelector.remove(selection);
}
});
comboViewerDpSelector = new ComboViewer(compDpSelector, SWT.NONE);
comboDpSelector = comboViewerDpSelector.getCombo();
comboDpSelector.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
comboViewerDpSelector.setContentProvider(ArrayContentProvider.getInstance());
comboViewerDpSelector.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element){
Eigenartikel ea = (Eigenartikel) element;
String id = "EAN: " + ea.getEAN() + " Pharmacode: " + ea.getPharmaCode();
return ea.getPackageSizeLabel() + " (" + id + ")";
}
});
comboViewerDpSelector.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event){
StructuredSelection ss = (StructuredSelection) event.getSelection();
if (ss.isEmpty()) {
drugPackageEigenartikel.setValue(null);
sdc.setArticle(null);
} else {
Eigenartikel ea = (Eigenartikel) ss.getFirstElement();
drugPackageEigenartikel.setValue(ea);
sdc.setArticle(ea);
}
}
});
Composite compDpDetail = new Composite(grpDrugPackages, SWT.BORDER);
compDpDetail.setLayout(new GridLayout(4, false));
compDpDetail.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));
Label lblGtin = new Label(compDpDetail, SWT.NONE);
lblGtin.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblGtin.setText(Messages.EigenartikelDisplay_gtin);
txtGtin = new Text(compDpDetail, SWT.BORDER);
txtGtin.setTextLimit(20);
txtGtin.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label lblPharmacode = new Label(compDpDetail, SWT.NONE);
lblPharmacode.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblPharmacode.setText(Messages.EigenartikelDisplay_Pharmacode);
txtPharmacode = new Text(compDpDetail, SWT.BORDER);
txtPharmacode.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label lblPackagesint = new Label(compDpDetail, SWT.NONE);
lblPackagesint.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblPackagesint.setText(Messages.EigenartikelDisplay_PiecesPerPack);
txtPackageSizeInt = new Text(compDpDetail, SWT.BORDER);
txtPackageSizeInt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
lblMeasurementUnit = new Label(compDpDetail, SWT.NONE);
lblMeasurementUnit.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblMeasurementUnit.setText(Messages.EigenartikelComposite_lblMeasurementUnit_text);
txtMeasurementUnit = new Text(compDpDetail, SWT.BORDER);
txtMeasurementUnit.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label lblPackagesstring = new Label(compDpDetail, SWT.NONE);
lblPackagesstring.setToolTipText(Messages.EigenartikelComposite_lblPackagesstring_toolTipText);
lblPackagesstring.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblPackagesstring.setText(Messages.EigenartikelComposite_lblPackagesstring_text);
txtPackageSizeString = new Text(compDpDetail, SWT.BORDER);
txtPackageSizeString.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
lblVerkaufseinheit = new Label(compDpDetail, SWT.NONE);
lblVerkaufseinheit.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblVerkaufseinheit.setText(Messages.EigenartikelComposite_lblVerkaufseinheit_text);
txtSellUnit = new Text(compDpDetail, SWT.BORDER);
txtSellUnit.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label lblExFactoryPrice = new Label(compDpDetail, SWT.NONE);
lblExFactoryPrice.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblExFactoryPrice.setText(Messages.EigenartikelDisplay_buyPrice);
txtExfPrice = new Text(compDpDetail, SWT.BORDER);
txtExfPrice.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label lblPublicPrice = new Label(compDpDetail, SWT.NONE);
lblPublicPrice.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
lblPublicPrice.setText(Messages.EigenartikelDisplay_sellPrice);
txtpubPrice = new Text(compDpDetail, SWT.BORDER);
txtpubPrice.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
new Label(compDpDetail, SWT.NONE);
btnHiCostAbsorption = new Button(compDpDetail, SWT.CHECK);
btnHiCostAbsorption.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1));
btnHiCostAbsorption.setText(Messages.EigenartikelComposite_btnCheckButton_text);
Group stockGroup = new Group(grpDrugPackages, SWT.NONE);
stockGroup.setText(Messages.EigenartikelComposite_stockGroup_text);
stockGroup.setLayout(new FillLayout(SWT.HORIZONTAL));
GridData gd_stockGroup = new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1);
gd_stockGroup.heightHint = 100;
stockGroup.setLayoutData(gd_stockGroup);
sdc = new StockDetailComposite(stockGroup, SWT.NONE);
m_bindingContext = initDataBindings();
}
public void setProductEigenartikel(Eigenartikel productEigenartikel){
this.productEigenartikel.setValue(productEigenartikel);
this.drugPackageEigenartikel.setValue(null);
if (productEigenartikel != null && productEigenartikel.isProduct()) {
grpDrugPackages.setVisible(true);
List<Eigenartikel> packages = productEigenartikel.getPackages();
comboViewerDpSelector.setInput(productEigenartikel.getPackages());
if (packages.size() > 0) {
comboViewerDpSelector.setSelection(new StructuredSelection(packages.get(0)));
}
} else {
comboViewerDpSelector.setInput(null);
grpDrugPackages.setVisible(false);
}
}
@Override
protected void checkSubclass(){
// Disable the check that prevents subclassing of SWT components
}
@Override
public void setUnlocked(boolean unlocked){
txtProductName.setEditable(unlocked);
txtAtcCode.setEditable(unlocked);
comboProductType.setEnabled(unlocked);
btnAddDrugPackage.setEnabled(unlocked);
btnDeleteDrugPackage.setEnabled(unlocked);
btnHiCostAbsorption.setEnabled(unlocked);
txtGtin.setEditable(unlocked);
txtPharmacode.setEditable(unlocked);
txtPackageSizeInt.setEditable(unlocked);
txtMeasurementUnit.setEditable(unlocked);
txtPackageSizeString.setEditable(unlocked);
txtExfPrice.setEditable(unlocked);
txtpubPrice.setEditable(unlocked);
}
public Eigenartikel getProductArtikel(){
return (Eigenartikel) productEigenartikel.getValue();
}
protected DataBindingContext initDataBindings(){
DataBindingContext bindingContext = new DataBindingContext();
UpdateValueStrategy strategyUpdateProductChilds = new UpdateValueStrategy() {
@Override
protected IStatus doSet(IObservableValue observableValue, Object value){
IStatus status = super.doSet(observableValue, value);
Eigenartikel.copyProductAttributesToArticleSetAsChild(getProductArtikel(), null);
ElexisEventDispatcher.update(getProductArtikel());
return status;
}
};
//
IObservableValue observeTextTxtProductNameObserveWidget =
WidgetProperties.text(SWT.Modify).observeDelayed(300, txtProductName);
IObservableValue productEigenartikelNameObserveDetailValue = PojoProperties
.value(Eigenartikel.class, "name", String.class).observeDetail(productEigenartikel);
bindingContext.bindValue(observeTextTxtProductNameObserveWidget,
productEigenartikelNameObserveDetailValue, strategyUpdateProductChilds, null);
//
IObservableValue observeSingleSelectionComboViewerProductType =
ViewerProperties.singleSelection().observe(comboViewerProductType);
IObservableValue productEigenartikelTypObserveDetailValue =
PojoProperties.value(Eigenartikel.class, "typ", EigenartikelTyp.class)
.observeDetail(productEigenartikel);
bindingContext.bindValue(observeSingleSelectionComboViewerProductType,
productEigenartikelTypObserveDetailValue, null, null);
//
IObservableValue observeTextTxtAtcCodeObserveWidget =
WidgetProperties.text(SWT.Modify).observeDelayed(300, txtAtcCode);
IObservableValue productEigenartikelATC_codeObserveDetailValue = PojoProperties
.value(Eigenartikel.class, "ATC_code", String.class).observeDetail(productEigenartikel);
bindingContext.bindValue(observeTextTxtAtcCodeObserveWidget,
productEigenartikelATC_codeObserveDetailValue, strategyUpdateProductChilds, null);
//
IObservableValue observeTextTxtGtinObserveWidget =
WidgetProperties.text(SWT.Modify).observe(txtGtin);
IObservableValue drugPackageEigenartikelEANObserveDetailValue = PojoProperties
.value(Eigenartikel.class, "EAN", String.class).observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeTextTxtGtinObserveWidget,
drugPackageEigenartikelEANObserveDetailValue, null, null);
//
IObservableValue observeTextTxtPackageSizeIntObserveWidget =
WidgetProperties.text(SWT.Modify).observe(txtPackageSizeInt);
IObservableValue drugPackageEigenartikelPackungsGroesseObserveDetailValue =
PojoProperties.value(Eigenartikel.class, "packageSize", Integer.class)
.observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeTextTxtPackageSizeIntObserveWidget,
drugPackageEigenartikelPackungsGroesseObserveDetailValue, null, null);
//
IObservableValue observeTextTxtExfPriceObserveWidget =
WidgetProperties.text(SWT.Modify).observe(txtExfPrice);
IObservableValue drugPackageEigenartikelEKPreisObserveDetailValue =
PojoProperties.value(Eigenartikel.class, "exfPrice", String.class)
.observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeTextTxtExfPriceObserveWidget,
drugPackageEigenartikelEKPreisObserveDetailValue, null, null);
//
IObservableValue observeTextTxtpubPriceObserveWidget =
WidgetProperties.text(SWT.Modify).observe(txtpubPrice);
IObservableValue drugPackageEigenartikelVKPreisObserveDetailValue =
PojoProperties.value(Eigenartikel.class, "pubPrice", String.class)
.observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeTextTxtpubPriceObserveWidget,
drugPackageEigenartikelVKPreisObserveDetailValue, null, null);
//
IObservableValue observeTextTxtMeasurementUnitObserveWidget =
WidgetProperties.text(SWT.Modify).observe(txtMeasurementUnit);
IObservableValue drugPackageEigenartikelMeasurementUnitObserveDetailValue =
PojoProperties.value(Eigenartikel.class, "measurementUnit", String.class)
.observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeTextTxtMeasurementUnitObserveWidget,
drugPackageEigenartikelMeasurementUnitObserveDetailValue, null, null);
//
IObservableValue observeTextTxtPharmacodeObserveWidget =
WidgetProperties.text(SWT.Modify).observe(txtPharmacode);
IObservableValue drugPackageEigenartikelPharmaCodeObserveDetailValue =
PojoProperties.value(Eigenartikel.class, "pharmaCode", String.class)
.observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeTextTxtPharmacodeObserveWidget,
drugPackageEigenartikelPharmaCodeObserveDetailValue, null, null);
//
IObservableValue observeTextTxtSellUnitObserveWidget =
WidgetProperties.text(SWT.Modify).observe(txtSellUnit);
IObservableValue drugPackageEigenartikelSellUnitObserveDetailValue =
PojoProperties.value(Eigenartikel.class, "sellUnit", String.class)
.observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeTextTxtSellUnitObserveWidget,
drugPackageEigenartikelSellUnitObserveDetailValue, null, null);
//
IObservableValue observeTooltipTextTxtPackageSizeStringObserveWidget =
WidgetProperties.text(SWT.Modify).observe(txtPackageSizeString);
IObservableValue drugPackageEigenartikelPackageSizeStringObserveDetailValue =
PojoProperties.value(Eigenartikel.class, "packageSizeString", String.class)
.observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeTooltipTextTxtPackageSizeStringObserveWidget,
drugPackageEigenartikelPackageSizeStringObserveDetailValue, null, null);
//
org.eclipse.core.databinding.observable.value.IObservableValue observeSelectionBtnHiCostAbsorptionObserveWidget =
org.eclipse.jface.databinding.swt.WidgetProperties.selection()
.observe(btnHiCostAbsorption);
org.eclipse.core.databinding.observable.value.IObservableValue drugPackageEigenartikelHealthInsuranceCostAbsorptionObserveDetailValue =
org.eclipse.core.databinding.beans.PojoProperties
.value(ch.elexis.core.eigenartikel.Eigenartikel.class,
"healthInsuranceCostAbsorption", boolean.class)
.observeDetail(drugPackageEigenartikel);
bindingContext.bindValue(observeSelectionBtnHiCostAbsorptionObserveWidget,
drugPackageEigenartikelHealthInsuranceCostAbsorptionObserveDetailValue, null, null);
return bindingContext;
}
}