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.PaidTransactionController; import devopsdistilled.operp.client.account.panes.controllers.PaidTransactionPaneController; import devopsdistilled.operp.client.account.panes.models.observers.PaidTransactionPaneModelObserver; import devopsdistilled.operp.client.party.models.observers.VendorModelObserver; import devopsdistilled.operp.server.data.entity.account.PaidTransaction; import devopsdistilled.operp.server.data.entity.party.Vendor; public class PaidTransactionPane extends EntityPane<PaidTransaction, PaidTransactionController, PaidTransactionPaneController> implements PaidTransactionPaneModelObserver, VendorModelObserver { @Inject private PaidTransactionController paidTransactionController; private final JPanel pane; private final JTextField balanceField; private final JTextField transactionIdField; private final JComboBox<Vendor> vendorCombo; private final JTextField amountField; private final JLabel lblTransactionId; private JPanel opBtnPanel; private final JLabel lblNote; private final JTextField noteField; public PaidTransactionPane() { 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 lblToVendor = new JLabel("To Vendor"); pane.add(lblToVendor, "cell 0 1,alignx trailing"); vendorCombo = new JComboBox<>(); vendorCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED) { Vendor selVendor = (Vendor) e.getItem(); getController().getModel().getEntity() .setAccount(selVendor.getAccount()); balanceField.setText(getController().getModel().getEntity() .getAccount().getBalance().toString()); } } }); vendorCombo.setMinimumSize(new Dimension(100, 25)); pane.add(vendorCombo, "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(PaidTransaction paidTransaction, EntityOperation entityOperation) { if (EntityOperation.Create == entityOperation) { getController().getModel().setTitle("Pay Vendor"); opBtnPanel = setBtnPanel(createOpPanel, opBtnPanel); lblTransactionId.setVisible(false); transactionIdField.setVisible(false); } else if (EntityOperation.Edit == entityOperation) { getController().getModel().setTitle("Edit Paid Transaction"); opBtnPanel = setBtnPanel(editOpPanel, opBtnPanel); transactionIdField.setText(paidTransaction.getTransactionId() .toString()); } else if (EntityOperation.Details == entityOperation) { getController().getModel().setTitle("Paid Payment Details"); opBtnPanel = setBtnPanel(detailsOpPanel, opBtnPanel); transactionIdField.setText(paidTransaction.getTransactionId() .toString()); amountField.setEditable(false); noteField.setEditable(false); } amountField.setText(paidTransaction.getAmount().toString()); noteField.setText(paidTransaction.getNote()); } @Override public void resetComponents() { vendorCombo.setSelectedItem(null); transactionIdField.setVisible(true); lblTransactionId.setVisible(true); amountField.setEditable(true); noteField.setEditable(true); balanceField.setText("0"); amountField.setText("0"); } @Override public PaidTransactionController getEntityController() { return paidTransactionController; } @Override public JComponent getPane() { return pane; } @Override public void updateVendors(List<Vendor> vendors) { Vendor prevSelected = (Vendor) vendorCombo.getSelectedItem(); vendorCombo.removeAllItems(); for (Vendor vendor : vendors) { vendorCombo.addItem(vendor); if (prevSelected != null) if (prevSelected.compareTo(vendor) == 0) vendorCombo.setSelectedItem(vendor); } } }