// Chromis POS - The New Face of Open Source POS // Copyright (c) 2015 // http://www.chromis.co.uk // // This file is part of Chromis POS // // Chromis POS 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. // // Chromis POS 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 Chromis POS. If not, see <http://www.gnu.org/licenses/>. package uk.chromis.pos.inventory; import uk.chromis.basic.BasicException; import uk.chromis.beans.DateUtils; import uk.chromis.beans.JCalendarDialog; import uk.chromis.data.gui.ComboBoxValModel; import uk.chromis.data.gui.MessageInf; import uk.chromis.data.loader.SentenceList; import uk.chromis.data.user.DirtyManager; import uk.chromis.data.user.EditorRecord; import uk.chromis.format.Formats; import uk.chromis.pos.catalog.CatalogSelector; import uk.chromis.pos.catalog.JCatalog; import uk.chromis.pos.forms.AppLocal; import uk.chromis.pos.forms.AppView; import uk.chromis.pos.forms.DataLogicSales; import uk.chromis.pos.panels.JProductFinder; import uk.chromis.pos.sales.JProductAttEdit; import uk.chromis.pos.ticket.ProductInfoExt; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import uk.chromis.pos.forms.AppConfig; import uk.chromis.pos.ticket.PlayWave; /** * * @author adrianromero */ public final class StockDiaryEditor extends javax.swing.JPanel implements EditorRecord, JDlgEditProduct.CompletionCallback { private final CatalogSelector m_cat; private String m_sID; private String productid; private String productref; private String productcode; private String productname; private String unitsinstock; private Double buyprice; private Double sellprice; private Double stocksecurity; private Double stockmaximum; private String attsetid; private String attsetinstid; private String attsetinstdesc; private String sAppUser; private final ComboBoxValModel m_ReasonModel; private final SentenceList m_sentlocations; private ComboBoxValModel m_LocationsModel; private final AppView m_App; private final DataLogicSales m_dlSales; private DirtyManager m_Dirty; /** Creates new form StockDiaryEditor * @param app * @param dirty */ public StockDiaryEditor(AppView app, DirtyManager dirty) { m_App = app; m_dlSales = (DataLogicSales) m_App.getBean("uk.chromis.pos.forms.DataLogicSales"); m_Dirty = dirty; initComponents(); // El modelo de locales m_sentlocations = m_dlSales.getLocationsList(); m_LocationsModel = new ComboBoxValModel(); m_ReasonModel = new ComboBoxValModel(); m_ReasonModel.add(MovementReason.IN_PURCHASE); m_ReasonModel.add(MovementReason.OUT_SALE); m_ReasonModel.add(MovementReason.IN_STOCKCHANGE); m_ReasonModel.add(MovementReason.OUT_STOCKCHANGE); m_ReasonModel.add(MovementReason.OUT_BREAK); m_ReasonModel.add(MovementReason.IN_REFUND); m_ReasonModel.add(MovementReason.OUT_REFUND); m_ReasonModel.add(MovementReason.IN_MOVEMENT); m_ReasonModel.add(MovementReason.OUT_MOVEMENT); m_ReasonModel.add(MovementReason.IN_OPEN_PACK); m_ReasonModel.add(MovementReason.OUT_OPEN_PACK); m_jreason.setModel(m_ReasonModel); m_cat = new JCatalog(m_dlSales); m_cat.addActionListener(new CatalogListener()); catcontainer.add(m_cat.getComponent(), BorderLayout.CENTER); m_jdate.getDocument().addDocumentListener(dirty); m_jreason.addActionListener(dirty); m_jLocation.addActionListener(dirty); jproduct.getDocument().addDocumentListener(dirty); jattributes.getDocument().addDocumentListener(dirty); m_junits.getDocument().addDocumentListener(dirty); m_jprice.getDocument().addDocumentListener(dirty); m_jminimum.getDocument().addDocumentListener(dirty); m_jmaximum.getDocument().addDocumentListener(dirty); writeValueEOF(); } /** * * @throws BasicException */ public void activate() throws BasicException { m_cat.loadCatalog(); m_LocationsModel = new ComboBoxValModel(m_sentlocations.list()); m_jLocation.setModel(m_LocationsModel); // para que lo refresque } /** * */ @Override public void refresh() { } /** * */ @Override public void writeValueEOF() { m_sID = null; m_jdate.setText(null); m_ReasonModel.setSelectedKey(null); m_LocationsModel.setSelectedKey(m_App.getInventoryLocation()); productid = null; productref = null; productcode = null; productname = null; unitsinstock = null; buyprice = null; sellprice = null; stocksecurity = null; stockmaximum = null; m_jreference.setText(null); m_jcodebar.setText(null); jproduct.setText(null); m_junitsinstock.setText(null); m_jbuyprice.setText(null); m_jsellprice.setText(null); m_jminimum.setText(null); m_jmaximum.setText(null); attsetid = null; attsetinstid = null; attsetinstdesc = null; jattributes.setText(null); m_junits.setText(null); m_jprice.setText(null); m_jdate.setEnabled(false); m_jbtndate.setEnabled(false); m_jreason.setEnabled(false); m_jreference.setEnabled(false); m_EditProduct.setEnabled(false); m_jcodebar.setEnabled(false); m_jEnter.setEnabled(false); m_jLocation.setEnabled(false); jproduct.setEnabled(false); m_junitsinstock.setEnabled(false); m_jbuyprice.setEnabled(false); m_jsellprice.setEnabled(false); m_jminimum.setEnabled(false); m_jmaximum.setEnabled(false); m_FindProduct.setEnabled(false); jattributes.setEnabled(false); jEditAttributes.setEnabled(false); m_junits.setEnabled(false); m_jprice.setEnabled(false); m_cat.setComponentEnabled(false); m_EditProduct.setEnabled(false); } /** * */ @Override public void writeValueInsert() { m_sID = UUID.randomUUID().toString(); m_jdate.setText(Formats.TIMESTAMP.formatValue(DateUtils.getTodayMinutes())); m_ReasonModel.setSelectedItem(MovementReason.IN_PURCHASE); m_LocationsModel.setSelectedKey(m_App.getInventoryLocation()); productid = null; productref = null; productcode = null; productname = null; unitsinstock = null; buyprice = null; sellprice = null; stocksecurity = null; stockmaximum = null; m_jreference.setText(null); m_jcodebar.setText(null); jproduct.setText(null); m_junitsinstock.setText(null); m_jbuyprice.setText(null); m_jsellprice.setText(null); m_jminimum.setText(null); m_jmaximum.setText(null); attsetid = null; attsetinstid = null; attsetinstdesc = null; jattributes.setText(null); m_jcodebar.setText(null); m_junits.setText(null); m_jprice.setText(null); m_jdate.setEnabled(true); m_jbtndate.setEnabled(true); m_jreason.setEnabled(true); m_jreference.setEnabled(true); m_jcodebar.setEnabled(true); m_jEnter.setEnabled(true); m_jLocation.setEnabled(true); jproduct.setEnabled(true); m_jminimum.setEnabled(true); m_jmaximum.setEnabled(true); m_FindProduct.setEnabled(true); jattributes.setEnabled(true); jEditAttributes.setEnabled(true); m_junits.setEnabled(true); m_jprice.setEnabled(true); m_cat.setComponentEnabled(true); getRootPane().setDefaultButton(m_jEnter); m_jcodebar.requestFocusInWindow(); } /** * * @param value */ @Override public void writeValueDelete(Object value) { Object[] diary = (Object[]) value; m_sID = (String) diary[0]; m_jdate.setText(Formats.TIMESTAMP.formatValue(diary[1])); m_ReasonModel.setSelectedKey(diary[2]); m_LocationsModel.setSelectedKey(diary[3]); productid = (String) diary[4]; productref = (String) diary[8]; productcode = (String) diary[9]; productname =(String) diary[10]; unitsinstock = (String) diary[14]; stocksecurity = (Double) diary[15]; stockmaximum = (Double) diary[16]; buyprice = (Double) diary[17]; sellprice = (Double) diary[18]; m_jreference.setText(productref); m_jcodebar.setText(productcode); jproduct.setText(productname); m_junitsinstock.setText(unitsinstock); m_jbuyprice.setText(Formats.CURRENCY.formatValue(buyprice ) ); m_jsellprice.setText(Formats.CURRENCY.formatValue(sellprice) ); m_jminimum.setText(Formats.DOUBLE.formatValue(stocksecurity)); m_jmaximum.setText(Formats.DOUBLE.formatValue(stockmaximum)); attsetid = (String) diary[11]; attsetinstid = (String) diary[5]; attsetinstdesc = (String) diary[12]; jattributes.setText(attsetinstdesc); m_junits.setText(Formats.DOUBLE.formatValue(signum((Double) diary[6], (Integer) diary[2]))); m_jprice.setText(Formats.CURRENCY.formatValue(diary[7])); m_jdate.setEnabled(false); m_jbtndate.setEnabled(false); m_jreason.setEnabled(false); m_jreference.setEnabled(false); m_EditProduct.setEnabled(false); m_jcodebar.setEnabled(false); m_jEnter.setEnabled(false); m_jLocation.setEnabled(false); jproduct.setEnabled(false); m_junitsinstock.setEnabled(false); m_jbuyprice.setEnabled(false); m_jsellprice.setEnabled(false); m_jminimum.setEnabled(false); m_jmaximum.setEnabled(false); m_FindProduct.setEnabled(false); jattributes.setEnabled(false); jEditAttributes.setEnabled(false); m_junits.setEnabled(false); m_jprice.setEnabled(false); m_cat.setComponentEnabled(false); } /** * * @param value */ @Override public void writeValueEdit(Object value) { Object[] diary = (Object[]) value; m_sID = (String) diary[0]; m_jdate.setText(Formats.TIMESTAMP.formatValue(diary[1])); m_ReasonModel.setSelectedKey(diary[2]); m_LocationsModel.setSelectedKey(diary[3]); productid = (String) diary[4]; sAppUser = (String) diary[8]; productref = (String) diary[9]; productcode = (String) diary[10]; productname =(String) diary[11]; unitsinstock = (String) diary[14]; stocksecurity = (Double) diary[15]; stockmaximum = (Double) diary[16]; buyprice = (Double) diary[17]; sellprice = (Double) diary[18]; m_jreference.setText(productref); m_jcodebar.setText(productcode); jproduct.setText(productname); m_junitsinstock.setText(unitsinstock); m_jbuyprice.setText(Formats.CURRENCY.formatValue(buyprice ) ); m_jsellprice.setText(Formats.CURRENCY.formatValue(sellprice) ); m_jminimum.setText(Formats.DOUBLE.formatValue(stocksecurity)); m_jmaximum.setText(Formats.DOUBLE.formatValue(stockmaximum)); attsetid = (String) diary[12]; attsetinstid = (String) diary[5]; attsetinstdesc = (String) diary[13]; jattributes.setText(attsetinstdesc); m_junits.setText(Formats.DOUBLE.formatValue(signum((Double) diary[6], (Integer) diary[2]))); m_jprice.setText(Formats.CURRENCY.formatValue(diary[7])); m_jdate.setEnabled(false); m_jbtndate.setEnabled(false); m_jreason.setEnabled(false); m_jreference.setEnabled(false); m_EditProduct.setEnabled(false); m_jcodebar.setEnabled(false); m_jEnter.setEnabled(false); m_jLocation.setEnabled(false); jproduct.setEnabled(true); m_jminimum.setEnabled(true); m_jmaximum.setEnabled(true); m_FindProduct.setEnabled(true); jattributes.setEnabled(false); jEditAttributes.setEnabled(false); m_junits.setEnabled(false); m_jprice.setEnabled(false); m_cat.setComponentEnabled(false); m_EditProduct.setEnabled(true); } /** * * @return @throws BasicException */ @Override public Object createValue() throws BasicException { stocksecurity = (Double) Formats.DOUBLE.parseValue(m_jminimum.getText()); stockmaximum = (Double) Formats.DOUBLE.parseValue(m_jmaximum.getText()); return new Object[] { m_sID, Formats.TIMESTAMP.parseValue(m_jdate.getText()), m_ReasonModel.getSelectedKey(), m_LocationsModel.getSelectedKey(), productid, attsetinstid, samesignum((Double) Formats.DOUBLE.parseValue(m_junits.getText()), (Integer) m_ReasonModel.getSelectedKey()), Formats.CURRENCY.parseValue(m_jprice.getText()), m_App.getAppUserView().getUser().getName(), productref, productcode, productname, attsetid, attsetinstdesc, unitsinstock, stocksecurity, stockmaximum, buyprice, sellprice }; } /** * * @return */ @Override public Component getComponent() { return this; } private Double signum(Double d, Integer i) { if (d == null || i == null) { return d; } else if (i < 0) { return -d; } else { return d; } } private Double samesignum(Double d, Integer i) { if (d == null || i == null) { return d; } else if ((i > 0 && d < 0.0) || (i < 0 && d > 0.0)) { return -d; } else { return d; } } private void assignProduct(ProductInfoExt prod) { if (jproduct.isEnabled()) { if (prod == null) { productid = null; productref = null; productcode = null; productname = null; unitsinstock = null; buyprice = null; sellprice = null; stocksecurity = null; stockmaximum = null; attsetid = null; attsetinstid = null; attsetinstdesc = null; jproduct.setText(null); m_jcodebar.setText(null); m_jreference.setText(null); jattributes.setText(null); m_EditProduct.setEnabled(false); m_junitsinstock.setText(null); m_jbuyprice.setText(null); m_jsellprice.setText(null); m_jminimum.setText(null); m_jmaximum.setText(null); } else { productid = prod.getID(); productref = prod.getReference(); productcode = prod.getCode(); productname = prod.getName(); attsetid = prod.getAttributeSetID(); try { Double dStock = m_dlSales.findProductStock( (String) m_LocationsModel.getSelectedKey(), productid, attsetid); unitsinstock = Formats.DOUBLE.formatValue(dStock); buyprice = prod.getPriceBuy(); sellprice = prod.getPriceSell(); stocksecurity = m_dlSales.findProductStockSecurity( (String) m_LocationsModel.getSelectedKey(), productid ); stockmaximum = m_dlSales.findProductStockMaximum( (String) m_LocationsModel.getSelectedKey(), productid ); } catch (BasicException ex) { unitsinstock = null; stockmaximum = null; stocksecurity = null; buyprice = null; sellprice = null; } attsetinstid = null; attsetinstdesc = null; jproduct.setText(productname); m_jcodebar.setText(productcode); m_jreference.setText(productref); m_junitsinstock.setText(unitsinstock); m_jbuyprice.setText(Formats.CURRENCY.formatValue(buyprice ) ); m_jsellprice.setText(Formats.CURRENCY.formatValue(sellprice) ); m_jminimum.setText(Formats.DOUBLE.formatValue(stocksecurity)); m_jmaximum.setText(Formats.DOUBLE.formatValue(stockmaximum)); jattributes.setText(null); m_EditProduct.setEnabled(true); // calculo el precio sugerido para la entrada. MovementReason reason = (MovementReason) m_ReasonModel.getSelectedItem(); Double dPrice = reason.getPrice(prod.getPriceBuy(), prod.getPriceSell()); m_jprice.setText(Formats.CURRENCY.formatValue(dPrice)); } } } private void assignProductById( String Id ) { try { ProductInfoExt oProduct = m_dlSales.getProductInfo(Id); if (oProduct == null) { assignProduct(null); new PlayWave("error.wav").start(); // playing WAVE file } else { assignProduct(oProduct); } } catch (BasicException eData) { assignProduct(null); MessageInf msg = new MessageInf(eData); msg.show(this); } } private void assignProductByCode() { try { String code = m_jcodebar.getText(); ProductInfoExt oProduct = m_dlSales.getProductInfoByCode( code ); if (oProduct == null && code.startsWith("977")) { // This is an ISSN barcode (news and magazines) // the first 3 digits correspond to the 977 prefix assigned to serial publications, // the next 7 digits correspond to the ISSN of the publication // Anything after that is publisher dependant - we strip everything after // the 10th character code = code.substring(0, 10); oProduct = m_dlSales.getProductInfoByCode( code ); } if (oProduct == null) { new PlayWave("error.wav").start(); // playing WAVE file if (JOptionPane.showConfirmDialog(this, AppLocal.getIntString( "message.createproduct"), AppLocal.getIntString("message.title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) { newProduct(); } } else { assignProduct(oProduct); } } catch (BasicException eData) { assignProduct(null); MessageInf msg = new MessageInf(eData); msg.show(this); } } private void assignProductByReference() { try { ProductInfoExt oProduct = m_dlSales.getProductInfoByReference(m_jreference.getText()); if (oProduct == null) { assignProduct(null); new PlayWave("error.wav").start(); // playing WAVE file } else { assignProduct(oProduct); } } catch (BasicException eData) { assignProduct(null); MessageInf msg = new MessageInf(eData); msg.show(this); } } private void editProduct() { JFrame topFrame = (JFrame) SwingUtilities.getWindowAncestor(this); JDlgEditProduct dlg = new JDlgEditProduct( topFrame, true ); dlg.init( m_dlSales, m_Dirty, productid, null ); dlg.setCallbacks(this); dlg.setVisible( true ); } private void newProduct() { JFrame topFrame = (JFrame) SwingUtilities.getWindowAncestor(this); JDlgEditProduct dlg = new JDlgEditProduct( topFrame, true ); String code = m_jcodebar.getText(); dlg.init( m_dlSales, m_Dirty, null, code ); dlg.setCallbacks(this); dlg.setVisible( true ); } @Override public void notifyCompletionOk( String reference ) { // Try to assign product again if( reference != null ) { writeValueInsert(); m_jreference.setText( reference ); jproduct.setEnabled(true); m_jminimum.setEnabled(true); m_jmaximum.setEnabled(true); assignProductByReference(); } } @Override public void notifyCompletionCancel() { } private class CatalogListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { assignProduct((ProductInfoExt) e.getSource()); } } /** * 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. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); m_jdate = new javax.swing.JTextField(); m_jbtndate = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); m_jreason = new javax.swing.JComboBox(); jLabel8 = new javax.swing.JLabel(); jproduct = new javax.swing.JTextField(); m_FindProduct = new javax.swing.JButton(); jLabel6 = new javax.swing.JLabel(); m_jLocation = new javax.swing.JComboBox(); jLabel7 = new javax.swing.JLabel(); m_jcodebar = new javax.swing.JTextField(); m_jEnter = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); m_jreference = new javax.swing.JTextField(); m_EditProduct = new javax.swing.JButton(); jLabel9 = new javax.swing.JLabel(); jattributes = new javax.swing.JTextField(); jEditAttributes = new javax.swing.JButton(); jLabel4 = new javax.swing.JLabel(); m_jmaximum = new javax.swing.JTextField(); jLabel5 = new javax.swing.JLabel(); m_jprice = new javax.swing.JTextField(); jLabel10 = new javax.swing.JLabel(); m_junitsinstock = new javax.swing.JTextField(); jLabel11 = new javax.swing.JLabel(); m_junits = new javax.swing.JTextField(); m_jminimum = new javax.swing.JTextField(); jLabel12 = new javax.swing.JLabel(); m_jbuyprice = new javax.swing.JTextField(); jLabel13 = new javax.swing.JLabel(); jLabel14 = new javax.swing.JLabel(); m_jsellprice = new javax.swing.JTextField(); catcontainer = new javax.swing.JPanel(); setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N setMinimumSize(new java.awt.Dimension(550, 250)); setPreferredSize(new java.awt.Dimension(550, 270)); setLayout(new java.awt.BorderLayout()); jPanel1.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jPanel1.setMaximumSize(new java.awt.Dimension(2147483647, 2147483647)); jPanel1.setMinimumSize(new java.awt.Dimension(780, 260)); jPanel1.setPreferredSize(new java.awt.Dimension(780, 200)); jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); jLabel1.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel1.setText(AppLocal.getIntString("label.stockdate")); // NOI18N jLabel1.setMaximumSize(new java.awt.Dimension(23, 20)); jLabel1.setMinimumSize(new java.awt.Dimension(23, 20)); jLabel1.setPreferredSize(new java.awt.Dimension(23, 20)); jPanel1.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 10, 80, 25)); m_jdate.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jdate.setMinimumSize(new java.awt.Dimension(40, 20)); m_jdate.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(m_jdate, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 10, 200, 25)); m_jbtndate.setIcon(new javax.swing.ImageIcon(getClass().getResource("/uk/chromis/images/date.png"))); // NOI18N java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("pos_messages"); // NOI18N m_jbtndate.setToolTipText(bundle.getString("tiptext.opencalendar")); // NOI18N m_jbtndate.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { m_jbtndateActionPerformed(evt); } }); jPanel1.add(m_jbtndate, new org.netbeans.lib.awtextra.AbsoluteConstraints(310, 3, 40, -1)); jLabel2.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel2.setText(AppLocal.getIntString("label.stockreason")); // NOI18N jLabel2.setMaximumSize(new java.awt.Dimension(36, 20)); jLabel2.setMinimumSize(new java.awt.Dimension(36, 20)); jLabel2.setPreferredSize(new java.awt.Dimension(36, 20)); jPanel1.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(370, 10, 70, 25)); m_jreason.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N jPanel1.add(m_jreason, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 10, 200, 25)); jLabel8.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel8.setText(AppLocal.getIntString("label.warehouse")); // NOI18N jLabel8.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel8.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel8.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel8, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 45, 80, 25)); jproduct.setEditable(false); jproduct.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jPanel1.add(jproduct, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 45, 200, 25)); m_FindProduct.setIcon(new javax.swing.ImageIcon(getClass().getResource("/uk/chromis/images/search24.png"))); // NOI18N m_FindProduct.setToolTipText(bundle.getString("tiptext.searchproductlist")); // NOI18N m_FindProduct.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { m_FindProductActionPerformed(evt); } }); jPanel1.add(m_FindProduct, new org.netbeans.lib.awtextra.AbsoluteConstraints(310, 38, 40, -1)); jLabel6.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel6.setText("Location"); jPanel1.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(370, 45, 70, 25)); m_jLocation.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N jPanel1.add(m_jLocation, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 45, 200, 25)); jLabel7.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel7.setText(AppLocal.getIntString("label.prodbarcode")); // NOI18N jLabel7.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel7.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel7.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 80, 80, 25)); m_jcodebar.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jcodebar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { m_jcodebarActionPerformed(evt); } }); jPanel1.add(m_jcodebar, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 80, 200, 25)); m_jEnter.setIcon(new javax.swing.ImageIcon(getClass().getResource("/uk/chromis/images/barcode.png"))); // NOI18N m_jEnter.setToolTipText(bundle.getString("tiptext.getbarcode")); // NOI18N m_jEnter.setFocusPainted(false); m_jEnter.setFocusable(false); m_jEnter.setMaximumSize(new java.awt.Dimension(54, 33)); m_jEnter.setMinimumSize(new java.awt.Dimension(54, 33)); m_jEnter.setPreferredSize(new java.awt.Dimension(54, 33)); m_jEnter.setRequestFocusEnabled(false); m_jEnter.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { m_jEnterActionPerformed(evt); } }); jPanel1.add(m_jEnter, new org.netbeans.lib.awtextra.AbsoluteConstraints(310, 73, 40, -1)); jLabel3.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel3.setText(AppLocal.getIntString("label.maximum")); // NOI18N jLabel3.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel3.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel3.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(510, 140, 60, 20)); m_jreference.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jreference.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { m_jreferenceActionPerformed(evt); } }); jPanel1.add(m_jreference, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 115, 200, 25)); m_EditProduct.setIcon(new javax.swing.ImageIcon(getClass().getResource("/uk/chromis/images/sale_editline.png"))); // NOI18N m_EditProduct.setToolTipText(bundle.getString("tiptext.enterproductid")); // NOI18N m_EditProduct.setFocusPainted(false); m_EditProduct.setFocusable(false); m_EditProduct.setMaximumSize(new java.awt.Dimension(64, 33)); m_EditProduct.setMinimumSize(new java.awt.Dimension(64, 33)); m_EditProduct.setPreferredSize(new java.awt.Dimension(64, 33)); m_EditProduct.setRequestFocusEnabled(false); m_EditProduct.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { m_EditProductActionPerformed(evt); } }); jPanel1.add(m_EditProduct, new org.netbeans.lib.awtextra.AbsoluteConstraints(310, 110, 40, -1)); jLabel9.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel9.setText(AppLocal.getIntString("label.attributes")); // NOI18N jLabel9.setMaximumSize(new java.awt.Dimension(48, 20)); jLabel9.setMinimumSize(new java.awt.Dimension(48, 20)); jLabel9.setPreferredSize(new java.awt.Dimension(48, 20)); jPanel1.add(jLabel9, new org.netbeans.lib.awtextra.AbsoluteConstraints(370, 170, 70, 25)); jattributes.setEditable(false); jattributes.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jPanel1.add(jattributes, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 170, 210, 25)); jEditAttributes.setIcon(new javax.swing.ImageIcon(getClass().getResource("/uk/chromis/images/attributes.png"))); // NOI18N jEditAttributes.setToolTipText(bundle.getString("tiptext.productattributes")); // NOI18N jEditAttributes.setMaximumSize(new java.awt.Dimension(65, 33)); jEditAttributes.setMinimumSize(new java.awt.Dimension(65, 33)); jEditAttributes.setPreferredSize(new java.awt.Dimension(65, 33)); jEditAttributes.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jEditAttributesActionPerformed(evt); } }); jPanel1.add(jEditAttributes, new org.netbeans.lib.awtextra.AbsoluteConstraints(660, 160, 40, -1)); jLabel4.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel4.setText(AppLocal.getIntString("label.units")); // NOI18N jLabel4.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel4.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel4.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 150, 80, 25)); m_jmaximum.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jmaximum.setHorizontalAlignment(javax.swing.JTextField.RIGHT); jPanel1.add(m_jmaximum, new org.netbeans.lib.awtextra.AbsoluteConstraints(580, 140, 70, 25)); jLabel5.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel5.setText(AppLocal.getIntString("label.price")); // NOI18N jPanel1.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(190, 150, 40, 25)); m_jprice.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jprice.setHorizontalAlignment(javax.swing.JTextField.RIGHT); jPanel1.add(m_jprice, new org.netbeans.lib.awtextra.AbsoluteConstraints(230, 150, 70, 25)); jLabel10.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel10.setText(AppLocal.getIntString("label.stockproduct")); // NOI18N jLabel10.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel10.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel10.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel10, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 110, 80, 30)); m_junitsinstock.setEditable(false); m_junitsinstock.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_junitsinstock.setHorizontalAlignment(javax.swing.JTextField.RIGHT); jPanel1.add(m_junitsinstock, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 80, 60, 20)); jLabel11.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel11.setText(AppLocal.getIntString("label.stockunits")); // NOI18N jLabel11.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel11.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel11.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel11, new org.netbeans.lib.awtextra.AbsoluteConstraints(370, 80, 60, 20)); m_junits.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_junits.setHorizontalAlignment(javax.swing.JTextField.RIGHT); jPanel1.add(m_junits, new org.netbeans.lib.awtextra.AbsoluteConstraints(100, 150, 70, 25)); m_jminimum.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jminimum.setHorizontalAlignment(javax.swing.JTextField.RIGHT); jPanel1.add(m_jminimum, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 140, 60, 25)); jLabel12.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel12.setText(AppLocal.getIntString("label.minimum")); // NOI18N jLabel12.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel12.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel12.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel12, new org.netbeans.lib.awtextra.AbsoluteConstraints(370, 140, 60, 20)); m_jbuyprice.setEditable(false); m_jbuyprice.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jbuyprice.setHorizontalAlignment(javax.swing.JTextField.RIGHT); jPanel1.add(m_jbuyprice, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 110, 60, 20)); jLabel13.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel13.setText(AppLocal.getIntString("label.prodpricebuy")); // NOI18N jLabel13.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel13.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel13.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel13, new org.netbeans.lib.awtextra.AbsoluteConstraints(370, 110, 60, 20)); jLabel14.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel14.setText(AppLocal.getIntString("label.prodpricesell")); // NOI18N jLabel14.setMaximumSize(new java.awt.Dimension(40, 20)); jLabel14.setMinimumSize(new java.awt.Dimension(40, 20)); jLabel14.setPreferredSize(new java.awt.Dimension(40, 20)); jPanel1.add(jLabel14, new org.netbeans.lib.awtextra.AbsoluteConstraints(510, 110, 60, 20)); m_jsellprice.setEditable(false); m_jsellprice.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jsellprice.setHorizontalAlignment(javax.swing.JTextField.RIGHT); jPanel1.add(m_jsellprice, new org.netbeans.lib.awtextra.AbsoluteConstraints(580, 110, 60, 20)); add(jPanel1, java.awt.BorderLayout.PAGE_START); catcontainer.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N catcontainer.setMaximumSize(new java.awt.Dimension(2147483647, 2147483647)); catcontainer.setMinimumSize(new java.awt.Dimension(0, 250)); catcontainer.setPreferredSize(new java.awt.Dimension(0, 250)); catcontainer.setLayout(new java.awt.BorderLayout()); add(catcontainer, java.awt.BorderLayout.CENTER); catcontainer.getAccessibleContext().setAccessibleParent(jPanel1); }// </editor-fold>//GEN-END:initComponents private void m_EditProductActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_m_EditProductActionPerformed editProduct(); }//GEN-LAST:event_m_EditProductActionPerformed private void m_jreferenceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_m_jreferenceActionPerformed assignProductByReference(); }//GEN-LAST:event_m_jreferenceActionPerformed private void m_jcodebarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_m_jcodebarActionPerformed assignProductByCode(); }//GEN-LAST:event_m_jcodebarActionPerformed private void m_jEnterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_m_jEnterActionPerformed assignProductByCode(); }//GEN-LAST:event_m_jEnterActionPerformed private void jEditAttributesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jEditAttributesActionPerformed if (productid == null) { // first select the product. MessageInf msg = new MessageInf(MessageInf.SGN_WARNING, AppLocal.getIntString("message.productnotselected")); msg.show(this); } else { try { JProductAttEdit attedit = JProductAttEdit.getAttributesEditor(this, m_App.getSession()); attedit.editAttributes(attsetid, attsetinstid); attedit.setVisible(true); if (attedit.isOK()) { // The user pressed OK attsetinstid = attedit.getAttributeSetInst(); attsetinstdesc = attedit.getAttributeSetInstDescription(); jattributes.setText(attsetinstdesc); } } catch (BasicException ex) { MessageInf msg = new MessageInf(MessageInf.SGN_WARNING, AppLocal.getIntString("message.cannotfindattributes"), ex); msg.show(this); } } }//GEN-LAST:event_jEditAttributesActionPerformed private void m_jbtndateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_m_jbtndateActionPerformed Date date; try { date = (Date) Formats.TIMESTAMP.parseValue(m_jdate.getText()); } catch (BasicException e) { date = null; } date = JCalendarDialog.showCalendarTime(this, date); if (date != null) { m_jdate.setText(Formats.TIMESTAMP.formatValue(date)); } }//GEN-LAST:event_m_jbtndateActionPerformed private void m_FindProductActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_m_FindProductActionPerformed assignProduct(JProductFinder.showMessage(this, m_dlSales)); }//GEN-LAST:event_m_FindProductActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JPanel catcontainer; private javax.swing.JButton jEditAttributes; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JTextField jattributes; private javax.swing.JTextField jproduct; private javax.swing.JButton m_EditProduct; private javax.swing.JButton m_FindProduct; private javax.swing.JButton m_jEnter; private javax.swing.JComboBox m_jLocation; private javax.swing.JButton m_jbtndate; private javax.swing.JTextField m_jbuyprice; private javax.swing.JTextField m_jcodebar; private javax.swing.JTextField m_jdate; private javax.swing.JTextField m_jmaximum; private javax.swing.JTextField m_jminimum; private javax.swing.JTextField m_jprice; private javax.swing.JComboBox m_jreason; private javax.swing.JTextField m_jreference; private javax.swing.JTextField m_jsellprice; private javax.swing.JTextField m_junits; private javax.swing.JTextField m_junitsinstock; // End of variables declaration//GEN-END:variables }