/*
* Created by JFormDesigner on Tue Sep 04 16:11:31 CEST 2012
*/
package op.allowance;
import com.jgoodies.forms.factories.CC;
import com.jgoodies.forms.layout.FormLayout;
import entity.Allowance;
import entity.info.*;
import op.OPDE;
import op.threads.DisplayMessage;
import op.tools.SYSCalendar;
import op.tools.SYSTools;
import org.apache.commons.collections.Closure;
import org.joda.time.LocalDate;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
/**
* @author Torsten Löhr
*/
public class PnlTX extends JPanel {
public static final String internalClassID = "admin.residents.cash.pnltx";
private Allowance tx;
private Closure afterChange;
// DecimalFormat cf = new DecimalFormat("######.00");
LocalDate min;
Component focusOwner = null;
public PnlTX(Allowance tx, Closure afterChange) {
super();
this.tx = tx;
this.afterChange = afterChange;
initComponents();
initPanel();
}
private void txtDateFocusLost(FocusEvent evt) {
SYSCalendar.handleDateFocusLost(evt, min, new LocalDate());
}
private void txtDateFocusGained(FocusEvent e) {
txtDate.selectAll();
focusOwner = e.getComponent();
}
private void txtTextFocusGained(FocusEvent e) {
txtText.selectAll();
focusOwner = e.getComponent();
}
private void txtCashFocusGained(FocusEvent e) {
txtCash.selectAll();
focusOwner = e.getComponent();
}
private void txtTextFocusLost(FocusEvent e) {
if (txtText.getText().trim().isEmpty()) {
txtText.setText(SYSTools.xx("admin.residents.cash.pnltx.txtText"));
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(SYSTools.xx("misc.msg.emptyentry")));
}
}
private void txtDateActionPerformed(ActionEvent e) {
txtText.requestFocus();
}
private void txtTextActionPerformed(ActionEvent e) {
txtCash.requestFocus();
}
private void txtCashActionPerformed(ActionEvent e) {
save();
afterChange.execute(tx);
tx = new Allowance((Resident) cmbResident.getSelectedItem());
txtDate.requestFocus();
}
private void save() {
tx.setPit(SYSCalendar.parseDate(txtDate.getText()));
tx.setAmount(checkCash(txtCash.getText(), BigDecimal.ONE));
tx.setText(txtText.getText().trim());
tx.setResident((Resident) cmbResident.getSelectedItem());
}
private void txtCashFocusLost(FocusEvent e) {
txtCash.setText(SYSTools.formatCurrency(checkCash(txtCash.getText(), BigDecimal.ONE)));
}
private void cmbResidentItemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
ResInfo firstStay = ResInfoTools.getFirstResinfo((Resident) e.getItem(), ResInfoTypeTools.getByType(ResInfoTypeTools.TYPE_STAY));
min = firstStay == null ? new LocalDate().dayOfMonth().withMinimumValue() : new LocalDate(firstStay.getFrom());
txtDate.setText(new LocalDate().toString("dd.MM.yyyy"));
}
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
lblResident = new JLabel();
cmbResident = new JComboBox();
lblDate = new JLabel();
txtDate = new JTextField();
lblText = new JLabel();
txtText = new JTextField();
lblCash = new JLabel();
txtCash = new JTextField();
//======== this ========
setLayout(new FormLayout(
"default, $lcgap, pref, $lcgap, 161dlu, $lcgap, default",
"default, $lgap, pref, 4*($lgap, default)"));
//---- lblResident ----
lblResident.setText("text");
lblResident.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblResident, CC.xy(3, 3));
//---- cmbResident ----
cmbResident.setFont(new Font("Arial", Font.PLAIN, 14));
cmbResident.setFocusable(false);
cmbResident.addItemListener(e -> cmbResidentItemStateChanged(e));
add(cmbResident, CC.xy(5, 3));
//---- lblDate ----
lblDate.setText("text");
lblDate.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblDate, CC.xy(3, 5));
//---- txtDate ----
txtDate.setFont(new Font("Arial", Font.PLAIN, 14));
txtDate.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
txtDateFocusGained(e);
}
@Override
public void focusLost(FocusEvent e) {
txtDateFocusLost(e);
}
});
txtDate.addActionListener(e -> txtDateActionPerformed(e));
add(txtDate, CC.xy(5, 5));
//---- lblText ----
lblText.setText("text");
lblText.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblText, CC.xy(3, 7));
//---- txtText ----
txtText.setFont(new Font("Arial", Font.PLAIN, 14));
txtText.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
txtTextFocusGained(e);
}
@Override
public void focusLost(FocusEvent e) {
txtTextFocusLost(e);
}
});
txtText.addActionListener(e -> txtTextActionPerformed(e));
add(txtText, CC.xy(5, 7));
//---- lblCash ----
lblCash.setText("text");
lblCash.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblCash, CC.xy(3, 9));
//---- txtCash ----
txtCash.setFont(new Font("Arial", Font.PLAIN, 14));
txtCash.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent e) {
txtCashFocusGained(e);
}
@Override
public void focusLost(FocusEvent e) {
txtCashFocusLost(e);
}
});
txtCash.addActionListener(e -> txtCashActionPerformed(e));
add(txtCash, CC.xy(5, 9));
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
private void initPanel() {
lblResident.setText(SYSTools.xx("misc.msg.resident"));
lblDate.setText(SYSTools.xx("admin.residents.cash.pnltx.lbldate"));
lblText.setText(SYSTools.xx("admin.residents.cash.pnltx.lbltext"));
lblCash.setText(SYSTools.xx("admin.residents.cash.pnltx.lblcash"));
txtDate.setText(DateFormat.getDateInstance().format(tx.getPit()));
txtCash.setText(SYSTools.formatCurrency(tx.getAmount()));
if (tx.getId() == null) {
txtText.setText(SYSTools.xx("admin.residents.cash.pnltx.txtText"));
} else {
txtText.setText(tx.getText());
}
ResInfo firstStay = null;
if (tx.getResident() != null) {
cmbResident.setModel(new DefaultComboBoxModel<Resident>(new Resident[]{tx.getResident()}));
firstStay = ResInfoTools.getFirstResinfo(tx.getResident(), ResInfoTypeTools.getByType(ResInfoTypeTools.TYPE_STAY));
} else {
ArrayList<Resident> list = ResidentTools.getAllActive();
cmbResident.setModel(SYSTools.list2cmb(list));
if (!list.isEmpty()) {
firstStay = ResInfoTools.getFirstResinfo(list.get(0), ResInfoTypeTools.getByType(ResInfoTypeTools.TYPE_STAY));
}
}
min = (firstStay == null ? new LocalDate().dayOfMonth().withMinimumValue() : new LocalDate(firstStay.getFrom()));
setFocusCycleRoot(true);
setFocusTraversalPolicy(new FocusTraversalPolicy() {
@Override
public Component getComponentAfter(Container aContainer, Component aComponent) {
if (focusOwner == null) {
focusOwner = txtDate;
} else if (focusOwner.equals(txtDate)) {
focusOwner = txtText;
} else if (focusOwner.equals(txtText)) {
focusOwner = txtCash;
} else if (focusOwner.equals(txtCash)) {
focusOwner = txtDate;
} else {
focusOwner = txtDate;
}
return focusOwner;
}
@Override
public Component getComponentBefore(Container aContainer, Component aComponent) {
if (focusOwner == null) {
focusOwner = txtDate;
} else if (focusOwner.equals(txtDate)) {
focusOwner = txtCash;
} else if (focusOwner.equals(txtText)) {
focusOwner = txtDate;
} else if (focusOwner.equals(txtCash)) {
focusOwner = txtText;
} else {
focusOwner = txtDate;
}
return focusOwner;
}
@Override
public Component getFirstComponent(Container aContainer) {
return txtDate;
}
@Override
public Component getLastComponent(Container aContainer) {
return txtCash;
}
@Override
public Component getDefaultComponent(Container aContainer) {
return txtDate;
}
});
txtDate.requestFocus();
}
private BigDecimal checkCash(String text, BigDecimal defaultAmount) {
BigDecimal myamount = SYSTools.parseCurrency(text);
if (myamount != null) {
if (myamount.equals(BigDecimal.ZERO)) {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(SYSTools.xx("misc.msg.emptycash")));
myamount = defaultAmount;
}
} else {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(SYSTools.xx("misc.msg.wrongcash")));
myamount = defaultAmount;
}
return myamount;
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JLabel lblResident;
private JComboBox cmbResident;
private JLabel lblDate;
private JTextField txtDate;
private JLabel lblText;
private JTextField txtText;
private JLabel lblCash;
private JTextField txtCash;
// JFormDesigner - End of variables declaration //GEN-END:variables
}