// Chromis POS - The New Face of Open Source POS
// Copyright (c) (c) 2015-2016
// 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.customers;
import java.awt.Component;
import java.awt.image.BufferedImage;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.AbstractTableModel;
import uk.chromis.basic.BasicException;
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.forms.AppLocal;
import uk.chromis.pos.forms.AppView;
import uk.chromis.pos.forms.DataLogicSales;
import uk.chromis.pos.util.StringUtils;
public final class CustomersView extends javax.swing.JPanel implements EditorRecord {
private static final long serialVersionUID = 1L;
private Object m_oId;
private SentenceList m_sentcat;
private List<CustomerTransaction> customerTransactionList;
private TransactionTableModel transactionModel;
private ComboBoxValModel m_CategoryModel;
private DirtyManager m_Dirty;
private DataLogicSales dlSales;
/**
* Creates new form CustomersView
*
* @param app
* @param dirty
*/
public CustomersView(AppView app, DirtyManager dirty) {
try {
dlSales = (DataLogicSales) app.getBean("uk.chromis.pos.forms.DataLogicSales");
initComponents();
m_sentcat = dlSales.getTaxCustCategoriesList();
m_CategoryModel = new ComboBoxValModel();
m_Dirty = dirty;
m_jTaxID.getDocument().addDocumentListener(dirty);
m_jSearchkey.getDocument().addDocumentListener(dirty);
m_jName.getDocument().addDocumentListener(dirty);
m_jCategory.addActionListener(dirty);
m_jNotes.getDocument().addDocumentListener(dirty);
txtMaxdebt.getDocument().addDocumentListener(dirty);
m_jVisible.addActionListener(dirty);
txtFirstName.getDocument().addDocumentListener(dirty);
txtLastName.getDocument().addDocumentListener(dirty);
txtEmail.getDocument().addDocumentListener(dirty);
txtPhone.getDocument().addDocumentListener(dirty);
txtPhone2.getDocument().addDocumentListener(dirty);
txtFax.getDocument().addDocumentListener(dirty);
m_jImage.addPropertyChangeListener("image", dirty);
txtAddress.getDocument().addDocumentListener(dirty);
txtAddress2.getDocument().addDocumentListener(dirty);
txtPostal.getDocument().addDocumentListener(dirty);
txtCity.getDocument().addDocumentListener(dirty);
txtRegion.getDocument().addDocumentListener(dirty);
txtCountry.getDocument().addDocumentListener(dirty);
m_jShowDoB.getDocument().addDocumentListener(dirty);
txtDiscount.getDocument().addDocumentListener(dirty);
j_mDOB.setVisible(false);
j_mDOB.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
updateDoB();
}
public void removeUpdate(DocumentEvent e) {
updateDoB();
}
public void insertUpdate(DocumentEvent e) {
updateDoB();
}
});
init();
} catch (Exception ex) {
Logger.getLogger(CustomersView.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void init() {
writeValueEOF();
}
/**
* Instantiate object
*
* @throws BasicException
*/
@SuppressWarnings("unchecked")
public void activate() throws BasicException {
List a = m_sentcat.list();
a.add(0, null); // The null item
m_CategoryModel = new ComboBoxValModel(a);
m_jCategory.setModel(m_CategoryModel);
//customerTransactionList = dlSales.getCustomersTransactionList();
}
/**
* Refresh object
*/
@Override
public void refresh() {
}
/**
* Write EOF
*/
@Override
public void writeValueEOF() {
m_oId = null;
m_jTaxID.setText(null);
m_jSearchkey.setText(null);
m_jName.setText(null);
m_CategoryModel.setSelectedKey(null);
m_jNotes.setText(null);
txtMaxdebt.setText(null);
txtDiscount.setText(null);
txtCurdebt.setText(null);
txtCurdate.setText(null);
m_jVisible.setSelected(false);
jcard.setText(null);
txtFirstName.setText(null);
txtLastName.setText(null);
txtEmail.setText(null);
txtPhone.setText(null);
txtPhone2.setText(null);
txtFax.setText(null);
m_jImage.setImage(null);
txtAddress.setText(null);
txtAddress2.setText(null);
// txtAddress3.setText(null);
txtPostal.setText(null);
txtCity.setText(null);
txtRegion.setText(null);
txtCountry.setText(null);
j_mDOB.setText(null);
m_jTaxID.setEnabled(false);
m_jSearchkey.setEnabled(false);
m_jName.setEnabled(false);
m_jCategory.setEnabled(false);
m_jNotes.setEnabled(false);
txtMaxdebt.setEnabled(false);
txtDiscount.setEnabled(false);
txtCurdebt.setEnabled(false);
txtCurdate.setEnabled(false);
m_jVisible.setEnabled(false);
jcard.setEnabled(false);
txtFirstName.setEnabled(false);
txtLastName.setEnabled(false);
txtEmail.setEnabled(false);
txtPhone.setEnabled(false);
txtPhone2.setEnabled(false);
txtFax.setEnabled(false);
m_jImage.setEnabled(false);
txtAddress.setEnabled(false);
txtAddress2.setEnabled(false);
// txtAddress3.setEnabled(false);
txtPostal.setEnabled(false);
txtCity.setEnabled(false);
txtRegion.setEnabled(false);
txtCountry.setEnabled(false);
jButton2.setEnabled(false);
jButton3.setEnabled(false);
jTable1.setEnabled(false);
jTable1.setVisible(false);
j_mDOB.setEnabled(false);
}
/**
* Insert data
*/
@Override
public void writeValueInsert() {
m_oId = null;
m_jTaxID.setText(null);
m_jSearchkey.setText(null);
m_jName.setText(null);
m_CategoryModel.setSelectedKey(null);
m_jNotes.setText(null);
txtMaxdebt.setText(null);
txtDiscount.setText(null);
txtCurdebt.setText(null);
txtCurdate.setText(null);
m_jVisible.setSelected(true);
jcard.setText(null);
txtFirstName.setText(null);
txtLastName.setText(null);
txtEmail.setText(null);
txtPhone.setText(null);
txtPhone2.setText(null);
txtFax.setText(null);
m_jImage.setImage(null);
txtAddress.setText(null);
txtAddress2.setText(null);
txtPostal.setText(null);
txtCity.setText(null);
txtRegion.setText(null);
txtCountry.setText(null);
j_mDOB.setText(null);
m_jTaxID.setEnabled(true);
m_jSearchkey.setEnabled(true);
m_jName.setEnabled(true);
m_jCategory.setEnabled(true);
m_jNotes.setEnabled(true);
txtMaxdebt.setEnabled(true);
txtDiscount.setEnabled(true);
txtCurdebt.setEnabled(true);
txtCurdate.setEnabled(true);
m_jVisible.setEnabled(true);
jcard.setEnabled(true);
txtFirstName.setEnabled(true);
txtLastName.setEnabled(true);
txtEmail.setEnabled(true);
txtPhone.setEnabled(true);
txtPhone2.setEnabled(true);
txtFax.setEnabled(true);
m_jImage.setEnabled(true);
txtAddress.setEnabled(true);
txtAddress2.setEnabled(true);
txtPostal.setEnabled(true);
txtCity.setEnabled(true);
txtRegion.setEnabled(true);
txtCountry.setEnabled(true);
jButton2.setEnabled(true);
jButton3.setEnabled(true);
jTable1.setEnabled(false);
jTable1.setVisible(false);
j_mDOB.setEnabled(false);
}
/**
* Delete from object
*
* @param value
*/
@Override
public void writeValueDelete(Object value) {
System.out.println("delete");
Object[] customer = (Object[]) value;
m_oId = customer[0];
m_jTaxID.setText((String) customer[1]);
m_jSearchkey.setText((String) customer[2]);
m_jName.setText((String) customer[3]);
m_jNotes.setText((String) customer[4]);
m_jVisible.setSelected(((Boolean) customer[5]));
jcard.setText((String) customer[6]);
txtMaxdebt.setText(Formats.CURRENCY.formatValue(customer[7]));
txtCurdate.setText(Formats.DATE.formatValue(customer[8]));
txtCurdebt.setText(Formats.CURRENCY.formatValue(customer[9]));
txtFirstName.setText(Formats.STRING.formatValue(customer[10]));
txtLastName.setText(Formats.STRING.formatValue(customer[11]));
txtEmail.setText(Formats.STRING.formatValue(customer[12]));
txtPhone.setText(Formats.STRING.formatValue(customer[13]));
txtPhone2.setText(Formats.STRING.formatValue(customer[14]));
txtFax.setText(Formats.STRING.formatValue(customer[15]));
txtAddress.setText(Formats.STRING.formatValue(customer[16]));
txtAddress2.setText(Formats.STRING.formatValue(customer[17]));
txtPostal.setText(Formats.STRING.formatValue(customer[18]));
txtCity.setText(Formats.STRING.formatValue(customer[19]));
txtRegion.setText(Formats.STRING.formatValue(customer[20]));
txtCountry.setText(Formats.STRING.formatValue(customer[21]));
m_CategoryModel.setSelectedKey(customer[22]);
m_jImage.setImage((BufferedImage) customer[23]);
j_mDOB.setText(Formats.DATE.formatValue(customer[24]));
txtDiscount.setText(Formats.PERCENT.formatValue(customer[25]));
m_jTaxID.setEnabled(false);
m_jSearchkey.setEnabled(false);
m_jName.setEnabled(false);
m_jNotes.setEnabled(false);
txtMaxdebt.setEnabled(false);
txtCurdebt.setEnabled(false);
txtDiscount.setEnabled(false);
txtCurdate.setEnabled(false);
m_jVisible.setEnabled(false);
jcard.setEnabled(false);
txtFirstName.setEnabled(false);
txtLastName.setEnabled(false);
txtEmail.setEnabled(false);
txtPhone.setEnabled(false);
txtPhone2.setEnabled(false);
txtFax.setEnabled(false);
m_jImage.setEnabled(true);
j_mDOB.setEnabled(false);
txtAddress.setEnabled(false);
txtAddress2.setEnabled(false);
txtPostal.setEnabled(false);
txtCity.setEnabled(false);
txtRegion.setEnabled(false);
txtCountry.setEnabled(false);
m_jCategory.setEnabled(false);
jButton2.setEnabled(false);
jButton3.setEnabled(false);
transactionModel = new TransactionTableModel(getTransactionOfName((String) customer[3]));
jTable1.setModel(transactionModel);
jTable1.setEnabled(false);
}
/**
* Edit object
*
* @param value
*/
@Override
public void writeValueEdit(Object value) {
Object[] customer = (Object[]) value;
m_oId = customer[0];
m_jTaxID.setText((String) customer[1]);
m_jSearchkey.setText((String) customer[2]);
m_jName.setText((String) customer[3]);
String test = m_jName.getText();
m_jNotes.setText((String) customer[4]);
m_jVisible.setSelected(((Boolean) customer[5]));
jcard.setText((String) customer[6]);
txtMaxdebt.setText(Formats.CURRENCY.formatValue(customer[7]));
txtCurdate.setText(Formats.DATE.formatValue(customer[8]));
txtCurdebt.setText(Formats.CURRENCY.formatValue(customer[9]));
txtFirstName.setText(Formats.STRING.formatValue(customer[10]));
txtLastName.setText(Formats.STRING.formatValue(customer[11]));
txtEmail.setText(Formats.STRING.formatValue(customer[12]));
txtPhone.setText(Formats.STRING.formatValue(customer[13]));
txtPhone2.setText(Formats.STRING.formatValue(customer[14]));
txtFax.setText(Formats.STRING.formatValue(customer[15]));
txtAddress.setText(Formats.STRING.formatValue(customer[16]));
txtAddress2.setText(Formats.STRING.formatValue(customer[17]));
txtPostal.setText(Formats.STRING.formatValue(customer[18]));
txtCity.setText(Formats.STRING.formatValue(customer[19]));
txtRegion.setText(Formats.STRING.formatValue(customer[20]));
txtCountry.setText(Formats.STRING.formatValue(customer[21]));
m_CategoryModel.setSelectedKey(customer[22]);
m_jImage.setImage((BufferedImage) customer[23]);
j_mDOB.setText(Formats.DATE.formatValue(customer[24]));
txtDiscount.setText(Formats.PERCENT.formatValue(customer[25]));
m_jTaxID.setEnabled(true);
m_jSearchkey.setEnabled(true);
m_jName.setEnabled(true);
m_jNotes.setEnabled(true);
txtMaxdebt.setEnabled(true);
txtDiscount.setEnabled(true);
txtCurdebt.setEnabled(true);
txtCurdate.setEnabled(true);
m_jVisible.setEnabled(true);
jcard.setEnabled(true);
txtFirstName.setEnabled(true);
txtLastName.setEnabled(true);
txtEmail.setEnabled(true);
txtPhone.setEnabled(true);
txtPhone2.setEnabled(true);
txtFax.setEnabled(true);
m_jImage.setEnabled(true);
txtAddress.setEnabled(true);
txtAddress2.setEnabled(true);
txtPostal.setEnabled(true);
txtCity.setEnabled(true);
txtRegion.setEnabled(true);
txtCountry.setEnabled(true);
j_mDOB.setEnabled(true);
m_jCategory.setEnabled(true);
jButton2.setEnabled(true);
jButton3.setEnabled(true);
transactionModel = new TransactionTableModel(getTransactionOfName((String) customer[3]));
jTable1.setModel(transactionModel);
jTable1.setEnabled(true);
jTable1.setVisible(true);
txtCurdate.repaint();
txtCurdebt.repaint();
updateDoB();
repaint();
refresh();
}
/**
* Create object
*
* @return
* @throws BasicException
*/
@Override
public Object createValue() throws BasicException {
Object[] customer = new Object[26];
customer[0] = m_oId == null ? UUID.randomUUID().toString() : m_oId;
customer[1] = m_jTaxID.getText();
customer[2] = m_jSearchkey.getText();
customer[3] = m_jName.getText();
customer[4] = m_jNotes.getText();
customer[5] = m_jVisible.isSelected();
customer[6] = Formats.STRING.parseValue(jcard.getText()); // Format to manage NULL values
customer[7] = Formats.CURRENCY.parseValue(txtMaxdebt.getText(), 0.0);
customer[8] = Formats.TIMESTAMP.parseValue(txtCurdate.getText()); // not saved
customer[9] = Formats.CURRENCY.parseValue(txtCurdebt.getText()); // not saved
customer[10] = Formats.STRING.parseValue(txtFirstName.getText());
customer[11] = Formats.STRING.parseValue(txtLastName.getText());
customer[12] = Formats.STRING.parseValue(txtEmail.getText());
customer[13] = Formats.STRING.parseValue(txtPhone.getText());
customer[14] = Formats.STRING.parseValue(txtPhone2.getText());
customer[15] = Formats.STRING.parseValue(txtFax.getText());
customer[16] = Formats.STRING.parseValue(txtAddress.getText());
customer[17] = Formats.STRING.parseValue(txtAddress2.getText());
customer[18] = Formats.STRING.parseValue(txtPostal.getText());
customer[19] = Formats.STRING.parseValue(txtCity.getText());
customer[20] = Formats.STRING.parseValue(txtRegion.getText());
customer[21] = Formats.STRING.parseValue(txtCountry.getText());
customer[22] = m_CategoryModel.getSelectedKey();
customer[23] = m_jImage.getImage();
customer[24] = Formats.TIMESTAMP.parseValue(j_mDOB.getText());
customer[25] = Formats.PERCENT.parseValue(txtDiscount.getText());
return customer;
}
@Override
public Component getComponent() {
return this;
}
// JG 3 Oct 2013 - Customer Transaction List
private List<CustomerTransaction> getTransactionOfName(String name) {
// List<CustomerTransaction> customerList = new ArrayList<>();
try {
customerTransactionList = dlSales.getCustomersTransactionList(name);
} catch (BasicException ex) {
Logger.getLogger(CustomersView.class.getName()).log(Level.SEVERE, null, ex);
}
txtCurdate.repaint();
txtCurdebt.repaint();
repaint();
refresh();
return customerTransactionList;
}
class TransactionTableModel extends AbstractTableModel {
List<CustomerTransaction> transactionList;
String[] columnNames = {"TicketID", "Date", "Product", "Quantity", "Total"};
public Double Tamount;
public TransactionTableModel(List<CustomerTransaction> list) {
transactionList = list;
}
@Override
public int getColumnCount() {
return 5;
}
@Override
public int getRowCount() {
return transactionList.size();
}
// this method is called to set the value of each cell
@Override
public Object getValueAt(int row, int column) {
CustomerTransaction customerTransaction = transactionList.get(row);
switch (column) {
case 0:
return customerTransaction.getTicketId();
case 1:
Date transactionDate = customerTransaction.getTransactionDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String formattedDate = sdf.format(transactionDate);
return formattedDate;
case 2:
return customerTransaction.getProductName();
case 3:
return customerTransaction.getUnit();
case 4:
return Formats.CURRENCY.formatValue(customerTransaction.getTotal()) + " ";
default:
return "";
}
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
// Double Tamount;
// Double amountT = amount;
// Tamount = amountT + amount;
// amountT = null;
//System.out.println(Tamount);
//txtTurnover.setText(Tamount.toString());
//
// public Object GetData(TransactionTableModel jTable1, int row, int column){
// txtTurnover.setText(jTable1.GetData(jTable1, row, 4).toString());
// Double amountT;
// DecimalFormat dfT = new DecimalFormat("#.##");
// String famountT;
// famountT = dfT.format(amountT);
// return jTable1.GetData(jTable1, row, column);
// }
// public void SetData(TransactionTableModel jTable1, int row, int column) {
// jTable1.GetData(jTable1, row, 4).toString();
// }
}
/**
* 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() {
jLabel7 = new javax.swing.JLabel();
m_jTaxID = new javax.swing.JTextField();
jLabel8 = new javax.swing.JLabel();
m_jSearchkey = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
m_jName = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jcard = new javax.swing.JTextField();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jLabel9 = new javax.swing.JLabel();
m_jCategory = new javax.swing.JComboBox();
jLabel4 = new javax.swing.JLabel();
jLabel1 = new javax.swing.JLabel();
txtMaxdebt = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
txtCurdebt = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
txtCurdate = new javax.swing.JTextField();
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
jLabel19 = new javax.swing.JLabel();
txtFirstName = new javax.swing.JTextField();
jLabel15 = new javax.swing.JLabel();
txtLastName = new javax.swing.JTextField();
jLabel16 = new javax.swing.JLabel();
txtEmail = new javax.swing.JTextField();
jLabel17 = new javax.swing.JLabel();
txtPhone = new javax.swing.JTextField();
jLabel18 = new javax.swing.JLabel();
txtPhone2 = new javax.swing.JTextField();
jLabel14 = new javax.swing.JLabel();
txtFax = new javax.swing.JTextField();
jLabel26 = new javax.swing.JLabel();
m_jShowDoB = new javax.swing.JTextField();
btnDoB = new javax.swing.JButton();
j_mDOB = new javax.swing.JTextField();
jAge = new javax.swing.JTextField();
jLabel11 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel13 = new javax.swing.JLabel();
txtAddress = new javax.swing.JTextField();
jLabel20 = new javax.swing.JLabel();
txtCountry = new javax.swing.JTextField();
jLabel21 = new javax.swing.JLabel();
txtAddress2 = new javax.swing.JTextField();
jLabel22 = new javax.swing.JLabel();
txtPostal = new javax.swing.JTextField();
jLabel23 = new javax.swing.JLabel();
txtCity = new javax.swing.JTextField();
jLabel24 = new javax.swing.JLabel();
txtRegion = new javax.swing.JTextField();
jPanel4 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jPanel5 = new javax.swing.JPanel();
m_jImage = new uk.chromis.data.gui.JImageEditor();
jPanel3 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
m_jNotes = new javax.swing.JTextArea();
txtTurnover = new javax.swing.JTextField();
jLabel10 = new javax.swing.JLabel();
m_jVisible = new eu.hansolo.custom.SteelCheckBox();
jLabel12 = new javax.swing.JLabel();
txtDiscount = new javax.swing.JTextField();
jLabel7.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel7.setText(AppLocal.getIntString("label.taxid")); // NOI18N
jLabel7.setMaximumSize(new java.awt.Dimension(140, 25));
jLabel7.setMinimumSize(new java.awt.Dimension(140, 25));
jLabel7.setPreferredSize(new java.awt.Dimension(140, 25));
m_jTaxID.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel8.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
jLabel8.setText(AppLocal.getIntString("label.searchkey")); // NOI18N
m_jSearchkey.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel3.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel3.setText(AppLocal.getIntString("label.name")); // NOI18N
jLabel3.setMaximumSize(new java.awt.Dimension(140, 25));
jLabel3.setMinimumSize(new java.awt.Dimension(140, 25));
jLabel3.setPreferredSize(new java.awt.Dimension(140, 25));
m_jName.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel5.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel5.setText(AppLocal.getIntString("label.card")); // NOI18N
jLabel5.setMaximumSize(new java.awt.Dimension(140, 25));
jLabel5.setMinimumSize(new java.awt.Dimension(140, 25));
jLabel5.setPreferredSize(new java.awt.Dimension(140, 25));
jcard.setEditable(false);
jcard.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/uk/chromis/images/encrypted.png"))); // NOI18N
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("pos_messages"); // NOI18N
jButton2.setToolTipText(bundle.getString("tiptext.createkey")); // NOI18N
jButton2.setMaximumSize(new java.awt.Dimension(64, 32));
jButton2.setMinimumSize(new java.awt.Dimension(64, 32));
jButton2.setPreferredSize(new java.awt.Dimension(64, 32));
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/uk/chromis/images/fileclose.png"))); // NOI18N
jButton3.setToolTipText(bundle.getString("tiptext.clearkey")); // NOI18N
jButton3.setMaximumSize(new java.awt.Dimension(64, 32));
jButton3.setMinimumSize(new java.awt.Dimension(64, 32));
jButton3.setPreferredSize(new java.awt.Dimension(64, 32));
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
jLabel9.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel9.setText(AppLocal.getIntString("label.custtaxcategory")); // NOI18N
jLabel9.setMaximumSize(new java.awt.Dimension(140, 25));
jLabel9.setMinimumSize(new java.awt.Dimension(140, 25));
jLabel9.setPreferredSize(new java.awt.Dimension(140, 25));
m_jCategory.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel4.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel4.setText(AppLocal.getIntString("label.visible")); // NOI18N
jLabel4.setMaximumSize(new java.awt.Dimension(140, 25));
jLabel4.setMinimumSize(new java.awt.Dimension(140, 25));
jLabel4.setPreferredSize(new java.awt.Dimension(140, 25));
jLabel1.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel1.setText(AppLocal.getIntString("label.maxdebt")); // NOI18N
jLabel1.setMaximumSize(new java.awt.Dimension(140, 25));
jLabel1.setMinimumSize(new java.awt.Dimension(140, 25));
jLabel1.setPreferredSize(new java.awt.Dimension(140, 25));
txtMaxdebt.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
txtMaxdebt.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
jLabel2.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel2.setText(AppLocal.getIntString("label.curdebt")); // NOI18N
jLabel2.setMaximumSize(new java.awt.Dimension(140, 25));
jLabel2.setMinimumSize(new java.awt.Dimension(140, 25));
jLabel2.setPreferredSize(new java.awt.Dimension(140, 25));
txtCurdebt.setEditable(false);
txtCurdebt.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
txtCurdebt.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
jLabel6.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel6.setText(AppLocal.getIntString("label.curdate")); // NOI18N
txtCurdate.setEditable(false);
txtCurdate.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
txtCurdate.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jTabbedPane1.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jPanel1.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel19.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel19.setText(AppLocal.getIntString("label.firstname")); // NOI18N
jLabel19.setAlignmentX(0.5F);
txtFirstName.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel15.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel15.setText(AppLocal.getIntString("label.lastname")); // NOI18N
txtLastName.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel16.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel16.setText(AppLocal.getIntString("label.email")); // NOI18N
txtEmail.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel17.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel17.setText(AppLocal.getIntString("label.phone")); // NOI18N
txtPhone.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel18.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel18.setText(AppLocal.getIntString("label.phone2")); // NOI18N
txtPhone2.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel14.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel14.setText(AppLocal.getIntString("label.fax")); // NOI18N
txtFax.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel26.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel26.setText(AppLocal.getIntString("label.dob")); // NOI18N
m_jShowDoB.setEditable(false);
m_jShowDoB.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
m_jShowDoB.setDisabledTextColor(new java.awt.Color(0, 0, 0));
btnDoB.setIcon(new javax.swing.ImageIcon(getClass().getResource("/uk/chromis/images/date.png"))); // NOI18N
btnDoB.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnDoBActionPerformed(evt);
}
});
j_mDOB.setEditable(false);
jAge.setEditable(false);
jLabel11.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel11.setText(bundle.getString("label.age")); // NOI18N
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel26, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jAge)
.addComponent(m_jShowDoB, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(btnDoB, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(j_mDOB, javax.swing.GroupLayout.DEFAULT_SIZE, 151, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtLastName, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtEmail, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel19, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtFirstName, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtFax, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel18, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(txtPhone2, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtPhone, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGap(0, 0, Short.MAX_VALUE)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel19, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtFirstName, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtLastName, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel26, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnDoB, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(m_jShowDoB, javax.swing.GroupLayout.Alignment.TRAILING))
.addComponent(j_mDOB))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jAge, javax.swing.GroupLayout.DEFAULT_SIZE, 28, Short.MAX_VALUE)
.addComponent(jLabel11, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtEmail, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel17, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtPhone, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel18, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtPhone2, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtFax, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(27, 27, 27))
);
jTabbedPane1.addTab(AppLocal.getIntString("label.contact"), jPanel1); // NOI18N
jLabel13.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel13.setText(AppLocal.getIntString("label.address")); // NOI18N
txtAddress.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel20.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel20.setText(AppLocal.getIntString("label.country")); // NOI18N
txtCountry.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel21.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel21.setText(AppLocal.getIntString("label.address2")); // NOI18N
txtAddress2.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel22.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel22.setText(AppLocal.getIntString("label.postal")); // NOI18N
txtPostal.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel23.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel23.setText(AppLocal.getIntString("label.city")); // NOI18N
txtCity.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel24.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel24.setText(AppLocal.getIntString("label.region")); // NOI18N
txtRegion.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel24, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel23, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel21, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(txtCity, javax.swing.GroupLayout.DEFAULT_SIZE, 186, Short.MAX_VALUE)
.addComponent(txtAddress)
.addComponent(txtAddress2)
.addComponent(txtRegion)
.addComponent(txtCountry))
.addGap(18, 18, 18)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel22, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtPostal, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(104, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtAddress, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(29, 29, 29)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel23, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtCity, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel22, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel24, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtRegion, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtPostal, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtCountry, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel21, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtAddress2, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(19, 19, 19))
);
jTabbedPane1.addTab(AppLocal.getIntString("label.location"), jPanel2); // NOI18N
jPanel4.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jTable1.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null},
{null, null, null, null, null}
},
new String [] {
"TicketID", "Date", "Product", "Quantity", "Total"
}
));
jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
jTable1.setOpaque(false);
jTable1.setRowHeight(20);
jTable1.setShowHorizontalLines(false);
jScrollPane2.setViewportView(jTable1);
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 515, Short.MAX_VALUE)
.addContainerGap())
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE)
.addContainerGap())
);
jTabbedPane1.addTab(bundle.getString("label.Transactions"), jPanel4); // NOI18N
m_jImage.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
jPanel5.setLayout(jPanel5Layout);
jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addGap(142, 142, 142)
.addComponent(m_jImage, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(143, Short.MAX_VALUE))
);
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addComponent(m_jImage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jTabbedPane1.addTab(bundle.getString("label.photo"), jPanel5); // NOI18N
m_jNotes.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jScrollPane1.setViewportView(m_jNotes);
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 458, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(67, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE)
.addContainerGap())
);
jTabbedPane1.addTab(AppLocal.getIntString("label.notes"), jPanel3); // NOI18N
txtTurnover.setEditable(false);
txtTurnover.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
txtTurnover.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jLabel10.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel10.setText(AppLocal.getIntString("label.customerTotalSales")); // NOI18N
m_jVisible.setSelected(true);
m_jVisible.setText(" ");
jLabel12.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
jLabel12.setText(AppLocal.getIntString("label.discount")); // NOI18N
jLabel12.setMaximumSize(new java.awt.Dimension(140, 25));
jLabel12.setMinimumSize(new java.awt.Dimension(140, 25));
jLabel12.setPreferredSize(new java.awt.Dimension(140, 25));
txtDiscount.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N
txtDiscount.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
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.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(m_jCategory, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(m_jTaxID, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(m_jSearchkey, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(m_jName, javax.swing.GroupLayout.PREFERRED_SIZE, 325, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(m_jVisible, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtMaxdebt, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(txtCurdebt, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(txtCurdate, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(txtDiscount, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtTurnover, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addComponent(jcard, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 540, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel8)
.addComponent(m_jSearchkey, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(m_jTaxID, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(m_jName, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jcard, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(m_jVisible, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(m_jCategory, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtMaxdebt, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addGap(7, 7, 7)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jLabel12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(txtDiscount))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtCurdebt, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtCurdate, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(txtTurnover, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 297, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
if (JOptionPane.showConfirmDialog(this, AppLocal.getIntString("message.cardnew"), AppLocal.getIntString("title.editor"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
jcard.setText("c" + StringUtils.getCardNumber());
m_Dirty.setDirty(true);
}
}//GEN-LAST:event_jButton2ActionPerformed
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
if (JOptionPane.showConfirmDialog(this, AppLocal.getIntString("message.cardremove"), AppLocal.getIntString("title.editor"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
jcard.setText(null);
m_Dirty.setDirty(true);
}
}//GEN-LAST:event_jButton3ActionPerformed
private void btnDoBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDoBActionPerformed
Date date;
try {
date = (Date) Formats.TIMESTAMP.parseValue(j_mDOB.getText());
} catch (BasicException e) {
date = Calendar.getInstance().getTime();
}
date = JCalendarDialog.showCalendar(this, date);
if (date != null) {
if (IsValidDate(date)) {
j_mDOB.setText(Formats.TIMESTAMP.formatValue(date));
String str = String.format("%1$s %2$tB %2$td, %2$tY", "", date);
m_jShowDoB.setText(str);
} else {
MessageInf msg = new MessageInf(MessageInf.SGN_WARNING, AppLocal.getIntString("message.invaliddobdate"));
msg.show(this);
}
}
}//GEN-LAST:event_btnDoBActionPerformed
private void updateDoB() {
m_Dirty.setDirty(true);
try {
if (j_mDOB.getText().equals(null) || j_mDOB.getText().equals("")) {
m_jShowDoB.setText("");
jAge.setText("");
} else {
Date date = (Date) Formats.TIMESTAMP.parseValue(j_mDOB.getText());
String str = String.format("%1$s %2$tB %2$td, %2$tY", "", date);
m_jShowDoB.setText(str);
Period age = getAge(date);
String Age = " " + age.getYears() + " yrs " + age.getMonths() + " mths";
jAge.setText(Age);
}
} catch (BasicException ex) {
Logger.getLogger(CustomersView.class.getName()).log(Level.SEVERE, null, ex);
}
}
private boolean IsValidDate(Date dateToValidate) {
if (dateToValidate == null) {
return false;
}
Date today = truncateTime(Calendar.getInstance().getTime());
Date dob = truncateTime(dateToValidate);
if (dob.after(today) || dob.equals(today)) {
return false;
}
return true;
}
private Period getAge(Date dob) {
LocalDate today = LocalDate.now();
LocalDate date = dob.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
Period p = Period.between(date, today);
return p;
}
private static Date truncateTime(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
date = sdf.parse(sdf.format(date));
} catch (ParseException ex) {
Logger.getLogger(CustomersView.class.getName()).log(Level.SEVERE, null, ex);
}
return date;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnDoB;
private javax.swing.JTextField jAge;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
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 jLabel15;
private javax.swing.JLabel jLabel16;
private javax.swing.JLabel jLabel17;
private javax.swing.JLabel jLabel18;
private javax.swing.JLabel jLabel19;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel20;
private javax.swing.JLabel jLabel21;
private javax.swing.JLabel jLabel22;
private javax.swing.JLabel jLabel23;
private javax.swing.JLabel jLabel24;
private javax.swing.JLabel jLabel26;
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.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField j_mDOB;
private javax.swing.JTextField jcard;
private javax.swing.JComboBox m_jCategory;
private uk.chromis.data.gui.JImageEditor m_jImage;
private javax.swing.JTextField m_jName;
private javax.swing.JTextArea m_jNotes;
private javax.swing.JTextField m_jSearchkey;
private javax.swing.JTextField m_jShowDoB;
private javax.swing.JTextField m_jTaxID;
private eu.hansolo.custom.SteelCheckBox m_jVisible;
private javax.swing.JTextField txtAddress;
private javax.swing.JTextField txtAddress2;
private javax.swing.JTextField txtCity;
private javax.swing.JTextField txtCountry;
private javax.swing.JTextField txtCurdate;
private javax.swing.JTextField txtCurdebt;
private javax.swing.JTextField txtDiscount;
private javax.swing.JTextField txtEmail;
private javax.swing.JTextField txtFax;
private javax.swing.JTextField txtFirstName;
private javax.swing.JTextField txtLastName;
private javax.swing.JTextField txtMaxdebt;
private javax.swing.JTextField txtPhone;
private javax.swing.JTextField txtPhone2;
private javax.swing.JTextField txtPostal;
private javax.swing.JTextField txtRegion;
private javax.swing.JTextField txtTurnover;
// End of variables declaration//GEN-END:variables
}