package devopsdistilled.operp.client.business.purchases.panes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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.JButton;
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 net.miginfocom.swing.MigLayout;
import devopsdistilled.operp.client.abstracts.EntityOperation;
import devopsdistilled.operp.client.abstracts.EntityPane;
import devopsdistilled.operp.client.business.purchases.controllers.PurchaseDescRowController;
import devopsdistilled.operp.client.business.purchases.panes.controllers.PurchaseDescRowPaneController;
import devopsdistilled.operp.client.business.purchases.panes.models.observers.PurchaseDescRowPaneModelObserver;
import devopsdistilled.operp.client.items.controllers.ItemController;
import devopsdistilled.operp.client.items.models.observers.ItemModelObserver;
import devopsdistilled.operp.client.stock.controllers.WarehouseController;
import devopsdistilled.operp.client.stock.models.observers.WarehouseModelObserver;
import devopsdistilled.operp.server.data.entity.business.PurchaseDescRow;
import devopsdistilled.operp.server.data.entity.items.Item;
import devopsdistilled.operp.server.data.entity.stock.Warehouse;
public class PurchaseDescRowPane
extends
EntityPane<PurchaseDescRow, PurchaseDescRowController, PurchaseDescRowPaneController>
implements PurchaseDescRowPaneModelObserver, ItemModelObserver,
WarehouseModelObserver {
@Inject
private ItemController itemController;
@Inject
private WarehouseController warehouseController;
private final JPanel pane;
private final JTextField priceField;
private final JTextField quantityField;
private final JComboBox<Item> itemCombo;
private final JButton btnNewItem;
private final JLabel lblToWarehouse;
private final JComboBox<Warehouse> warehouseCombo;
private final JButton btnNewWarehouse;
public PurchaseDescRowPane() {
pane = new JPanel();
pane.setLayout(new MigLayout("", "[][grow]", "[][][][][][]"));
JLabel lblItem = new JLabel("Item");
pane.add(lblItem, "cell 0 0,alignx trailing");
itemCombo = new JComboBox<>();
itemCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
Item selItem = (Item) e.getItem();
getController().getModel().getEntity().setItem(selItem);
}
}
});
pane.add(itemCombo, "cell 1 0,growx");
btnNewItem = new JButton("New Item");
btnNewItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
itemController.create();
}
});
pane.add(btnNewItem, "cell 1 1,alignx right");
lblToWarehouse = new JLabel("To Warehouse");
pane.add(lblToWarehouse, "cell 0 2,alignx trailing");
warehouseCombo = new JComboBox<>();
warehouseCombo.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
Warehouse warehouse = (Warehouse) e.getItem();
getController().getModel().getEntity()
.setWarehouse(warehouse);
}
}
});
pane.add(warehouseCombo, "cell 1 2,growx");
btnNewWarehouse = new JButton("New Warehouse");
btnNewWarehouse.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
warehouseController.create();
}
});
pane.add(btnNewWarehouse, "cell 1 3,alignx right");
JLabel lblPrice = new JLabel("Price");
pane.add(lblPrice, "cell 0 4,alignx trailing");
priceField = new JTextField();
priceField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
try {
Double price = Double.parseDouble(priceField.getText()
.trim());
getController().getModel().getEntity().setRate(price);
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(getPane(),
"Price Field must be numeric value");
priceField.setText("0");
getController().getModel().getEntity().setRate(0.0);
}
}
});
pane.add(priceField, "cell 1 4,growx");
priceField.setColumns(10);
JLabel lblQuantity = new JLabel("Quantity");
pane.add(lblQuantity, "cell 0 5,alignx trailing");
quantityField = new JTextField();
quantityField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
try {
Long quantity = Long.parseLong(quantityField.getText()
.trim());
getController().getModel().getEntity()
.setQuantity(quantity);
} catch (NumberFormatException e1) {
JOptionPane.showMessageDialog(getPane(),
"Quantity Field must be numeric value");
quantityField.setText("0");
getController().getModel().getEntity().setQuantity(0L);
}
}
});
pane.add(quantityField, "cell 1 5,growx");
quantityField.setColumns(10);
}
@Override
public void resetComponents() {
// TODO Auto-generated method stub
itemCombo.setSelectedItem(null);
quantityField.setText("");
priceField.setText("");
}
@Override
public PurchaseDescRowController getEntityController() {
// TODO Auto-generated method stub
return null;
}
@Override
public JComponent getPane() {
return pane;
}
@Override
public void updateEntity(PurchaseDescRow purchaseDescRow,
EntityOperation entityOperation) {
if (EntityOperation.Create == entityOperation) {
} else if (EntityOperation.Edit == entityOperation) {
itemCombo.addItem(purchaseDescRow.getItem());
priceField.setText(purchaseDescRow.getRate().toString());
quantityField.setText(purchaseDescRow.getQuantity().toString());
}
}
@Override
public void updateItems(List<Item> items) {
Item prevSelected = (Item) itemCombo.getSelectedItem();
itemCombo.removeAllItems();
for (Item item : items) {
itemCombo.addItem(item);
if (prevSelected != null)
if (prevSelected.compareTo(item) == 0)
itemCombo.setSelectedItem(item);
}
}
@Override
public void updateWarehouses(List<Warehouse> warehouses) {
Warehouse prevSelected = (Warehouse) warehouseCombo.getSelectedItem();
warehouseCombo.removeAllItems();
for (Warehouse warehouse : warehouses) {
warehouseCombo.addItem(warehouse);
if (prevSelected != null)
if (prevSelected.compareTo(warehouse) == 0)
warehouseCombo.setSelectedItem(warehouse);
}
}
}