/* * SwitchboardView.java * * Created on August 14, 2006, 11:45 PM */ package com.floreantpos.ui.views; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Set; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.Timer; import com.floreantpos.bo.ui.BackOfficeWindow; import com.floreantpos.main.Application; import com.floreantpos.model.ActionHistory; import com.floreantpos.model.AttendenceHistory; import com.floreantpos.model.Shift; import com.floreantpos.model.Ticket; import com.floreantpos.model.User; import com.floreantpos.model.UserPermission; import com.floreantpos.model.UserType; import com.floreantpos.model.dao.ActionHistoryDAO; import com.floreantpos.model.dao.AttendenceHistoryDAO; import com.floreantpos.model.dao.TicketDAO; import com.floreantpos.model.util.POSConstants; import com.floreantpos.print.PosPrintService; import com.floreantpos.services.PosTransactionService; import com.floreantpos.ui.dialog.ManagerDialog; import com.floreantpos.ui.dialog.NumberSelectionDialog2; import com.floreantpos.ui.dialog.POSMessageDialog; import com.floreantpos.ui.dialog.PaymentTypeSelectionDialog; import com.floreantpos.ui.dialog.PayoutDialog; import com.floreantpos.ui.dialog.TicketDetailDialog; import com.floreantpos.ui.dialog.VoidTicketDialog; import com.floreantpos.ui.views.order.OrderView; import com.floreantpos.ui.views.order.RootView; /** * * @author MShahriar */ public class SwitchboardView extends JPanel implements ActionListener { public final static String VIEW_NAME = "SWITCHBOARD"; private Timer ticketListUpdater; /** Creates new form SwitchboardView */ public SwitchboardView() { initComponents(); btnBackOffice.addActionListener(this); btnClockOut.addActionListener(this); btnEditTicket.addActionListener(this); btnGroupSettle.addActionListener(this); btnInfo.addActionListener(this); btnLogout.addActionListener(this); btnManager.addActionListener(this); btnNewTicket.addActionListener(this); btnPayout.addActionListener(this); btnPrintTicket.addActionListener(this); btnReopenTicket.addActionListener(this); btnSettleTicket.addActionListener(this); btnShutdown.addActionListener(this); btnSplitTicket.addActionListener(this); btnTakeout.addActionListener(this); btnVoidTicket.addActionListener(this); ticketListUpdater = new Timer(30 * 1000, new TicketListUpdaterTask()); } /** 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 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { javax.swing.JPanel statusPanel = new javax.swing.JPanel(); lblUserName = new javax.swing.JLabel(); javax.swing.JPanel bottomPanel = new javax.swing.JPanel(); javax.swing.JPanel bottomLeftPanel = new javax.swing.JPanel(); openTicketList = new com.floreantpos.ui.TicketListView(); javax.swing.JPanel activityPanel = new javax.swing.JPanel(); btnInfo = new com.floreantpos.swing.PosButton(); btnNewTicket = new com.floreantpos.swing.PosButton(); btnEditTicket = new com.floreantpos.swing.PosButton(); btnSplitTicket = new com.floreantpos.swing.PosButton(); btnVoidTicket = new com.floreantpos.swing.PosButton(); btnReopenTicket = new com.floreantpos.swing.PosButton(); btnSettleTicket = new com.floreantpos.swing.PosButton(); btnGroupSettle = new com.floreantpos.swing.PosButton(); btnPayout = new com.floreantpos.swing.PosButton(); btnTakeout = new com.floreantpos.swing.PosButton(); btnPrintTicket = new com.floreantpos.swing.PosButton(); javax.swing.JPanel bottomRightPanel = new javax.swing.JPanel(); btnShutdown = new com.floreantpos.swing.PosButton(); btnLogout = new com.floreantpos.swing.PosButton(); btnBackOffice = new com.floreantpos.swing.PosButton(); btnManager = new com.floreantpos.swing.PosButton(); btnClockOut = new com.floreantpos.swing.PosButton(); setLayout(new java.awt.BorderLayout()); statusPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "CURRENT USER STATUS", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION)); statusPanel.setPreferredSize(new java.awt.Dimension(100, 80)); statusPanel.setLayout(new java.awt.BorderLayout()); lblUserName.setFont(new java.awt.Font("Tahoma", 1, 18)); lblUserName.setForeground(new java.awt.Color(0, 102, 102)); lblUserName.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); lblUserName.setText("USER NAME"); statusPanel.add(lblUserName, java.awt.BorderLayout.PAGE_START); add(statusPanel, java.awt.BorderLayout.NORTH); bottomPanel.setLayout(new java.awt.BorderLayout()); bottomLeftPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "OPEN TICKETS AND ACTIVITY", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION)); bottomLeftPanel.setLayout(new java.awt.BorderLayout(5, 5)); bottomLeftPanel.add(openTicketList, java.awt.BorderLayout.CENTER); activityPanel.setPreferredSize(new java.awt.Dimension(655, 160)); activityPanel.setLayout(new java.awt.GridLayout(3, 0, 5, 5)); btnInfo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/settle_ticket_32.png"))); btnInfo.setText("INFO"); btnInfo.setPreferredSize(new java.awt.Dimension(160, 60)); activityPanel.add(btnInfo); btnNewTicket.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/new_ticket_32.png"))); btnNewTicket.setText("NEW"); btnNewTicket.setPreferredSize(new java.awt.Dimension(120, 50)); activityPanel.add(btnNewTicket); btnEditTicket.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/edit_ticket_32.png"))); btnEditTicket.setText("EDIT"); btnEditTicket.setPreferredSize(new java.awt.Dimension(120, 50)); activityPanel.add(btnEditTicket); btnSplitTicket.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/split_32.png"))); btnSplitTicket.setText("SPLIT"); btnSplitTicket.setPreferredSize(new java.awt.Dimension(120, 50)); activityPanel.add(btnSplitTicket); btnVoidTicket.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/void_ticket_32.png"))); btnVoidTicket.setText("VOID"); btnVoidTicket.setPreferredSize(new java.awt.Dimension(120, 50)); activityPanel.add(btnVoidTicket); btnReopenTicket.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/edit_ticket_32.png"))); btnReopenTicket.setText("RE-OPEN"); btnReopenTicket.setPreferredSize(new java.awt.Dimension(120, 50)); activityPanel.add(btnReopenTicket); btnSettleTicket.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/settle_ticket_32.png"))); btnSettleTicket.setText("SETTLE"); btnSettleTicket.setPreferredSize(new java.awt.Dimension(160, 60)); activityPanel.add(btnSettleTicket); btnGroupSettle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/settle_ticket_32.png"))); btnGroupSettle.setText("<html><body>GROUP<br>SETTLE</body></html>"); btnGroupSettle.setPreferredSize(new java.awt.Dimension(160, 60)); activityPanel.add(btnGroupSettle); btnPayout.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/pay_32.png"))); btnPayout.setText("PAY OUT"); btnPayout.setPreferredSize(new java.awt.Dimension(160, 60)); activityPanel.add(btnPayout); btnTakeout.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/pay_32.png"))); btnTakeout.setText("TAKE OUT"); btnTakeout.setPreferredSize(new java.awt.Dimension(160, 60)); activityPanel.add(btnTakeout); btnPrintTicket.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/print_32.png"))); btnPrintTicket.setText("PRINT"); btnPrintTicket.setPreferredSize(new java.awt.Dimension(120, 50)); activityPanel.add(btnPrintTicket); bottomLeftPanel.add(activityPanel, java.awt.BorderLayout.SOUTH); bottomPanel.add(bottomLeftPanel, java.awt.BorderLayout.CENTER); bottomRightPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "OTHERS", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION)); bottomRightPanel.setPreferredSize(new java.awt.Dimension(200, 10)); btnShutdown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/shut_down_32.png"))); btnShutdown.setText("SHUTDOWN"); btnLogout.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/log_out_32.png"))); btnLogout.setText("LOGOUT"); btnBackOffice.setText("BACK-OFFICE"); btnManager.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/user_32.png"))); btnManager.setText("MANAGER"); btnClockOut.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/log_out_32.png"))); btnClockOut.setText("CLOCK OUT"); org.jdesktop.layout.GroupLayout bottomRightPanelLayout = new org.jdesktop.layout.GroupLayout(bottomRightPanel); bottomRightPanel.setLayout(bottomRightPanelLayout); bottomRightPanelLayout.setHorizontalGroup(bottomRightPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add( bottomRightPanelLayout.createSequentialGroup().addContainerGap().add( bottomRightPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add(btnShutdown, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE).add(btnLogout, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE).add(btnClockOut, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 168, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).add(btnBackOffice, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE).add(btnManager, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 168, Short.MAX_VALUE)) .addContainerGap())); bottomRightPanelLayout.setVerticalGroup(bottomRightPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING).add( org.jdesktop.layout.GroupLayout.TRAILING, bottomRightPanelLayout.createSequentialGroup().addContainerGap(39, Short.MAX_VALUE).add(btnManager, 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( btnBackOffice, 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(btnClockOut, 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(btnLogout, 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(btnShutdown, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE).addContainerGap())); bottomRightPanelLayout.linkSize(new java.awt.Component[] { btnBackOffice, btnClockOut, btnLogout, btnManager, btnShutdown }, org.jdesktop.layout.GroupLayout.VERTICAL); bottomPanel.add(bottomRightPanel, java.awt.BorderLayout.EAST); add(bottomPanel, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents private void doReopenTicket() { NumberSelectionDialog2 dialog = new NumberSelectionDialog2(); dialog.setTitle("Please enter ticket ID"); dialog.pack(); dialog.open(); if (dialog.isCanceled()) { return; } int ticketId = (int) dialog.getValue(); TicketDAO dao = new TicketDAO(); Ticket ticket = dao.get(Integer.valueOf(ticketId)); if (ticket == null) { POSMessageDialog.showError("No ticket with ID " + ticketId + " found"); return; } if (!ticket.isClosed()) { POSMessageDialog.showError("The ticket is not closed"); return; } String amount = Application.getCurrencySymbol() + Application.formatNumber(ticket.getTotalAmount()); String amountMessage = "<span style='color: red; font-weight: bold;'>" + amount + "</span>"; String message = "<html><body><h3>The ticket will be opened in edit mode. Before that, you must refund <br/>" + "amount " + amountMessage + " to keep the system stable. Do you wish to continue?</h3></body></html>"; int option = JOptionPane.showOptionDialog(this, message, "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, null, null); if (option != JOptionPane.YES_OPTION) { return; } try { PosTransactionService service = PosTransactionService.getInstance(); service.refundTicket(ticket); //REOPEN ACTION ActionHistoryDAO.getInstance().saveHistory(Application.getCurrentUser(), ActionHistory.REOPEN_CHECK, "CHK#:" + ticket.getId()); JOptionPane.showMessageDialog(this, "<html><body>Please press <b>OK</b> after you refund amount " + amountMessage + "</body></html>"); ticket.setDrawerResetted(false); editTicket(ticket); } catch (Exception e) { POSMessageDialog.showError(this, POSMessageDialog.ERROR_MESSAGE, e); } } private void doClockOut() { int option = JOptionPane.showOptionDialog(this, "Are you sure you want to Clock Out?", "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); if (option != JOptionPane.YES_OPTION) { return; } User user = Application.getCurrentUser(); 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.getInstance().getTerminal()); attendenceHistory.setShift(user.getCurrentShift()); } Shift shift = user.getCurrentShift(); Calendar calendar = Calendar.getInstance(); user.doClockOut(attendenceHistory, shift, calendar); Application.getInstance().logout(); } private synchronized void doShowBackoffice() { BackOfficeWindow window = Application.getInstance().getBackOfficeWindow(); if (window == null) { window = new BackOfficeWindow(); Application.getInstance().setBackOfficeWindow(window); } window.setVisible(true); window.toFront(); } private void doShutdown() { Application.getInstance().shutdownPOS(); } private void doLogout() { Application.getInstance().logout(); } private void doSettleTicket() { try { List<Ticket> selectedTickets = openTicketList.getSelectedTickets(); if (selectedTickets.size() == 0 || selectedTickets.size() > 1) { POSMessageDialog.showMessage("Please select one ticket to settle."); return; } Ticket ticket = selectedTickets.get(0); PaymentTypeSelectionDialog dialog = new PaymentTypeSelectionDialog(); dialog.setSize(250, 400); dialog.open(); if (!dialog.isCanceled()) { ticket = TicketDAO.getInstance().initializeTicket(ticket); SettleTicketView view = SettleTicketView.getInstance(); view.setPaymentView(dialog.getSelectedPaymentView()); view.setCurrentTicket(ticket); RootView.getInstance().showView(SettleTicketView.VIEW_NAME); } } catch (Exception e) { POSMessageDialog.showError(POSConstants.RESTART_ERROR_MESSAGE, e); } } private void doPrintTicket() { List<Ticket> selectedTickets = openTicketList.getSelectedTickets(); if (selectedTickets.size() == 0 || selectedTickets.size() > 1) { POSMessageDialog.showMessage("Please select one ticket to print."); return; } Ticket ticket = selectedTickets.get(0); try { ticket = TicketDAO.getInstance().initializeTicket(ticket); PosPrintService.printTicket(ticket); // PRINT ACTION String actionMessage = "CHK#:" + ticket.getId(); ActionHistoryDAO.getInstance().saveHistory(Application.getCurrentUser(), ActionHistory.PRINT_CHECK, actionMessage); } catch (Exception e) { POSMessageDialog.showError(this, e.getMessage(), e); } } private void doVoidTicket() { try { List<Ticket> selectedTickets = openTicketList.getSelectedTickets(); if (selectedTickets.size() == 0 || selectedTickets.size() > 1) { POSMessageDialog.showMessage("Please select one ticket to void."); return; } Ticket ticket = selectedTickets.get(0); if (!ticket.getTotalAmount().equals(ticket.getDueAmount())) { POSMessageDialog.showMessage("You cannot void the ticket since it is partially paid."); return; } //initialize the ticket. ticket = TicketDAO.getInstance().initializeTicket(ticket); VoidTicketDialog voidTicketDialog = new VoidTicketDialog(Application.getPosWindow(), true); voidTicketDialog.setTicket(ticket); voidTicketDialog.open(); if (!voidTicketDialog.isCanceled()) { updateView(); } } catch (Exception e) { POSMessageDialog.showError(POSConstants.RESTART_ERROR_MESSAGE, e); } } private void doSplitTicket() { try { List<Ticket> selectedTickets = openTicketList.getSelectedTickets(); if (selectedTickets.size() == 0 || selectedTickets.size() > 1) { POSMessageDialog.showMessage("Please select one ticket to split."); return; } Ticket ticket = selectedTickets.get(0); if (!ticket.getTotalAmount().equals(ticket.getDueAmount())) { POSMessageDialog.showMessage("You cannot void the ticket since it is partially paid."); return; } //initialize the ticket. ticket = TicketDAO.getInstance().initializeTicket(ticket); SplitTicketDialog dialog = new SplitTicketDialog(); dialog.setTicket(ticket); dialog.open(); updateView(); } catch (Exception e) { POSMessageDialog.showError(POSConstants.RESTART_ERROR_MESSAGE, e); } } private void doEditTicket() { List<Ticket> selectedTickets = openTicketList.getSelectedTickets(); if (selectedTickets.size() == 0 || selectedTickets.size() > 1) { POSMessageDialog.showMessage("Please select one ticket to edit."); return; } Ticket ticket = selectedTickets.get(0); editTicket(ticket); } private void editTicket(Ticket ticket) { //initialize the ticket. ticket = TicketDAO.getInstance().initializeTicket(ticket); OrderView.getInstance().setCurrentTicket(ticket); RootView.getInstance().showView(OrderView.VIEW_NAME); } private void doCreateNewTicket() { createNewTicket(); } private void createNewTicket() { NumberSelectionDialog2 dialog = new NumberSelectionDialog2(); dialog.setTitle("Please enter a table number"); dialog.pack(); dialog.open(); if (dialog.isCanceled()) { return; } int tableNumber = (int) dialog.getValue(); if (tableNumber == 0) { POSMessageDialog.showError(this, "Table number cannot be 0"); return; } TicketDAO dao = TicketDAO.getInstance(); Ticket ticket = dao.findTicketByTableNumber(tableNumber); if (ticket != null) { int option = JOptionPane.showOptionDialog(this, "The table is already occupied, what do you want to do?", "Confirm", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { "Create New Ticket", "Edit Existing Ticket", "Cancel" }, null); if (option == JOptionPane.YES_OPTION) { //createNewTicket(); //return; //fall down to create new ticket. } else if (option == JOptionPane.NO_OPTION) { editTicket(ticket); return; } else { return; } } dialog.setTitle("Please enter number of guest"); dialog.setValue(0); dialog.open(); if (dialog.isCanceled()) { return; } int numberOfGuests = (int) dialog.getValue(); if (numberOfGuests == 0) { POSMessageDialog.showError(this, "Guest number cannot be 0"); return; } Application application = Application.getInstance(); ticket = new Ticket(); ticket.setTableNumber(tableNumber); ticket.setNumberOfGuests(numberOfGuests); ticket.setTerminal(application.getTerminal()); ticket.setOwner(Application.getCurrentUser()); ticket.setShift(application.getCurrentShift()); Calendar currentTime = Calendar.getInstance(); ticket.setCreateDate(currentTime.getTime()); ticket.setCreationHour(currentTime.get(Calendar.HOUR_OF_DAY)); OrderView.getInstance().setCurrentTicket(ticket); RootView.getInstance().showView(OrderView.VIEW_NAME); } private void doTakeout() { Application application = Application.getInstance(); Ticket ticket = new Ticket(); ticket.setTableNumber(Ticket.TAKE_OUT); ticket.setTerminal(application.getTerminal()); ticket.setOwner(Application.getCurrentUser()); ticket.setShift(application.getCurrentShift()); Calendar currentTime = Calendar.getInstance(); ticket.setCreateDate(currentTime.getTime()); ticket.setCreationHour(currentTime.get(Calendar.HOUR_OF_DAY)); OrderView.getInstance().setCurrentTicket(ticket); RootView.getInstance().showView(OrderView.VIEW_NAME); } private void doPayout() { PayoutDialog dialog = new PayoutDialog(Application.getPosWindow(), true); dialog.open(); } private void doShowManagerWindow() { ManagerDialog dialog = new ManagerDialog(); dialog.open(); } private void doShowTicketInfo() { Ticket ticket = openTicketList.getSelectedTicket(); if (ticket == null) { POSMessageDialog.showMessage("Please select a ticket from the open ticket list."); return; } TicketDetailDialog dialog = new TicketDetailDialog(Application.getPosWindow(), true); dialog.setButtonPanelVisible(false); dialog.setBalanceDuePanelVisible(false); dialog.setTicket(ticket); dialog.pack(); dialog.open(); } private void doGroupSettle() { List<Ticket> selectedTickets = openTicketList.getSelectedTickets(); if (selectedTickets.size() < 2) { POSMessageDialog.showError("You must select two or more ticket for group settle"); return; } PaymentTypeSelectionDialog dialog = new PaymentTypeSelectionDialog(); dialog.setSize(250, 400); dialog.open(); if (!dialog.isCanceled()) { for (int i = 0; i < selectedTickets.size(); i++) { Ticket ticket = selectedTickets.get(i); ticket = TicketDAO.getInstance().initializeTicket(ticket); selectedTickets.set(i, ticket); } SettleTicketView view = SettleTicketView.getInstance(); view.setPaymentView(dialog.getSelectedPaymentView()); view.setTicketsToSettle(selectedTickets); RootView.getInstance().showView(SettleTicketView.VIEW_NAME); } } public void updateView() { User user = Application.getCurrentUser(); UserType userType = user.getNewUserType(); if (userType != null) { Set<UserPermission> permissions = userType.getPermissions(); if (permissions != null) { btnNewTicket.setEnabled(false); btnBackOffice.setEnabled(false); btnEditTicket.setEnabled(false); btnGroupSettle.setEnabled(false); btnManager.setEnabled(false); btnPayout.setEnabled(false); btnReopenTicket.setEnabled(false); btnSettleTicket.setEnabled(false); btnSplitTicket.setEnabled(false); btnTakeout.setEnabled(false); btnVoidTicket.setEnabled(false); for (UserPermission permission : permissions) { if (permission.equals(UserPermission.VOID_TICKET)) { btnVoidTicket.setEnabled(true); } else if (permission.equals(UserPermission.PAY_OUT)) { btnPayout.setEnabled(true); } else if (permission.equals(UserPermission.SETTLE_TICKET)) { btnSettleTicket.setEnabled(true); btnGroupSettle.setEnabled(true); } else if (permission.equals(UserPermission.REOPEN_TICKET)) { btnReopenTicket.setEnabled(true); } else if (permission.equals(UserPermission.PERFORM_MANAGER_TASK)) { btnManager.setEnabled(true); } else if (permission.equals(UserPermission.SPLIT_TICKET)) { btnSplitTicket.setEnabled(true); } else if (permission.equals(UserPermission.TAKE_OUT)) { btnTakeout.setEnabled(true); } else if (permission.equals(UserPermission.VIEW_BACK_OFFICE)) { btnBackOffice.setEnabled(true); } else if (permission.equals(UserPermission.PAY_OUT)) { btnPayout.setEnabled(true); } else if (permission.equals(UserPermission.EDIT_TICKET)) { btnEditTicket.setEnabled(true); } else if (permission.equals(UserPermission.CREATE_NEW_TICKET)) { btnNewTicket.setEnabled(true); } } } } updateTicketList(); } private void updateTicketList() { User user = Application.getCurrentUser(); TicketDAO dao = TicketDAO.getInstance(); List<Ticket> openTickets = null; boolean showAllOpenTicket = false; if (user.getNewUserType() != null) { Set<UserPermission> permissions = user.getNewUserType().getPermissions(); if (permissions != null) { for (UserPermission permission : permissions) { if(permission.equals(UserPermission.VIEW_ALL_OPEN_TICKET)) { showAllOpenTicket = true; break; } } } } if(showAllOpenTicket) { openTickets = dao.findOpenTickets(); } else { openTickets = dao.findOpenTicketsForUser(user); } openTicketList.setTickets(openTickets); lblUserName.setText("Welcome " + user.toString() + ". You have " + openTickets.size() + " open tickets."); } // Variables declaration - do not modify//GEN-BEGIN:variables private com.floreantpos.swing.PosButton btnBackOffice; private com.floreantpos.swing.PosButton btnClockOut; private com.floreantpos.swing.PosButton btnEditTicket; private com.floreantpos.swing.PosButton btnGroupSettle; private com.floreantpos.swing.PosButton btnInfo; private com.floreantpos.swing.PosButton btnLogout; private com.floreantpos.swing.PosButton btnManager; private com.floreantpos.swing.PosButton btnNewTicket; private com.floreantpos.swing.PosButton btnPayout; private com.floreantpos.swing.PosButton btnPrintTicket; private com.floreantpos.swing.PosButton btnReopenTicket; private com.floreantpos.swing.PosButton btnSettleTicket; private com.floreantpos.swing.PosButton btnShutdown; private com.floreantpos.swing.PosButton btnSplitTicket; private com.floreantpos.swing.PosButton btnTakeout; private com.floreantpos.swing.PosButton btnVoidTicket; private javax.swing.JLabel lblUserName; private com.floreantpos.ui.TicketListView openTicketList; // End of variables declaration//GEN-END:variables @Override public void setVisible(boolean aFlag) { super.setVisible(aFlag); if (aFlag) { updateView(); ticketListUpdater.start(); } else { ticketListUpdater.stop(); } } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == btnBackOffice) { doShowBackoffice(); } if (source == btnClockOut) { doClockOut(); } if (source == btnEditTicket) { doEditTicket(); } if (source == btnGroupSettle) { doGroupSettle(); } if (source == btnInfo) { doShowTicketInfo(); } if (source == btnLogout) { doLogout(); } if (source == btnManager) { doShowManagerWindow(); } if (source == btnNewTicket) { doCreateNewTicket(); } if (source == btnPayout) { doPayout(); } if (source == btnPrintTicket) { doPrintTicket(); } if (source == btnReopenTicket) { doReopenTicket(); } if (source == btnSettleTicket) { doSettleTicket(); } if (source == btnShutdown) { doShutdown(); } if (source == btnSplitTicket) { doSplitTicket(); } if (source == btnTakeout) { doTakeout(); } if (source == btnVoidTicket) { doVoidTicket(); } } private class TicketListUpdaterTask implements ActionListener { public void actionPerformed(ActionEvent e) { updateTicketList(); } } }