package devopsdistilled.operp.client.account.panes; import java.awt.Dimension; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.List; import javax.inject.Inject; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import net.miginfocom.swing.MigLayout; import devopsdistilled.operp.client.abstracts.EntityOperation; import devopsdistilled.operp.client.abstracts.EntityPane; import devopsdistilled.operp.client.account.controllers.ReceivedTransactionController; import devopsdistilled.operp.client.account.panes.controllers.ReceivedTransactionPaneController; import devopsdistilled.operp.client.account.panes.models.observers.ReceivedTransactionPaneModelObserver; import devopsdistilled.operp.client.party.models.observers.CustomerModelObserver; import devopsdistilled.operp.server.data.entity.account.ReceivedTransaction; import devopsdistilled.operp.server.data.entity.party.Customer; public class ReceivedTransactionPane extends EntityPane<ReceivedTransaction, ReceivedTransactionController, ReceivedTransactionPaneController> implements ReceivedTransactionPaneModelObserver, CustomerModelObserver { @Inject private ReceivedTransactionController receivedTransactionController; private final JPanel pane; private final JTextField balanceField; private final JTextField transactionIdField; private final JComboBox<Customer> customerCombo; private final JTextField amountField; private final JLabel lblTransactionId; private JPanel opBtnPanel; private final JLabel lblNote; private final JTextField noteField; public ReceivedTransactionPane() { pane = new JPanel(); pane.setLayout(new MigLayout("", "[][grow]", "[][][][][][][]")); lblTransactionId = new JLabel("Transaction ID"); pane.add(lblTransactionId, "cell 0 0,alignx trailing"); transactionIdField = new JTextField(); transactionIdField.setEditable(false); pane.add(transactionIdField, "cell 1 0,growx"); transactionIdField.setColumns(10); JLabel lblFromCustomer = new JLabel("From Customer"); pane.add(lblFromCustomer, "cell 0 1,alignx trailing"); customerCombo = new JComboBox<>(); customerCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { Customer selCustomer = (Customer) e.getItem(); getController().getModel().getEntity() .setAccount(selCustomer.getAccount()); balanceField.setText(getController().getModel().getEntity() .getAccount().getBalance().toString()); } } }); customerCombo.setMinimumSize(new Dimension(100, 25)); pane.add(customerCombo, "cell 1 1,growx"); JLabel lblBalance = new JLabel("Due Balance"); pane.add(lblBalance, "flowx,cell 1 2"); balanceField = new JTextField(); balanceField.setEditable(false); pane.add(balanceField, "cell 1 2"); balanceField.setColumns(10); JLabel lblTransactionAmount = new JLabel("Transaction Amount"); pane.add(lblTransactionAmount, "flowx,cell 1 4"); amountField = new JTextField(); amountField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { try { Double amount = Double.parseDouble(amountField.getText() .trim()); getController().getModel().getEntity().setAmount(amount); } catch (NumberFormatException e1) { JOptionPane.showMessageDialog(getPane(), "Amount Field must be a numeric value"); } } }); amountField.setHorizontalAlignment(SwingConstants.TRAILING); pane.add(amountField, "cell 1 4,alignx right"); amountField.setColumns(10); lblNote = new JLabel("Note"); pane.add(lblNote, "flowx,cell 1 5"); noteField = new JTextField(); noteField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { getController().getModel().getEntity() .setNote(noteField.getText().trim()); } }); pane.add(noteField, "cell 1 5"); noteField.setColumns(10); opBtnPanel = new JPanel(); pane.add(opBtnPanel, "cell 1 6,grow"); opBtnPanel.setLayout(new MigLayout("", "[][][][]", "[]")); } @Override public void updateEntity(ReceivedTransaction receivedTransaction, EntityOperation entityOperation) { if (EntityOperation.Create == entityOperation) { getController().getModel().setTitle("Receive Payment"); opBtnPanel = setBtnPanel(createOpPanel, opBtnPanel); lblTransactionId.setVisible(false); transactionIdField.setVisible(false); } else if (EntityOperation.Edit == entityOperation) { getController().getModel().setTitle( "Edit Payment Received Transaction"); opBtnPanel = setBtnPanel(editOpPanel, opBtnPanel); transactionIdField.setText(receivedTransaction.getTransactionId() .toString()); } else if (EntityOperation.Details == entityOperation) { getController().getModel().setTitle("Received Payment Details"); opBtnPanel = setBtnPanel(detailsOpPanel, opBtnPanel); transactionIdField.setText(receivedTransaction.getTransactionId() .toString()); amountField.setEditable(false); noteField.setEditable(false); } amountField.setText(receivedTransaction.getAmount().toString()); noteField.setText(receivedTransaction.getNote()); } @Override public void resetComponents() { customerCombo.setSelectedItem(null); transactionIdField.setVisible(true); lblTransactionId.setVisible(true); amountField.setEditable(true); noteField.setEditable(true); balanceField.setText("0"); amountField.setText("0"); } @Override public ReceivedTransactionController getEntityController() { return receivedTransactionController; } @Override public JComponent getPane() { return pane; } @Override public void updateCustomers(List<Customer> customers) { Customer prevSelected = (Customer) customerCombo.getSelectedItem(); customerCombo.removeAllItems(); for (Customer customer : customers) { customerCombo.addItem(customer); if (prevSelected != null) if (prevSelected.compareTo(customer) == 0) customerCombo.setSelectedItem(customer); } } }