/*
* Copyright (C) 2014 GG-Net GmbH - Oliver Günther
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package eu.ggnet.dwoss.redtape;
import java.text.DecimalFormat;
import org.jdesktop.beansbinding.Converter;
import eu.ggnet.dwoss.configuration.GlobalConfig;
import eu.ggnet.dwoss.redtape.entity.SalesProduct;
import eu.ggnet.dwoss.util.OkCancelDialog;
/**
* A UI to update {@link SalesProduct} entities.
* @author bastian.venz
*/
public class SalesProductUpdateCask extends javax.swing.JPanel {
private Converter<Double, String> stringConverter = new SalesProductUpdateCask.CurrencyConverter();
private Converter<Double, String> taxedConverter = new SalesProductUpdateCask.CurrencyConverter(GlobalConfig.TAX);
private class CurrencyConverter extends Converter<Double, String> {
private double taxed;
public CurrencyConverter() {
this(0);
}
public CurrencyConverter(double tax) {
this.taxed = 1 + tax;
}
@Override
public String convertForward(Double s) {
DecimalFormat df = new DecimalFormat("#.00");
return df.format(s * taxed);
}
@Override
public Double convertReverse(String t) {
try {
return Math.round((Double.valueOf(t.replaceAll(",", "\\.")) / taxed) * 100) / 100D;
} catch (NumberFormatException e) {
return 0D;
}
}
};
/** Creates new form SalesProductUpdateCask */
public SalesProductUpdateCask(SalesProduct salesProduct) {
initComponents();
this.salesProduct.setDescription(salesProduct.getDescription());
this.salesProduct.setName(salesProduct.getName());
this.salesProduct.setPrice(salesProduct.getPrice());
this.salesProduct.setUniqueUnitProductId(salesProduct.getUniqueUnitProductId());
this.salesProduct.setPartNo(salesProduct.getPartNo());
this.partNoField.setText(salesProduct.getPartNo());
}
public SalesProduct getSalesProduct(){
return salesProduct;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
salesProduct = new eu.ggnet.dwoss.redtape.entity.SalesProduct();
jLabel6 = new javax.swing.JLabel();
nameField = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
priceIncTaxField = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
priceField = new javax.swing.JTextField();
partNoField = new javax.swing.JLabel();
setRequestFocusEnabled(false);
jLabel6.setText("Name:");
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, salesProduct, org.jdesktop.beansbinding.ELProperty.create("${name}"), nameField, org.jdesktop.beansbinding.BeanProperty.create("text"), "nameField");
bindingGroup.addBinding(binding);
jLabel1.setText("PartNo.");
jLabel2.setText("Preis (netto)");
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, salesProduct, org.jdesktop.beansbinding.ELProperty.create("${price}"), priceIncTaxField, org.jdesktop.beansbinding.BeanProperty.create("text"), "bruttoPrice");
binding.setConverter(taxedConverter);
bindingGroup.addBinding(binding);
jLabel3.setText("Preis (brutto)");
binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, salesProduct, org.jdesktop.beansbinding.ELProperty.create("${price}"), priceField, org.jdesktop.beansbinding.BeanProperty.create("text"), "nettoPrice");
binding.setConverter(stringConverter);
bindingGroup.addBinding(binding);
partNoField.setText("<PartNo>");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(partNoField, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(nameField, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGap(20, 20, 20))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE)
.addComponent(priceField))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(priceIncTaxField)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(20, 20, 20))))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(nameField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(partNoField))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jLabel3))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(priceIncTaxField)
.addComponent(priceField))
.addContainerGap())
);
bindingGroup.bind();
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel nameField;
private javax.swing.JLabel partNoField;
private javax.swing.JTextField priceField;
private javax.swing.JTextField priceIncTaxField;
private eu.ggnet.dwoss.redtape.entity.SalesProduct salesProduct;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration//GEN-END:variables
public static void main(String[] args) {
SalesProduct product = new SalesProduct("none", "none", 0d, 0, "none");
SalesProductUpdateCask cask = new SalesProductUpdateCask(product);
OkCancelDialog<SalesProductUpdateCask> ocd = new OkCancelDialog<>("ProductBatchUpdateCask", cask);
ocd.setVisible(true);
SalesProduct finished = ocd.getSubContainer().salesProduct;
System.out.println(finished);
}
}