package devopsdistilled.operp.client.business.sales.panes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.List;
import javax.inject.Inject;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import devopsdistilled.operp.client.abstracts.EntityOperation;
import devopsdistilled.operp.client.abstracts.EntityPane;
import devopsdistilled.operp.client.business.sales.controllers.SaleController;
import devopsdistilled.operp.client.business.sales.panes.controllers.SalePaneController;
import devopsdistilled.operp.client.business.sales.panes.models.observers.SalePaneModelObserver;
import devopsdistilled.operp.client.exceptions.EntityValidationException;
import devopsdistilled.operp.client.party.controllers.CustomerController;
import devopsdistilled.operp.client.party.models.observers.CustomerModelObserver;
import devopsdistilled.operp.server.data.entity.business.Sale;
import devopsdistilled.operp.server.data.entity.party.Customer;
public class SalePane extends
EntityPane<Sale, SaleController, SalePaneController> implements
SalePaneModelObserver, CustomerModelObserver {
@Inject
private SaleController saleController;
@Inject
private CustomerController customerController;
private final JPanel pane;
private final JComboBox<Customer> customerCombo;
private JPanel saleDescPanel;
private final JButton btnCancel;
private final JButton btnSale;
public SalePane() {
pane = new JPanel();
pane.setLayout(new MigLayout("", "[][grow]", "[][][][][]"));
JLabel lblCustomer = new JLabel("Customer");
pane.add(lblCustomer, "cell 0 0,alignx trailing");
customerCombo = new JComboBox<>();
customerCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED)
getController().getModel().getEntity()
.setParty((Customer) e.getItem());
}
});
pane.add(customerCombo, "flowx,cell 1 0,growx");
JButton btnNewCustomer = new JButton("New Customer");
btnNewCustomer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
customerController.create();
}
});
pane.add(btnNewCustomer, "cell 1 0");
saleDescPanel = new JPanel();
pane.add(saleDescPanel, "cell 0 2 2 1,grow");
saleDescPanel.setLayout(new MigLayout("", "[]", "[]"));
btnCancel = new JButton("Cancel");
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
pane.add(btnCancel, "flowx,cell 1 4,alignx right");
btnSale = new JButton("Sale");
btnSale.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
getController().validate();
Sale sale = getController().save();
dispose();
saleController.showDetails(sale);
} catch (EntityValidationException e1) {
JOptionPane.showMessageDialog(getPane(), e1.getMessage());
}
}
});
pane.add(btnSale, "cell 1 4,alignx right");
}
@Override
public void resetComponents() {
// TODO Auto-generated method stub
}
@Override
public SaleController getEntityController() {
return saleController;
}
@Override
public JComponent getPane() {
return pane;
}
@Override
public void updateEntity(Sale sale, EntityOperation entityOperation) {
if (EntityOperation.Create == entityOperation) {
getController().getModel().setTitle("New Sale");
}
}
public void setSaleDescpanel(JPanel saleDescPanel) {
MigLayout layout = (MigLayout) pane.getLayout();
Object constraints = layout.getComponentConstraints(this.saleDescPanel);
pane.remove(this.saleDescPanel);
pane.add(saleDescPanel, constraints);
this.saleDescPanel = saleDescPanel;
pane.validate();
}
@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);
}
}
}