/* * CardView.java * * Created on August 25, 2006, 1:39 PM */ package com.floreantpos.ui.views; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JTextField; import javax.swing.border.TitledBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import com.floreantpos.main.Application; import com.floreantpos.model.CreditCardTransaction; import com.floreantpos.model.DebitCardTransaction; import com.floreantpos.swing.DoubleDocument; import com.floreantpos.ui.dialog.POSMessageDialog; import com.floreantpos.ui.views.order.RootView; /** * * @author MShahriar */ public class CardPaymentView extends PaymentView { public final static int CARD_TYPE_CREDIT = 0; public final static int CARD_TYPE_DEBIT = 1; public final static String MASTER_CARD = "MASTER_CARD"; public final static String VISA_CARD = "VISA_CARD"; public final static String EMEX_CARD = "EMEX_CARD"; public final static String DISCOVER_CARD = "DISCOVER_CARD"; private int cardType = CARD_TYPE_CREDIT; private String whichCard = MASTER_CARD; private double gratuityAmount; /** Creates new form CardView */ public CardPaymentView() { initComponents(); DoubleDocument gratuityDocument = new DoubleDocument(); gratuityDocument.addDocumentListener(new DocumentListener() { void updatePayAmount() { double cardAmount = 0; double gratuity = 0; try { gratuity = Double.parseDouble(tfGratuityAmount.getText()); } catch (Exception x) { } cardAmount = getDueAmount(); tfCardAmount.setText(Application.formatNumber(cardAmount + gratuity)); } public void insertUpdate(DocumentEvent e) { updatePayAmount(); } public void removeUpdate(DocumentEvent e) { updatePayAmount(); } public void changedUpdate(DocumentEvent e) { updatePayAmount(); } }); tfGratuityAmount.setDocument(gratuityDocument); tfCardAmount.setDocument(new DoubleDocument()); } Dimension preferredSize = new Dimension(380, 100); public Dimension getPreferredSize() { return preferredSize; } /** 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() { java.awt.GridBagConstraints gridBagConstraints; buttonGroup1 = new javax.swing.ButtonGroup(); transparentPanel3 = new com.floreantpos.swing.TransparentPanel(); transparentPanel5 = new com.floreantpos.swing.TransparentPanel(); btnChangePMethod = new com.floreantpos.swing.PosButton(); btnCancel = new com.floreantpos.swing.PosButton(); btnSettle = new com.floreantpos.swing.PosButton(); transparentPanel8 = new com.floreantpos.swing.TransparentPanel(); transparentPanel9 = new com.floreantpos.swing.TransparentPanel(); posButton1 = new com.floreantpos.swing.PosButton(); posButton2 = new com.floreantpos.swing.PosButton(); posButton3 = new com.floreantpos.swing.PosButton(); posButton4 = new com.floreantpos.swing.PosButton(); posButton5 = new com.floreantpos.swing.PosButton(); posButton6 = new com.floreantpos.swing.PosButton(); posButton9 = new com.floreantpos.swing.PosButton(); posButton8 = new com.floreantpos.swing.PosButton(); posButton7 = new com.floreantpos.swing.PosButton(); posButton10 = new com.floreantpos.swing.PosButton(); posButton11 = new com.floreantpos.swing.PosButton(); posButton12 = new com.floreantpos.swing.PosButton(); transparentPanel10 = new com.floreantpos.swing.TransparentPanel(); btnMasterCard = new com.floreantpos.swing.POSToggleButton(); btnVisa = new com.floreantpos.swing.POSToggleButton(); btnEmEx = new com.floreantpos.swing.POSToggleButton(); btnDiscover = new com.floreantpos.swing.POSToggleButton(); transparentPanel7 = new com.floreantpos.swing.TransparentPanel(); transparentPanel1 = new com.floreantpos.swing.TransparentPanel(); jLabel1 = new javax.swing.JLabel(); tfGratuityAmount = new javax.swing.JTextField(); lblCSymbol1 = new javax.swing.JLabel(); transparentPanel4 = new com.floreantpos.swing.TransparentPanel(); jLabel3 = new javax.swing.JLabel(); tfAuthorizationCode = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); transparentPanel2 = new com.floreantpos.swing.TransparentPanel(); jLabel2 = new javax.swing.JLabel(); tfCardAmount = new javax.swing.JTextField(); lblCSymbol2 = new javax.swing.JLabel(); setLayout(new java.awt.BorderLayout(0, 5)); setBorder(javax.swing.BorderFactory.createTitledBorder(null, "TITLE", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION)); transparentPanel3.setLayout(new java.awt.BorderLayout()); add(transparentPanel3, java.awt.BorderLayout.WEST); transparentPanel5.setLayout(new java.awt.GridLayout(1, 0, 5, 5)); transparentPanel5.setPreferredSize(new java.awt.Dimension(100, 60)); btnChangePMethod.setText("<html><body><p align='center'>CHANGE PAYMENT METHOD</p></body></html>"); btnChangePMethod.setFocusable(false); btnChangePMethod.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnChangePMethodActionPerformed(evt); } }); transparentPanel5.add(btnChangePMethod); btnCancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/cancel_32.png"))); btnCancel.setText("CANCEL"); btnCancel.setFocusable(false); btnCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnCancelActionPerformed(evt); } }); transparentPanel5.add(btnCancel); btnSettle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/settle_ticket_32.png"))); btnSettle.setText("SETTLE"); btnSettle.setFocusable(false); btnSettle.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnSettleActionPerformed(evt); } }); transparentPanel5.add(btnSettle); add(transparentPanel5, java.awt.BorderLayout.SOUTH); transparentPanel8.setLayout(new java.awt.GridBagLayout()); transparentPanel9.setLayout(new java.awt.GridLayout(0, 3, 5, 5)); posButton1.setAction(calAction); posButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/7_32.png"))); posButton1.setActionCommand("7"); posButton1.setFocusable(false); transparentPanel9.add(posButton1); posButton2.setAction(calAction); posButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/8_32.png"))); posButton2.setActionCommand("8"); posButton2.setFocusable(false); transparentPanel9.add(posButton2); posButton3.setAction(calAction); posButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/9_32.png"))); posButton3.setActionCommand("9"); posButton3.setFocusable(false); transparentPanel9.add(posButton3); posButton4.setAction(calAction); posButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/4_32.png"))); posButton4.setActionCommand("4"); posButton4.setFocusable(false); transparentPanel9.add(posButton4); posButton5.setAction(calAction); posButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/5_32.png"))); posButton5.setActionCommand("5"); posButton5.setFocusable(false); transparentPanel9.add(posButton5); posButton6.setAction(calAction); posButton6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/6_32.png"))); posButton6.setActionCommand("6"); posButton6.setFocusable(false); transparentPanel9.add(posButton6); posButton9.setAction(calAction); posButton9.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/1_32.png"))); posButton9.setActionCommand("1"); posButton9.setFocusable(false); transparentPanel9.add(posButton9); posButton8.setAction(calAction); posButton8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/2_32.png"))); posButton8.setActionCommand("2"); posButton8.setFocusable(false); transparentPanel9.add(posButton8); posButton7.setAction(calAction); posButton7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/3_32.png"))); posButton7.setActionCommand("3"); posButton7.setFocusable(false); transparentPanel9.add(posButton7); posButton10.setAction(calAction); posButton10.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/dot_32.png"))); posButton10.setActionCommand("."); posButton10.setFocusable(false); transparentPanel9.add(posButton10); posButton11.setAction(calAction); posButton11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/0_32.png"))); posButton11.setActionCommand("0"); posButton11.setFocusable(false); transparentPanel9.add(posButton11); posButton12.setAction(calAction); posButton12.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/clear_32.png"))); posButton12.setText("CLEAR"); posButton12.setFocusable(false); transparentPanel9.add(posButton12); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 0); transparentPanel8.add(transparentPanel9, gridBagConstraints); transparentPanel10.setLayout(new java.awt.GridLayout(0, 1, 5, 5)); buttonGroup1.add(btnMasterCard); btnMasterCard.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/master_card.PNG"))); btnMasterCard.setSelected(true); btnMasterCard.setActionCommand("MASTER_CARD"); btnMasterCard.setPreferredSize(new java.awt.Dimension(90, 0)); transparentPanel10.add(btnMasterCard); buttonGroup1.add(btnVisa); btnVisa.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/visa_card.PNG"))); btnVisa.setActionCommand("VISA_CARD"); btnVisa.setPreferredSize(new java.awt.Dimension(90, 0)); transparentPanel10.add(btnVisa); buttonGroup1.add(btnEmEx); btnEmEx.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/am_ex_card.PNG"))); btnEmEx.setActionCommand("EMEX_CARD"); btnEmEx.setPreferredSize(new java.awt.Dimension(90, 0)); transparentPanel10.add(btnEmEx); buttonGroup1.add(btnDiscover); btnDiscover.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/discover_card.PNG"))); btnDiscover.setActionCommand("DISCOVER_CARD"); btnDiscover.setPreferredSize(new java.awt.Dimension(90, 0)); transparentPanel10.add(btnDiscover); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0); transparentPanel8.add(transparentPanel10, gridBagConstraints); transparentPanel7.setLayout(new java.awt.GridLayout(0, 1, 5, 5)); transparentPanel1.setLayout(new java.awt.BorderLayout(5, 5)); transparentPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("")); jLabel1.setText("Gratuity Amount"); transparentPanel1.add(jLabel1, java.awt.BorderLayout.NORTH); tfGratuityAmount.setFont(new java.awt.Font("Tahoma", 1, 12)); tfGratuityAmount.setText("0"); transparentPanel1.add(tfGratuityAmount, java.awt.BorderLayout.CENTER); lblCSymbol1.setText(Application.getCurrencySymbol()); transparentPanel1.add(lblCSymbol1, java.awt.BorderLayout.WEST); transparentPanel7.add(transparentPanel1); transparentPanel4.setLayout(new java.awt.BorderLayout(5, 5)); transparentPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("")); jLabel3.setText("Authorization Code"); transparentPanel4.add(jLabel3, java.awt.BorderLayout.NORTH); tfAuthorizationCode.setFont(new java.awt.Font("Tahoma", 1, 12)); tfAuthorizationCode.setText("0"); transparentPanel4.add(tfAuthorizationCode, java.awt.BorderLayout.CENTER); jLabel4.setText(" "); transparentPanel4.add(jLabel4, java.awt.BorderLayout.WEST); transparentPanel7.add(transparentPanel4); transparentPanel2.setLayout(new java.awt.BorderLayout(5, 5)); transparentPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("")); jLabel2.setText("Amount Charged to Card"); transparentPanel2.add(jLabel2, java.awt.BorderLayout.NORTH); tfCardAmount.setFont(new java.awt.Font("Tahoma", 1, 12)); tfCardAmount.setText("0"); transparentPanel2.add(tfCardAmount, java.awt.BorderLayout.CENTER); lblCSymbol2.setText(Application.getCurrencySymbol()); transparentPanel2.add(lblCSymbol2, java.awt.BorderLayout.WEST); transparentPanel7.add(transparentPanel2); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); transparentPanel8.add(transparentPanel7, gridBagConstraints); add(transparentPanel8, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents private void btnSettleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSettleActionPerformed try { try { String gratuity = tfGratuityAmount.getText(); if (gratuity == null || gratuity.trim().equals("")) { gratuityAmount = 0; } else { gratuityAmount = Double.parseDouble(gratuity); } } catch (NumberFormatException x) { POSMessageDialog.showError("Gratuity amount is not valid"); return; } double tenderedAmount = 0; try { tenderedAmount = Double.parseDouble(tfCardAmount.getText()); } catch (NumberFormatException x) { POSMessageDialog.showError("Amount is not valid"); return; } tenderedAmount = tenderedAmount - gratuityAmount; if (tenderedAmount < 0) { POSMessageDialog.showError("Insufficient amount"); return; } String authorizationCode = tfAuthorizationCode.getText(); if (getCardType() == CARD_TYPE_CREDIT) { settleTickets(tenderedAmount, gratuityAmount, new CreditCardTransaction(), getWhichCard(), authorizationCode); } if (getCardType() == CARD_TYPE_DEBIT) { settleTickets(tenderedAmount, gratuityAmount, new DebitCardTransaction(), getWhichCard(), authorizationCode); } } catch (Exception e) { POSMessageDialog.showError("An unexpected error has occured, you may need to restart the application", e); } }//GEN-LAST:event_btnSettleActionPerformed private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed RootView.getInstance().showView(SwitchboardView.VIEW_NAME); }//GEN-LAST:event_btnCancelActionPerformed private void btnChangePMethodActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnChangePMethodActionPerformed changePaymentMethod(); }//GEN-LAST:event_btnChangePMethodActionPerformed private JTextField getFocusedTextField() { if (tfGratuityAmount.hasFocus()) { return tfGratuityAmount; } if (tfAuthorizationCode.hasFocus()) { return tfAuthorizationCode; } if (tfCardAmount.hasFocus()) { return tfCardAmount; } tfGratuityAmount.requestFocus(); return tfGratuityAmount; } private Action calAction = new AbstractAction() { public void actionPerformed(ActionEvent e) { JTextField tf = getFocusedTextField(); String s = e.getActionCommand(); if (s.equals("CLEAR")) { tf.setText("0"); } else if (s.equals(".")) { if (tf == tfAuthorizationCode) { return; } if (tf.getText().indexOf('.') < 0) { tf.setText(tf.getText() + "."); } } else { String string = tf.getText(); int index = string.indexOf('.'); if (index < 0) { double value = 0; try { value = Double.parseDouble(string); } catch (NumberFormatException x) { Toolkit.getDefaultToolkit().beep(); } if (value == 0) { tf.setText(s); } else { tf.setText(string + s); } } else { tf.setText(string + s); } } if (tf == tfGratuityAmount) { double gAmount = 0; double amount = getDueAmount(); try { gAmount = Double.parseDouble(tfGratuityAmount.getText()); } catch (NumberFormatException x) { Toolkit.getDefaultToolkit().beep(); return; } tfCardAmount.setText(Application.formatNumber(amount + gAmount)); } } }; // Variables declaration - do not modify//GEN-BEGIN:variables private com.floreantpos.swing.PosButton btnCancel; private com.floreantpos.swing.PosButton btnChangePMethod; private com.floreantpos.swing.POSToggleButton btnDiscover; private com.floreantpos.swing.POSToggleButton btnEmEx; private com.floreantpos.swing.POSToggleButton btnMasterCard; private com.floreantpos.swing.PosButton btnSettle; private com.floreantpos.swing.POSToggleButton btnVisa; private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel lblCSymbol1; private javax.swing.JLabel lblCSymbol2; private com.floreantpos.swing.PosButton posButton1; private com.floreantpos.swing.PosButton posButton10; private com.floreantpos.swing.PosButton posButton11; private com.floreantpos.swing.PosButton posButton12; private com.floreantpos.swing.PosButton posButton2; private com.floreantpos.swing.PosButton posButton3; private com.floreantpos.swing.PosButton posButton4; private com.floreantpos.swing.PosButton posButton5; private com.floreantpos.swing.PosButton posButton6; private com.floreantpos.swing.PosButton posButton7; private com.floreantpos.swing.PosButton posButton8; private com.floreantpos.swing.PosButton posButton9; private javax.swing.JTextField tfAuthorizationCode; private javax.swing.JTextField tfCardAmount; private javax.swing.JTextField tfGratuityAmount; private com.floreantpos.swing.TransparentPanel transparentPanel1; private com.floreantpos.swing.TransparentPanel transparentPanel10; private com.floreantpos.swing.TransparentPanel transparentPanel2; private com.floreantpos.swing.TransparentPanel transparentPanel3; private com.floreantpos.swing.TransparentPanel transparentPanel4; private com.floreantpos.swing.TransparentPanel transparentPanel5; private com.floreantpos.swing.TransparentPanel transparentPanel7; private com.floreantpos.swing.TransparentPanel transparentPanel8; private com.floreantpos.swing.TransparentPanel transparentPanel9; // End of variables declaration//GEN-END:variables public int getCardType() { return cardType; } public void setCardType(int cardType) { this.cardType = cardType; if (cardType == CARD_TYPE_DEBIT) { btnEmEx.setVisible(false); btnDiscover.setVisible(false); TitledBorder titledBorder = new TitledBorder("Debit Card Transaction"); titledBorder.setTitleJustification(TitledBorder.CENTER); setBorder(titledBorder); } else { btnEmEx.setVisible(true); btnDiscover.setVisible(true); TitledBorder titledBorder = new TitledBorder("Credit Card Transaction"); titledBorder.setTitleJustification(TitledBorder.CENTER); setBorder(titledBorder); } } public String getWhichCard() { return whichCard; } public void setWhichCard(String whichCard) { this.whichCard = whichCard; } @Override public void updateView() { tfCardAmount.setText(Application.formatNumber(getDueAmount())); tfGratuityAmount.setText(Application.formatNumber(getTotalGratuity())); } // @Override // public void setTicket(Ticket ticket) { // super.setTicket(ticket); // // if (ticket != null) { // tfCardAmount.setText(Application.formatNumber(ticket.getTotalAmount())); // Gratuity gratuity = ticket.getGratuity(); // // if(gratuity != null) { // tfGratuityAmount.setText(Application.formatNumber(gratuity.getAmount())); // } // } // else { // tfCardAmount.setText("0"); // tfGratuityAmount.setText("0"); // } // } }