// uniCenta oPOS - Touch Friendly Point Of Sale // Copyright (c) 2009-2013 uniCenta & previous Openbravo POS works // http://www.unicenta.net/unicentaopos // // This file is part of uniCenta oPOS // // uniCenta oPOS 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. // // uniCenta oPOS 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 uniCenta oPOS. If not, see <http://www.gnu.org/licenses/>. package com.openbravo.pos.panels; import com.openbravo.basic.BasicException; import com.openbravo.data.gui.ComboBoxValModel; import com.openbravo.data.loader.IKeyed; import com.openbravo.data.user.DirtyManager; import com.openbravo.data.user.EditorRecord; import com.openbravo.pos.forms.AppLocal; import com.openbravo.pos.forms.AppView; import java.awt.Component; import java.util.Date; import java.util.UUID; /** * * @author adrianromero */ public final class PaymentsEditor extends javax.swing.JPanel implements EditorRecord { private ComboBoxValModel m_ReasonModel; private String m_sId; private String m_sPaymentId; private Date datenew; private AppView m_App; private String m_sNotes; /** Creates new form JPanelPayments */ public PaymentsEditor(AppView oApp, DirtyManager dirty) { m_App = oApp; initComponents(); m_ReasonModel = new ComboBoxValModel(); m_ReasonModel.add(new PaymentReasonPositive("cashin", AppLocal.getIntString("transpayment.cashin"))); m_ReasonModel.add(new PaymentReasonNegative("cashout", AppLocal.getIntString("transpayment.cashout"))); m_jreason.setModel(m_ReasonModel); jTotal.addEditorKeys(m_jKeys); m_jreason.addActionListener(dirty); jTotal.addPropertyChangeListener("Text", dirty); m_jNotes.addPropertyChangeListener("Text", dirty); m_jNotes.addEditorKeys(m_jKeys); writeValueEOF(); } @Override public void writeValueEOF() { m_sId = null; m_sPaymentId = null; datenew = null; setReasonTotal(null, null); m_jreason.setEnabled(false); jTotal.setEnabled(false); // JG Added July 2011 m_sNotes = null; m_jNotes.setEnabled(false); } @Override public void writeValueInsert() { m_sId = null; m_sPaymentId = null; datenew = null; setReasonTotal("cashin", null); m_jreason.setEnabled(true); jTotal.setEnabled(true); jTotal.activate(); // JG Added July 2011 m_sNotes = null; m_jNotes.setEnabled(true); m_jNotes.setText(m_sNotes); } @Override public void writeValueDelete(Object value) { Object[] payment = (Object[]) value; m_sId = (String) payment[0]; datenew = (Date) payment[2]; m_sPaymentId = (String) payment[3]; setReasonTotal(payment[4], payment[5]); m_jreason.setEnabled(false); jTotal.setEnabled(false); // JG Added July 2011 m_sNotes = (String) payment[6]; m_jNotes.setEnabled(false); } @Override public void writeValueEdit(Object value) { Object[] payment = (Object[]) value; m_sId = (String) payment[0]; datenew = (Date) payment[2]; m_sPaymentId = (String) payment[3]; setReasonTotal(payment[4], payment[5]); m_jreason.setEnabled(false); jTotal.setEnabled(false); jTotal.activate(); // JG Added July 2011 m_sNotes = (String) payment[6]; m_jNotes.setEnabled(false); } @Override public Object createValue() throws BasicException { //JG Modified Array + 1 - July 2011 Object[] payment = new Object[7]; payment[0] = m_sId == null ? UUID.randomUUID().toString() : m_sId; payment[1] = m_App.getActiveCashIndex(); payment[2] = datenew == null ? new Date() : datenew; payment[3] = m_sPaymentId == null ? UUID.randomUUID().toString() : m_sPaymentId; payment[4] = m_ReasonModel.getSelectedKey(); PaymentReason reason = (PaymentReason) m_ReasonModel.getSelectedItem(); Double dtotal = jTotal.getDoubleValue(); payment[5] = reason == null ? dtotal : reason.addSignum(dtotal); // JG Added July 2011 String snotes = ""; m_sNotes = m_jNotes.getText(); payment[6] = m_sNotes == null ? snotes : m_sNotes; return payment; } @Override public Component getComponent() { return this; } @Override public void refresh() { } private void setReasonTotal(Object reasonfield, Object totalfield) { m_ReasonModel.setSelectedKey(reasonfield); PaymentReason reason = (PaymentReason) m_ReasonModel.getSelectedItem(); if (reason == null) { jTotal.setDoubleValue((Double) totalfield); } else { jTotal.setDoubleValue(reason.positivize((Double) totalfield)); } } private static abstract class PaymentReason implements IKeyed { private String m_sKey; private String m_sText; public PaymentReason(String key, String text) { m_sKey = key; m_sText = text; } @Override public Object getKey() { return m_sKey; } public abstract Double positivize(Double d); public abstract Double addSignum(Double d); @Override public String toString() { return m_sText; } } private static class PaymentReasonPositive extends PaymentReason { public PaymentReasonPositive(String key, String text) { super(key, text); } @Override public Double positivize(Double d) { return d; } @Override public Double addSignum(Double d) { if (d == null) { return null; } else if (d.doubleValue() < 0.0) { return new Double(-d.doubleValue()); } else { return d; } } } private static class PaymentReasonNegative extends PaymentReason { public PaymentReasonNegative(String key, String text) { super(key, text); } @Override public Double positivize(Double d) { return d == null ? null : new Double(-d.doubleValue()); } @Override public Double addSignum(Double d) { if (d == null) { return null; } else if (d.doubleValue() > 0.0) { return new Double(-d.doubleValue()); } else { return d; } } } /** 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() { jPanel3 = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); m_jreason = new javax.swing.JComboBox(); jLabel3 = new javax.swing.JLabel(); jTotal = new com.openbravo.editor.JEditorCurrency(); m_jNotes = new com.openbravo.editor.JEditorString(); jPanel2 = new javax.swing.JPanel(); m_jKeys = new com.openbravo.editor.JEditorKeys(); setLayout(new java.awt.BorderLayout()); jLabel5.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel5.setText(AppLocal.getIntString("label.paymentreason")); // NOI18N m_jreason.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N m_jreason.setFocusable(false); jLabel3.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N jLabel3.setText(AppLocal.getIntString("label.paymenttotal")); // NOI18N jTotal.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N m_jNotes.setFont(new java.awt.Font("Arial", 0, 12)); // NOI18N 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() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(m_jNotes, javax.swing.GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE) .addComponent(m_jreason, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jTotal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(16, Short.MAX_VALUE)) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(m_jreason, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(m_jNotes, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(266, Short.MAX_VALUE)) ); add(jPanel3, java.awt.BorderLayout.CENTER); jPanel2.setLayout(new java.awt.BorderLayout()); m_jKeys.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { m_jKeysPropertyChange(evt); } }); jPanel2.add(m_jKeys, java.awt.BorderLayout.NORTH); add(jPanel2, java.awt.BorderLayout.LINE_END); }// </editor-fold>//GEN-END:initComponents private void m_jKeysPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_m_jKeysPropertyChange }//GEN-LAST:event_m_jKeysPropertyChange // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel5; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private com.openbravo.editor.JEditorCurrency jTotal; private com.openbravo.editor.JEditorKeys m_jKeys; private com.openbravo.editor.JEditorString m_jNotes; private javax.swing.JComboBox m_jreason; // End of variables declaration//GEN-END:variables }