/*
* PasswordScreen.java
*
* Created on August 14, 2006, 11:01 PM
*/
package com.floreantpos.ui.views;
import java.awt.event.ActionEvent;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JPanel;
import com.floreantpos.config.ui.DatabaseConfigurationDialog;
import com.floreantpos.main.Application;
import com.floreantpos.model.AttendenceHistory;
import com.floreantpos.model.Shift;
import com.floreantpos.model.User;
import com.floreantpos.model.UserType;
import com.floreantpos.model.dao.AttendenceHistoryDAO;
import com.floreantpos.model.dao.UserDAO;
import com.floreantpos.model.dao.UserTypeDAO;
import com.floreantpos.swing.MessageDialog;
import com.floreantpos.ui.dialog.POSMessageDialog;
import com.floreantpos.util.ShiftUtil;
/**
*
* @author MShahriar
*/
public class PasswordScreen extends JPanel {
private static PasswordScreen instance;
/** Creates new form PasswordScreen */
private PasswordScreen() {
initComponents();
//cbUserType.setModel(new DefaultComboBoxModel(new String[] {User.USER_TYPE_MANAGER, User.USER_TYPE_CASHIER, User.USER_TYPE_SERVER}));
btnConfigureDatabase.setAction(goAction);
btnConfigureDatabase.setActionCommand("DBCONFIG");
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
buttonPanel = new javax.swing.JPanel();
posButton4 = new com.floreantpos.swing.PosButton();
posButton13 = new com.floreantpos.swing.PosButton();
posButton12 = new com.floreantpos.swing.PosButton();
posButton9 = new com.floreantpos.swing.PosButton();
posButton10 = new com.floreantpos.swing.PosButton();
posButton11 = new com.floreantpos.swing.PosButton();
posButton8 = new com.floreantpos.swing.PosButton();
posButton7 = new com.floreantpos.swing.PosButton();
posButton6 = new com.floreantpos.swing.PosButton();
posButton3 = new com.floreantpos.swing.PosButton();
posButton1 = new com.floreantpos.swing.PosButton();
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
tfPassword = new javax.swing.JPasswordField();
tfUserId = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
cbUserType = new javax.swing.JComboBox();
jPanel1 = new javax.swing.JPanel();
jPanel3 = new javax.swing.JPanel();
btnConfigureDatabase = new com.floreantpos.swing.PosButton();
btnLogin = new com.floreantpos.swing.PosButton();
jLabel3 = new javax.swing.JLabel();
btnShutdown = new com.floreantpos.swing.PosButton();
jPanel4 = new javax.swing.JPanel();
setPreferredSize(new java.awt.Dimension(315, 400));
setLayout(new java.awt.GridBagLayout());
buttonPanel.setOpaque(false);
buttonPanel.setPreferredSize(new java.awt.Dimension(280, 180));
buttonPanel.setLayout(new java.awt.GridLayout(0, 3, 5, 5));
posButton4.setAction(goAction);
posButton4.setIcon(com.floreantpos.IconFactory.getIcon("7_32.png"));
posButton4.setActionCommand("7");
posButton4.setFocusable(false);
buttonPanel.add(posButton4);
posButton13.setAction(goAction);
posButton13.setIcon(com.floreantpos.IconFactory.getIcon("8_32.png"));
posButton13.setActionCommand("8");
posButton13.setFocusable(false);
buttonPanel.add(posButton13);
posButton12.setAction(goAction);
posButton12.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/9_32.png"))); // NOI18N
posButton12.setActionCommand("9");
posButton12.setFocusable(false);
buttonPanel.add(posButton12);
posButton9.setAction(goAction);
posButton9.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/4_32.png"))); // NOI18N
posButton9.setActionCommand("4");
posButton9.setFocusable(false);
buttonPanel.add(posButton9);
posButton10.setAction(goAction);
posButton10.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/5_32.png"))); // NOI18N
posButton10.setActionCommand("5");
posButton10.setFocusable(false);
buttonPanel.add(posButton10);
posButton11.setAction(goAction);
posButton11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/6_32.png"))); // NOI18N
posButton11.setActionCommand("6");
posButton11.setFocusable(false);
buttonPanel.add(posButton11);
posButton8.setAction(goAction);
posButton8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/1_32.png"))); // NOI18N
posButton8.setActionCommand("1");
posButton8.setFocusable(false);
buttonPanel.add(posButton8);
posButton7.setAction(goAction);
posButton7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/2_32.png"))); // NOI18N
posButton7.setActionCommand("2");
posButton7.setFocusable(false);
buttonPanel.add(posButton7);
posButton6.setAction(goAction);
posButton6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/3_32.png"))); // NOI18N
posButton6.setActionCommand("3");
posButton6.setFocusable(false);
buttonPanel.add(posButton6);
posButton3.setAction(goAction);
posButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/0_32.png"))); // NOI18N
posButton3.setActionCommand("0");
posButton3.setFocusable(false);
buttonPanel.add(posButton3);
posButton1.setAction(goAction);
posButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/clear_32.png"))); // NOI18N
posButton1.setText("CLEAR");
posButton1.setFocusable(false);
posButton1.setPreferredSize(new java.awt.Dimension(90, 50));
buttonPanel.add(posButton1);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.ipady = 40;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
add(buttonPanel, gridBagConstraints);
jPanel2.setOpaque(false);
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 24));
jLabel1.setForeground(new java.awt.Color(204, 102, 0));
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText("ENTER YOUR USER ID");
jLabel2.setFont(new java.awt.Font("Tahoma", 1, 24));
jLabel2.setForeground(new java.awt.Color(204, 102, 0));
jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel2.setText("ENTER YOUR PASSWORD");
tfPassword.setFont(new java.awt.Font("Courier", 1, 18));
tfPassword.setHorizontalAlignment(javax.swing.JTextField.LEFT);
tfUserId.setFont(new java.awt.Font("Tahoma", 1, 18));
jLabel4.setFont(new java.awt.Font("DejaVu Sans", 1, 24));
jLabel4.setForeground(new java.awt.Color(204, 102, 0));
jLabel4.setText("User Type:");
cbUserType.setFont(new java.awt.Font("DejaVu Sans", 1, 18));
org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 387, Short.MAX_VALUE).add(
jPanel2Layout.createSequentialGroup().addContainerGap().add(jLabel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE).addContainerGap()).add(org.jdesktop.layout.GroupLayout.TRAILING, tfPassword, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 387, Short.MAX_VALUE).add(tfUserId,
org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 387, Short.MAX_VALUE).add(jPanel2Layout.createSequentialGroup().add(jLabel4).add(18, 18, 18).add(cbUserType, 0, 225, Short.MAX_VALUE)));
jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(
jPanel2Layout.createSequentialGroup().add(jLabel1).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(tfUserId, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 31, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED).add(jLabel2)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).add(tfPassword, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addPreferredGap(
org.jdesktop.layout.LayoutStyle.RELATED).add(
jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(jLabel4).add(cbUserType, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)).add(4, 4, 4)));
jPanel2Layout.linkSize(new java.awt.Component[] { cbUserType, jLabel4 }, org.jdesktop.layout.GroupLayout.VERTICAL);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0);
add(jPanel2, gridBagConstraints);
jPanel1.setLayout(new java.awt.BorderLayout());
jPanel3.setPreferredSize(new java.awt.Dimension(100, 105));
jPanel3.setLayout(new java.awt.GridLayout(2, 0, 5, 5));
btnConfigureDatabase.setAction(goAction);
btnConfigureDatabase.setText("CONFIGURE DATABASE");
btnConfigureDatabase.setFocusable(false);
jPanel3.add(btnConfigureDatabase);
btnLogin.setAction(goAction);
btnLogin.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/log_in_32.png"))); // NOI18N
btnLogin.setText("LOGIN");
btnLogin.setFocusable(false);
jPanel3.add(btnLogin);
jPanel3.add(jLabel3);
btnShutdown.setAction(goAction);
btnShutdown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/shut_down_32.png"))); // NOI18N
btnShutdown.setText("SHUTDOWN");
btnShutdown.setFocusable(false);
jPanel3.add(btnShutdown);
jPanel1.add(jPanel3, java.awt.BorderLayout.SOUTH);
org.jdesktop.layout.GroupLayout jPanel4Layout = new org.jdesktop.layout.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(0, 387, Short.MAX_VALUE));
jPanel4Layout.setVerticalGroup(jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(0, 64, Short.MAX_VALUE));
jPanel1.add(jPanel4, java.awt.BorderLayout.CENTER);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
add(jPanel1, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
public void doLogin() {
Application application = Application.getInstance();
int userId = Integer.MAX_VALUE;
try {
userId = Integer.parseInt(tfUserId.getText());
} catch (Exception x) {
MessageDialog.showError("user id not valid");
return;
}
char[] password = tfPassword.getPassword();
String newPass = new String(password);
UserType selectedUserType = (UserType) cbUserType.getSelectedItem();
UserDAO dao = new UserDAO();
Calendar currentTime = Calendar.getInstance();
try {
User user = null;
user = dao.findUser(userId, selectedUserType);
if(user == null) {
MessageDialog.showError("User not found");
return;
}
if (user.getNewUserType() != null) {
if (user == null) {
MessageDialog.showError("User not found");
return;
}
if (user.getPassword() == null) {
MessageDialog.showError("Data error, user password is empty.");
return;
}
if (!user.getPassword().equalsIgnoreCase(newPass)) {
MessageDialog.showError("Wrong password");
return;
}
}
else {
user = dao.findUser(userId);
if (user == null) {
MessageDialog.showError("User not found");
return;
}
if (user.getPassword() == null) {
MessageDialog.showError("Data error, user password is empty.");
return;
}
if (!user.getPassword().equalsIgnoreCase(newPass)) {
MessageDialog.showError("Wrong password");
return;
}
}
Shift currentShift = ShiftUtil.getCurrentShift();
if (currentShift == null) {
POSMessageDialog.showError(this, "No Shift is configured for this time, you cannot login");
return;
}
if (user.isClockedIn() != null && user.isClockedIn().booleanValue()) {
Shift userShift = user.getCurrentShift();
Date userLastClockInTime = user.getLastClockInTime();
long elaspedTimeSinceLastLogin = Math.abs(currentTime.getTimeInMillis() - userLastClockInTime.getTime());
if (userShift != null) {
if (!userShift.equals(currentShift)) {
reClockInUser(currentTime, user, currentShift);
}
else if (userShift.getShiftLength() != null && (elaspedTimeSinceLastLogin >= userShift.getShiftLength())) {
reClockInUser(currentTime, user, currentShift);
}
}
else {
user.doClockIn(application.getTerminal(), currentShift, currentTime);
}
}
else {
user.doClockIn(application.getTerminal(), currentShift, currentTime);
}
application.setCurrentUser(user);
application.setCurrentShift(currentShift);
tfUserId.setText("");
tfPassword.setText("");
application.getRootView().showView(SwitchboardView.VIEW_NAME);
} catch (Exception e1) {
MessageDialog.showError(e1);
}
}
private void reClockInUser(Calendar currentTime, User user, Shift currentShift) {
POSMessageDialog.showMessage("You will be clocked out from previous Shift");
Application application = Application.getInstance();
AttendenceHistoryDAO attendenceHistoryDAO = new AttendenceHistoryDAO();
AttendenceHistory attendenceHistory = attendenceHistoryDAO.findHistoryByClockedInTime(user);
if (attendenceHistory == null) {
attendenceHistory = new AttendenceHistory();
Date lastClockInTime = user.getLastClockInTime();
Calendar c = Calendar.getInstance();
c.setTime(lastClockInTime);
attendenceHistory.setClockInTime(lastClockInTime);
attendenceHistory.setClockInHour(Short.valueOf((short) c.get(Calendar.HOUR)));
attendenceHistory.setUser(user);
attendenceHistory.setTerminal(application.getTerminal());
attendenceHistory.setShift(user.getCurrentShift());
}
user.doClockOut(attendenceHistory, currentShift, currentTime);
user.doClockIn(application.getTerminal(), currentShift, currentTime);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private com.floreantpos.swing.PosButton btnConfigureDatabase;
private com.floreantpos.swing.PosButton btnLogin;
private com.floreantpos.swing.PosButton btnShutdown;
private javax.swing.JPanel buttonPanel;
private javax.swing.JComboBox cbUserType;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private com.floreantpos.swing.PosButton posButton1;
private com.floreantpos.swing.PosButton posButton10;
private com.floreantpos.swing.PosButton posButton11;
private com.floreantpos.swing.PosButton posButton12;
private com.floreantpos.swing.PosButton posButton13;
private com.floreantpos.swing.PosButton posButton3;
private com.floreantpos.swing.PosButton posButton4;
private com.floreantpos.swing.PosButton posButton6;
private com.floreantpos.swing.PosButton posButton7;
private com.floreantpos.swing.PosButton posButton8;
private com.floreantpos.swing.PosButton posButton9;
private javax.swing.JPasswordField tfPassword;
private javax.swing.JTextField tfUserId;
// End of variables declaration//GEN-END:variables
Action goAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if ("CLEAR".equals(command)) {
if (tfUserId.hasFocus()) {
tfUserId.setText("");
}
else if (tfPassword.hasFocus()) {
tfPassword.setText("");
}
}
else if ("LOGIN".equals(command)) {
doLogin();
}
else if ("SHUTDOWN".equals(command)) {
Application.getInstance().shutdownPOS();
}
else if ("DBCONFIG".equalsIgnoreCase(command)) {
DatabaseConfigurationDialog dialog = new DatabaseConfigurationDialog(Application.getPosWindow(), true);
dialog.setTitle("Database connection error, please configure your database");
dialog.setExitOnClose(true);
dialog.pack();
dialog.open();
}
else {
if (tfUserId.hasFocus()) {
tfUserId.setText(tfUserId.getText() + command);
}
else if (tfPassword.hasFocus()) {
char[] password = tfPassword.getPassword();
String newPass = new String(password);
newPass += command;
tfPassword.setText(newPass);
}
}
}
};
public void setUserTypes() {
try {
UserTypeDAO dao = new UserTypeDAO();
List<UserType> userTypes = dao.findAll();
cbUserType.setModel(new DefaultComboBoxModel(userTypes.toArray()));
} catch (Exception e) {
}
}
@Override
public void setVisible(boolean aFlag) {
super.setVisible(aFlag);
if (aFlag) {
tfUserId.requestFocus();
}
}
public static PasswordScreen getInstance() {
if (instance == null) {
instance = new PasswordScreen();
}
return instance;
}
}