/* * TicketView.java * * Created on August 4, 2006, 3:42 PM */ package com.floreantpos.ui.views.order; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.text.DecimalFormat; import java.text.NumberFormat; import javax.swing.JPanel; import com.floreantpos.PosException; import com.floreantpos.config.PrintConfig; import com.floreantpos.main.Application; import com.floreantpos.model.MenuCategory; import com.floreantpos.model.MenuGroup; import com.floreantpos.model.MenuItem; import com.floreantpos.model.Ticket; import com.floreantpos.model.TicketItem; import com.floreantpos.model.TicketItemModifier; import com.floreantpos.model.dao.MenuItemDAO; import com.floreantpos.print.PosPrintService; import com.floreantpos.ui.dialog.POSMessageDialog; import com.floreantpos.ui.views.SwitchboardView; import com.floreantpos.ui.views.order.actions.OrderListener; /** * * @author MShahriar */ public class TicketView extends JPanel { private java.util.Vector<OrderListener> orderListeners = new java.util.Vector<OrderListener>(); private Ticket ticket; public final static String VIEW_NAME = "TICKET_VIEW"; public TicketView() { initComponents(); chkTaxExempt.setEnabled(false); ticketViewerTable.getRenderer().setInTicketScreen(true); ticketViewerTable.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { updateSelectionView(); } } }); } /** 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; jPanel1 = new com.floreantpos.swing.TransparentPanel(); jSeparator1 = new javax.swing.JSeparator(); jPanel3 = new com.floreantpos.swing.TransparentPanel(); jLabel5 = new javax.swing.JLabel(); jLabel6 = new javax.swing.JLabel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jSeparator2 = new javax.swing.JSeparator(); jSeparator3 = new javax.swing.JSeparator(); tfSubtotal = new javax.swing.JTextField(); tfTax = new javax.swing.JTextField(); tfDiscount = new javax.swing.JTextField(); tfTotal = new javax.swing.JTextField(); chkTaxExempt = new javax.swing.JCheckBox(); bottomPanel = new com.floreantpos.swing.TransparentPanel(); btnPay = new com.floreantpos.swing.PosButton(); btnCancel = new com.floreantpos.swing.PosButton(); btnFinish = new com.floreantpos.swing.PosButton(); jPanel5 = new com.floreantpos.swing.TransparentPanel(); btnIncreaseAmount = new com.floreantpos.swing.PosButton(); btnDecreaseAmount = new com.floreantpos.swing.PosButton(); btnScrollUp = new com.floreantpos.swing.PosButton(); btnScrollDown = new com.floreantpos.swing.PosButton(); btnDelete = new com.floreantpos.swing.PosButton(); jPanel2 = new com.floreantpos.swing.TransparentPanel(); jScrollPane1 = new javax.swing.JScrollPane(); ticketViewerTable = new com.floreantpos.ui.ticket.TicketViewerTable(); setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Ticket", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION)); setPreferredSize(new java.awt.Dimension(280, 463)); setLayout(new java.awt.BorderLayout(5, 5)); jPanel1.setLayout(new java.awt.BorderLayout(5, 5)); jPanel1.add(jSeparator1, java.awt.BorderLayout.CENTER); jPanel3.setLayout(new java.awt.GridBagLayout()); jLabel5.setFont(new java.awt.Font("Tahoma", 1, 12)); jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); jLabel5.setText("Subtotal:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(3, 5, 0, 0); jPanel3.add(jLabel5, gridBagConstraints); jLabel6.setFont(new java.awt.Font("Tahoma", 1, 12)); jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); jLabel6.setText("Total:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(0, 5, 3, 0); jPanel3.add(jLabel6, gridBagConstraints); jLabel1.setFont(new java.awt.Font("Tahoma", 1, 12)); jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); jLabel1.setText("Discount:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); jPanel3.add(jLabel1, gridBagConstraints); jLabel2.setFont(new java.awt.Font("Tahoma", 1, 12)); jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); jLabel2.setText("Tax:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); jPanel3.add(jLabel2, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; jPanel3.add(jSeparator2, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; jPanel3.add(jSeparator3, gridBagConstraints); tfSubtotal.setEditable(false); tfSubtotal.setFont(new java.awt.Font("Tahoma", 1, 12)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(3, 5, 0, 5); jPanel3.add(tfSubtotal, gridBagConstraints); tfTax.setEditable(false); tfTax.setFont(new java.awt.Font("Tahoma", 1, 12)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(3, 5, 0, 5); jPanel3.add(tfTax, gridBagConstraints); tfDiscount.setEditable(false); tfDiscount.setFont(new java.awt.Font("Tahoma", 1, 12)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(3, 5, 0, 5); jPanel3.add(tfDiscount, gridBagConstraints); tfTotal.setEditable(false); tfTotal.setFont(new java.awt.Font("Tahoma", 1, 12)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(3, 5, 3, 5); jPanel3.add(tfTotal, gridBagConstraints); chkTaxExempt.setFont(new java.awt.Font("Tahoma", 1, 12)); chkTaxExempt.setText("Tax Exempt"); chkTaxExempt.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); chkTaxExempt.setFocusable(false); chkTaxExempt.setMargin(new java.awt.Insets(0, 0, 0, 0)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.insets = new java.awt.Insets(0, 5, 3, 0); jPanel3.add(chkTaxExempt, gridBagConstraints); jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH); bottomPanel.setLayout(new java.awt.GridBagLayout()); btnPay.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/pay_32.png"))); btnPay.setText("PAY NOW"); btnPay.setPreferredSize(new java.awt.Dimension(76, 45)); btnPay.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doPayNow(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 0, 5, 0); bottomPanel.add(btnPay, gridBagConstraints); btnCancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/cancel_32.png"))); btnCancel.setText("CANCEL"); btnCancel.setPreferredSize(new java.awt.Dimension(76, 45)); btnCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doCancelOrder(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; bottomPanel.add(btnCancel, gridBagConstraints); btnFinish.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/finish_32.png"))); btnFinish.setText("FINISH"); btnFinish.setPreferredSize(new java.awt.Dimension(76, 45)); btnFinish.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doFinishOrder(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); bottomPanel.add(btnFinish, gridBagConstraints); jPanel1.add(bottomPanel, java.awt.BorderLayout.SOUTH); jPanel5.setLayout(new java.awt.GridBagLayout()); btnIncreaseAmount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/add_user_32.png"))); btnIncreaseAmount.setPreferredSize(new java.awt.Dimension(76, 45)); btnIncreaseAmount.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doIncreaseAmount(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; jPanel5.add(btnIncreaseAmount, gridBagConstraints); btnDecreaseAmount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/minus_32.png"))); btnDecreaseAmount.setPreferredSize(new java.awt.Dimension(76, 45)); btnDecreaseAmount.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doDecreaseAmount(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); jPanel5.add(btnDecreaseAmount, gridBagConstraints); btnScrollUp.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/up_32.png"))); btnScrollUp.setPreferredSize(new java.awt.Dimension(76, 45)); btnScrollUp.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doScrollUp(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); jPanel5.add(btnScrollUp, gridBagConstraints); btnScrollDown.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/down_32.png"))); btnScrollDown.setPreferredSize(new java.awt.Dimension(76, 45)); btnScrollDown.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doScrollDown(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 0); jPanel5.add(btnScrollDown, gridBagConstraints); btnDelete.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/delete_32.png"))); btnDelete.setText("DELETE"); btnDelete.setPreferredSize(new java.awt.Dimension(80, 17)); btnDelete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doDeleteSelection(evt); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0); jPanel5.add(btnDelete, gridBagConstraints); jPanel1.add(jPanel5, java.awt.BorderLayout.CENTER); add(jPanel1, java.awt.BorderLayout.SOUTH); jPanel2.setLayout(new java.awt.BorderLayout()); jScrollPane1.setBorder(null); jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); jScrollPane1.setPreferredSize(new java.awt.Dimension(180, 200)); jScrollPane1.setViewportView(ticketViewerTable); jPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER); add(jPanel2, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents private void doFinishOrder(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doFinishOrder try { updateModel(); OrderController.saveOrder(ticket); if (PrintConfig.isPrintReceiptWhenSetteled()) { PosPrintService.printTicket(ticket); } if (PrintConfig.isPrintKitchenWhenSetteled()) { if (ticket.needsKitchenPrint()) { PosPrintService.printToKitcken(ticket); } ticket.clearDeletedItems(); OrderController.saveOrder(ticket); } RootView.getInstance().showView(SwitchboardView.VIEW_NAME); } catch (PosException x) { POSMessageDialog.showError(x.getMessage()); } catch (Exception e) { POSMessageDialog.showError(Application.getPosWindow(), POSMessageDialog.ERROR_MESSAGE, e); } }//GEN-LAST:event_doFinishOrder private void doCancelOrder(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doCancelOrder RootView.getInstance().showView(SwitchboardView.VIEW_NAME); }//GEN-LAST:event_doCancelOrder private void updateModel() { if (ticket.getTicketItems() == null || ticket.getTicketItems().size() == 0) { throw new PosException("Ticket is empty."); } ticket.calculatePrice(); } private void doPayNow(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doPayNow try { updateModel(); firePayOrderSelected(); } catch (PosException e) { POSMessageDialog.showError(e.getMessage()); } }//GEN-LAST:event_doPayNow private void doDeleteSelection(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doDeleteSelection Object object = ticketViewerTable.deleteSelectedItem(); if (object != null) { updateView(); if (object instanceof TicketItemModifier) { ModifierView modifierView = OrderView.getInstance().getModifierView(); if (modifierView.isVisible()) { modifierView.updateVisualRepresentation(); } } } }//GEN-LAST:event_doDeleteSelection private void doIncreaseAmount(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doIncreaseAmount if (ticketViewerTable.increaseItemAmount()) { ModifierView modifierView = OrderView.getInstance().getModifierView(); if (modifierView.isVisible()) { modifierView.updateVisualRepresentation(); } updateView(); } }//GEN-LAST:event_doIncreaseAmount private void doDecreaseAmount(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doDecreaseAmount if (ticketViewerTable.decreaseItemAmount()) { ModifierView modifierView = OrderView.getInstance().getModifierView(); if (modifierView.isVisible()) { modifierView.updateVisualRepresentation(); } updateView(); } }//GEN-LAST:event_doDecreaseAmount private void doScrollDown(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doScrollDown ticketViewerTable.scrollDown(); }//GEN-LAST:event_doScrollDown private void doScrollUp(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doScrollUp ticketViewerTable.scrollUp(); }//GEN-LAST:event_doScrollUp // Variables declaration - do not modify//GEN-BEGIN:variables private com.floreantpos.swing.TransparentPanel bottomPanel; private com.floreantpos.swing.PosButton btnCancel; private com.floreantpos.swing.PosButton btnDecreaseAmount; private com.floreantpos.swing.PosButton btnDelete; private com.floreantpos.swing.PosButton btnFinish; private com.floreantpos.swing.PosButton btnIncreaseAmount; private com.floreantpos.swing.PosButton btnPay; private com.floreantpos.swing.PosButton btnScrollDown; private com.floreantpos.swing.PosButton btnScrollUp; private javax.swing.JCheckBox chkTaxExempt; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private com.floreantpos.swing.TransparentPanel jPanel1; private com.floreantpos.swing.TransparentPanel jPanel2; private com.floreantpos.swing.TransparentPanel jPanel3; private com.floreantpos.swing.TransparentPanel jPanel5; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JSeparator jSeparator1; private javax.swing.JSeparator jSeparator2; private javax.swing.JSeparator jSeparator3; private javax.swing.JTextField tfDiscount; private javax.swing.JTextField tfSubtotal; private javax.swing.JTextField tfTax; private javax.swing.JTextField tfTotal; private com.floreantpos.ui.ticket.TicketViewerTable ticketViewerTable; // End of variables declaration//GEN-END:variables public Ticket getTicket() { return ticket; } public void setTicket(Ticket _ticket) { this.ticket = _ticket; ticketViewerTable.setTicket(_ticket); updateView(); } public void addTicketItem(TicketItem ticketItem) { ticketViewerTable.addTicketItem(ticketItem); updateView(); } public void removeModifier(TicketItem parent, TicketItemModifier modifier) { ticketViewerTable.removeModifier(parent, modifier); } private NumberFormat numberFormat = new DecimalFormat("0.00"); public void updateAllView() { ticketViewerTable.updateView(); updateView(); } public void selectRow(int rowIndex) { ticketViewerTable.selectRow(rowIndex); } public void updateView() { if (ticket == null || ticket.getTicketItems() == null || ticket.getTicketItems().size() <= 0) { tfSubtotal.setText(""); tfDiscount.setText(""); tfTax.setText(""); tfTotal.setText(""); return; } ticket.calculatePrice(); // double calculatedSubtotalPrice = ticket.getCalculatedSubtotalPrice(); // double discount = ticket.getCalculatedTotalDiscount(); // double calculatedTax = ticket.getCalculatedTax(); // double calculatedTotalPrice = ticket.getCalculatedTotalPrice(); tfSubtotal.setText(numberFormat.format(ticket.getSubtotalAmount())); tfDiscount.setText(numberFormat.format(ticket.getDiscountAmount())); if (ticket.isTaxExempt()) { tfTax.setText("0"); chkTaxExempt.setSelected(true); } else { tfTax.setText(numberFormat.format(ticket.getTaxAmount())); chkTaxExempt.setSelected(false); } tfTotal.setText(numberFormat.format(ticket.getTotalAmount())); } public void addOrderListener(OrderListener listenre) { orderListeners.add(listenre); } public void removeOrderListener(OrderListener listenre) { orderListeners.remove(listenre); } public void firePayOrderSelected() { for (OrderListener listener : orderListeners) { listener.payOrderSelected(getTicket()); } } public void setControlsVisible(boolean visible) { if (visible) { bottomPanel.setVisible(true); btnIncreaseAmount.setEnabled(true); btnDecreaseAmount.setEnabled(true); btnDelete.setEnabled(true); } else { bottomPanel.setVisible(false); btnIncreaseAmount.setEnabled(false); btnDecreaseAmount.setEnabled(false); btnDelete.setEnabled(false); } } private void updateSelectionView() { Object selectedObject = ticketViewerTable.getSelected(); OrderView orderView = OrderView.getInstance(); TicketItem selectedItem = null; if (selectedObject instanceof TicketItem) { selectedItem = (TicketItem) selectedObject; MenuItemDAO dao = new MenuItemDAO(); MenuItem menuItem = dao.get(selectedItem.getItemId()); MenuGroup menuGroup = menuItem.getParent(); MenuItemView itemView = OrderView.getInstance().getItemView(); if (!menuGroup.equals(itemView.getMenuGroup())) { itemView.setMenuGroup(menuGroup); } orderView.showView(MenuItemView.VIEW_NAME); MenuCategory menuCategory = menuGroup.getParent(); orderView.getCategoryView().setSelectedCategory(menuCategory); return; } else if (selectedObject instanceof TicketItemModifier) { selectedItem = ((TicketItemModifier) selectedObject).getParent().getParent(); } if (selectedItem == null) return; ModifierView modifierView = orderView.getModifierView(); if (selectedItem.isHasModifiers()) { MenuItemDAO dao = new MenuItemDAO(); MenuItem menuItem = dao.get(selectedItem.getItemId()); if (!menuItem.equals(modifierView.getMenuItem())) { menuItem = dao.initialize(menuItem); modifierView.setMenuItem(menuItem, selectedItem); } MenuCategory menuCategory = menuItem.getParent().getParent(); orderView.getCategoryView().setSelectedCategory(menuCategory); orderView.showView(ModifierView.VIEW_NAME); } } }