/* * GroupView.java * * Created on August 5, 2006, 9:29 PM */ package com.floreantpos.ui.views.order; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.Vector; import javax.swing.JOptionPane; import com.floreantpos.PosException; import com.floreantpos.model.MenuItem; import com.floreantpos.model.MenuItemModifierGroup; import com.floreantpos.model.MenuModifier; import com.floreantpos.model.MenuModifierGroup; import com.floreantpos.model.TicketItem; import com.floreantpos.model.TicketItemModifier; import com.floreantpos.model.TicketItemModifierGroup; import com.floreantpos.swing.PosButton; import com.floreantpos.ui.dialog.POSMessageDialog; import com.floreantpos.ui.views.order.actions.ModifierSelectionListener; /** * * @author MShahriar */ public class ModifierView extends SelectionView { private Vector<ModifierSelectionListener> listenerList = new Vector<ModifierSelectionListener>(); private MenuItem parentMenuItem; private TicketItem parentTicketItem; private HashMap<String, ModifierButton> buttonMap = new HashMap<String, ModifierButton>(); // private final static ImageIcon normalIcon = IconFactory.getIcon("normalModifier16.png"); // private final static ImageIcon noIcon = IconFactory.getIcon("noModifier16.png"); // private final static ImageIcon extraIcon = IconFactory.getIcon("extraModifier16.png"); public static final String VIEW_NAME = "MODIFIER_VIEW"; /** Creates new form GroupView */ public ModifierView() { super("MODIFIERS"); } public MenuItem getMenuItem() { return parentMenuItem; } public void setMenuItem(MenuItem menuItem, TicketItem ticketItem) { this.parentMenuItem = menuItem; this.parentTicketItem = ticketItem; reset(); //MenuItemDAO dao = new MenuItemDAO(); try { List<MenuItemModifierGroup> menuItemModifierGroups = menuItem.getMenuItemModiferGroups(); for (Iterator<MenuItemModifierGroup> iter = menuItemModifierGroups.iterator(); iter.hasNext();) { MenuItemModifierGroup menuItemModifierGroup = iter.next(); MenuModifierGroup group = menuItemModifierGroup.getModifierGroup(); addSeparator(group.getName()); Set<MenuModifier> modifiers = group.getModifiers(); for (MenuModifier modifier : modifiers) { modifier.setMenuItemModifierGroup(menuItemModifierGroup); ModifierButton modifierButton = new ModifierButton(modifier); String key = modifier.getId() + "_" + modifier.getModifierGroup().getId(); buttonMap.put(key, modifierButton); addButton(modifierButton); } } revalidate(); updateVisualRepresentation(); } catch (PosException e) { POSMessageDialog.showError(this, "An error has occured", e); } } public void addModifierSelectionListener(ModifierSelectionListener listener) { listenerList.add(listener); } public void removeModifierSelectionListener(ModifierSelectionListener listener) { listenerList.remove(listener); } private void fireModifierSelectionFinished() { for (ModifierSelectionListener listener : listenerList) { listener.modifierSelectionFiniched(parentMenuItem); } } public void updateVisualRepresentation() { // Collection<ModifierButton> modifierButtons = buttonMap.values(); // for (ModifierButton modifierButton : modifierButtons) { // modifierButton.updateView(null); // } List<TicketItemModifierGroup> ticketItemModifierGroups = parentTicketItem.getTicketItemModifierGroups(); if (ticketItemModifierGroups != null) { for (TicketItemModifierGroup ticketItemModifierGroup : ticketItemModifierGroups) { List<TicketItemModifier> ticketItemModifiers = ticketItemModifierGroup.getTicketItemModifiers(); if (ticketItemModifiers != null) { int total = 0; int max = ticketItemModifierGroup.getMaxQuantity(); for (TicketItemModifier ticketItemModifier : ticketItemModifiers) { String key = ticketItemModifier.getItemId() + "_" + ticketItemModifier.getGroupId(); ModifierButton button = buttonMap.get(key); if (ticketItemModifier.getModifierType() != TicketItemModifier.NO_MODIFIER) { total += ticketItemModifier.getItemCount(); if (total > max) { ticketItemModifier.setModifierType(TicketItemModifier.EXTRA_MODIFIER); } else { ticketItemModifier.setModifierType(TicketItemModifier.NORMAL_MODIFIER); } } button.updateView(ticketItemModifier); } } } } } public TicketItem getParentTicketItem() { return parentTicketItem; } @Override public void doGoBack() { List<MenuItemModifierGroup> menuItemModifierGroups = parentMenuItem.getMenuItemModiferGroups(); List<TicketItemModifierGroup> ticketItemModifierGroups = parentTicketItem.getTicketItemModifierGroups(); boolean requiredModifierAdded = true; if (menuItemModifierGroups != null) { outer: for (MenuItemModifierGroup menuItemModifierGroup : menuItemModifierGroups) { int minQuantity = menuItemModifierGroup.getMinQuantity(); if (minQuantity == 0) continue; if (ticketItemModifierGroups == null) { requiredModifierAdded = false; break outer; } for (TicketItemModifierGroup ticketItemModifierGroup : ticketItemModifierGroups) { if (ticketItemModifierGroup.countItems(false) < minQuantity) { requiredModifierAdded = false; break outer; } } } } if (!requiredModifierAdded) { int option = JOptionPane.showConfirmDialog(this, "Some required modifiers are not added, do you really want to go back?", "Confirm", JOptionPane.YES_NO_OPTION); if (option != JOptionPane.YES_OPTION) { return; } } fireModifierSelectionFinished(); } private class ModifierButton extends PosButton implements ActionListener { private MenuModifier menuModifier; public ModifierButton(MenuModifier modifier) { this.menuModifier = modifier; setText(modifier.getName()); addActionListener(this); } void updateView(TicketItemModifier ticketItemModifier) { if (ticketItemModifier == null || ticketItemModifier.getModifierType() == TicketItemModifier.MODIFIER_NOT_INITIALIZED) { setBackground(null); //setIcon(null); return; } if (ticketItemModifier.getModifierType() == TicketItemModifier.NORMAL_MODIFIER) { //setIcon(normalIcon); setBackground(Color.GREEN.darker()); } else if (ticketItemModifier.getModifierType() == TicketItemModifier.NO_MODIFIER) { //setIcon(noIcon); setBackground(Color.RED.darker()); } else if (ticketItemModifier.getModifierType() == TicketItemModifier.EXTRA_MODIFIER) { //setIcon(extraIcon); setBackground(Color.ORANGE); } } public void actionPerformed(ActionEvent e) { TicketItemModifierGroup ticketItemModifierGroup = parentTicketItem.findTicketItemModifierGroup(menuModifier, true); int modifierCount = ticketItemModifierGroup.countItems(true); int maxModifier = ticketItemModifierGroup.getMaxQuantity(); TicketItemModifier ticketItemModifier = ticketItemModifierGroup.findTicketItemModifier(menuModifier); TicketView ticketView = OrderView.getInstance().getTicketView(); if (ticketItemModifier == null) { TicketItemModifier m = ticketItemModifierGroup.addTicketItemModifier(menuModifier, modifierCount >= maxModifier ? TicketItemModifier.EXTRA_MODIFIER : TicketItemModifier.NORMAL_MODIFIER); updateView(m); ticketView.updateAllView(); ticketView.selectRow(m.getTableRowNum()); return; } int modifierType = TicketItemModifier.MODIFIER_NOT_INITIALIZED; if(ticketItemModifier.getModifierType() != null) { modifierType = ticketItemModifier.getModifierType().intValue(); } switch (modifierType) { case TicketItemModifier.MODIFIER_NOT_INITIALIZED: ticketItemModifier.setModifierType(TicketItemModifier.NORMAL_MODIFIER); updateVisualRepresentation(); ticketView.updateAllView(); ticketView.selectRow(ticketItemModifier.getTableRowNum()); break; case TicketItemModifier.NORMAL_MODIFIER: case TicketItemModifier.EXTRA_MODIFIER: ticketItemModifier.setModifierType(TicketItemModifier.NO_MODIFIER); updateVisualRepresentation(); ticketView.updateAllView(); ticketView.selectRow(ticketItemModifier.getTableRowNum()); break; case TicketItemModifier.NO_MODIFIER: ticketItemModifier.setModifierType(TicketItemModifier.MODIFIER_NOT_INITIALIZED); ticketItemModifierGroup.removeTicketItemModifier(ticketItemModifier); updateView(ticketItemModifier); updateVisualRepresentation(); ticketView.updateAllView(); ticketView.selectRow(ticketItemModifier.getTableRowNum() - 1); break; } } } }