/*
* OpenTicketsListDialog.java
*
* Created on September 8, 2006, 12:04 AM
*/
package com.floreantpos.ui.dialog;
import java.awt.Component;
import java.awt.Font;
import java.awt.Rectangle;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import com.floreantpos.main.Application;
import com.floreantpos.model.Ticket;
import com.floreantpos.model.User;
import com.floreantpos.model.dao.TicketDAO;
/**
*
* @author MShahriar
*/
public class OpenTicketsListDialog extends POSDialog {
private List<Ticket> openTickets;
private OpenTicketListTableModel tableModel;
/** Creates new form OpenTicketsListDialog */
public OpenTicketsListDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal, false);
initComponents();
setTitle("ACTIVE TICKETS");
titlePanel.setTitle("ACTIVE TICKETS (BEFORE DRAWER RESET)");
TicketDAO dao = new TicketDAO();
openTickets = dao.findOpenTickets();
tableModel = new OpenTicketListTableModel();
openTicketListTable.setModel(tableModel);
openTicketListTable.setDefaultRenderer(Object.class, new TicketTableCellRenderer());
openTicketListTable.setRowHeight(40);
selectionModel = new DefaultListSelectionModel();
selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
openTicketListTable.setSelectionModel(selectionModel);
}
/** 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() {
titlePanel = new com.floreantpos.ui.TitlePanel();
transparentPanel1 = new com.floreantpos.swing.TransparentPanel();
transparentPanel3 = new com.floreantpos.swing.TransparentPanel();
btnVoid = new com.floreantpos.swing.PosButton();
btnPrint = new com.floreantpos.swing.PosButton();
btnTransferServer = new com.floreantpos.swing.PosButton();
btnClose = new com.floreantpos.swing.PosButton();
transparentPanel4 = new com.floreantpos.swing.TransparentPanel();
btnScrollUp = new com.floreantpos.swing.PosButton();
btnScrollDown = new com.floreantpos.swing.PosButton();
transparentPanel2 = new com.floreantpos.swing.TransparentPanel();
jScrollPane1 = new javax.swing.JScrollPane();
openTicketListTable = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().add(titlePanel, java.awt.BorderLayout.NORTH);
transparentPanel1.setLayout(new java.awt.BorderLayout());
transparentPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
transparentPanel3.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 5));
btnVoid.setText("VOID");
btnVoid.setPreferredSize(new java.awt.Dimension(100, 50));
btnVoid.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
doVoidTicket(evt);
}
});
transparentPanel3.add(btnVoid);
btnPrint.setText("PRINT");
btnPrint.setPreferredSize(new java.awt.Dimension(100, 50));
btnPrint.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
doPrintTicket(evt);
}
});
transparentPanel3.add(btnPrint);
btnTransferServer.setText("<html><body><center>TRANSFER<br>SERVER</center></body></html>");
btnTransferServer.setPreferredSize(new java.awt.Dimension(100, 50));
btnTransferServer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
doTransferServer(evt);
}
});
transparentPanel3.add(btnTransferServer);
btnClose.setText("CLOSE");
btnClose.setPreferredSize(new java.awt.Dimension(100, 50));
btnClose.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
doClose(evt);
}
});
transparentPanel3.add(btnClose);
transparentPanel1.add(transparentPanel3, java.awt.BorderLayout.CENTER);
transparentPanel4.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 5, 1, 5));
btnScrollUp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/up_32.png")));
btnScrollUp.setPreferredSize(new java.awt.Dimension(80, 50));
btnScrollUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
doScrollUp(evt);
}
});
transparentPanel4.add(btnScrollUp);
btnScrollDown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/down_32.png")));
btnScrollDown.setPreferredSize(new java.awt.Dimension(80, 50));
btnScrollDown.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
doScrollDown(evt);
}
});
transparentPanel4.add(btnScrollDown);
transparentPanel1.add(transparentPanel4, java.awt.BorderLayout.WEST);
getContentPane().add(transparentPanel1, java.awt.BorderLayout.SOUTH);
transparentPanel2.setLayout(new java.awt.BorderLayout(0, 5));
transparentPanel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 10, 5, 10));
openTicketListTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
jScrollPane1.setViewportView(openTicketListTable);
transparentPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER);
getContentPane().add(transparentPanel2, java.awt.BorderLayout.CENTER);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-646)/2, (screenSize.height-435)/2, 646, 435);
}// </editor-fold>//GEN-END:initComponents
private void doScrollUp(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doScrollUp
int selectedRow = openTicketListTable.getSelectedRow();
int rowCount = tableModel.getRowCount();
if (selectedRow <= 0) {
selectedRow = rowCount - 1;
}
else if (selectedRow > (rowCount - 1)) {
selectedRow = rowCount - 1;
}
else {
--selectedRow;
}
openTicketListTable.transferFocus();
selectionModel.setLeadSelectionIndex(selectedRow);
Rectangle cellRect = openTicketListTable.getCellRect(selectedRow, 0, false);
openTicketListTable.scrollRectToVisible(cellRect);
}//GEN-LAST:event_doScrollUp
private void doScrollDown(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doScrollDown
int selectedRow = openTicketListTable.getSelectedRow();
int rowCount = tableModel.getRowCount();
if (selectedRow < 0) {
selectedRow = 0;
}
else if (selectedRow >= rowCount - 1) {
selectedRow = 0;
}
else {
++selectedRow;
}
openTicketListTable.transferFocus();
selectionModel.setLeadSelectionIndex(selectedRow);
Rectangle cellRect = openTicketListTable.getCellRect(selectedRow, 0, false);
openTicketListTable.scrollRectToVisible(cellRect); }//GEN-LAST:event_doScrollDown
private Ticket getSelectedTicket() {
int row = openTicketListTable.getSelectedRow();
if(row < 0) {
POSMessageDialog.showError("Please select a ticket");
return null;
}
return openTickets.get(row);
}
private void doClose(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doClose
canceled = false;
dispose();
}//GEN-LAST:event_doClose
private void doTransferServer(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doTransferServer
try {
Ticket ticket = getSelectedTicket();
if (ticket != null) {
UserListDialog dialog = new UserListDialog(Application.getPosWindow(), true);
dialog.open();
if (!dialog.isCanceled()) {
User selectedUser = dialog.getSelectedUser();
if (!ticket.getOwner().equals(selectedUser)) {
ticket.setOwner(selectedUser);
TicketDAO.getInstance().update(ticket);
openTicketListTable.repaint();
}
}
}
} catch (Exception e) {
POSMessageDialog.showError("An error has occured");
}
}//GEN-LAST:event_doTransferServer
private void doPrintTicket(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doPrintTicket
JOptionPane.showMessageDialog(this, "To be implemented");
}//GEN-LAST:event_doPrintTicket
private void doVoidTicket(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doVoidTicket
Ticket ticket = getSelectedTicket();
if(ticket != null) {
ticket = TicketDAO.getInstance().initializeTicket(ticket);
VoidTicketDialog dialog = new VoidTicketDialog(Application.getPosWindow(), true);
dialog.setTicket(ticket);
dialog.open();
if(!dialog.isCanceled()) {
tableModel.removeTicket(ticket);
}
}
}//GEN-LAST:event_doVoidTicket
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new OpenTicketsListDialog(new javax.swing.JFrame(), true).setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private com.floreantpos.swing.PosButton btnClose;
private com.floreantpos.swing.PosButton btnPrint;
private com.floreantpos.swing.PosButton btnScrollDown;
private com.floreantpos.swing.PosButton btnScrollUp;
private com.floreantpos.swing.PosButton btnTransferServer;
private com.floreantpos.swing.PosButton btnVoid;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable openTicketListTable;
private com.floreantpos.ui.TitlePanel titlePanel;
private com.floreantpos.swing.TransparentPanel transparentPanel1;
private com.floreantpos.swing.TransparentPanel transparentPanel2;
private com.floreantpos.swing.TransparentPanel transparentPanel3;
private com.floreantpos.swing.TransparentPanel transparentPanel4;
// End of variables declaration//GEN-END:variables
private DefaultListSelectionModel selectionModel;
class OpenTicketListTableModel extends AbstractTableModel {
public int getRowCount() {
if(openTickets == null) return 0;
return openTickets.size();
}
public int getColumnCount() {
return 4;
}
@Override
public String getColumnName(int column) {
switch(column) {
case 0:
return "TICKET ID";
case 1:
return "SERVER";
case 2:
return "DATE/TIME";
case 3:
return "TOTAL";
}
return null;
}
public Object getValueAt(int rowIndex, int columnIndex) {
if(openTickets == null) return null;
Ticket ticket = openTickets.get(rowIndex);
switch(columnIndex) {
case 0:
return Integer.valueOf(ticket.getId());
case 1:
return ticket.getOwner().toString();
case 2:
return ticket.getCreateDate();
case 3:
return Double.valueOf(ticket.getTotalAmount());
}
return null;
}
void removeTicket(Ticket ticket) {
openTickets.remove(ticket);
fireTableDataChanged();
}
}
class TicketTableCellRenderer extends DefaultTableCellRenderer {
Font font = getFont().deriveFont(Font.BOLD, 12);
SimpleDateFormat dateFormat = new SimpleDateFormat("MMM-dd-yy hh:mm a");
DecimalFormat decimalFormat = new DecimalFormat("0.00");
String currencySymbol = Application.getCurrencySymbol();
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
label.setFont(font);
if(value instanceof Date) {
label.setText(dateFormat.format(value));
label.setHorizontalAlignment(SwingConstants.CENTER);
}
else if(value instanceof Double) {
label.setText(currencySymbol + decimalFormat.format(((Double) value).doubleValue()));
label.setHorizontalAlignment(SwingConstants.RIGHT);
}
else {
label.setHorizontalAlignment(SwingConstants.LEFT);
}
return label;
}
}
}