package cz.cvut.fel.restauracefel.server.service.controllers; import cz.cvut.fel.restauracefel.library.Enums.EnumMenuItemArray; import cz.cvut.fel.restauracefel.hibernate.Account; import cz.cvut.fel.restauracefel.hibernate.Discount; import cz.cvut.fel.restauracefel.hibernate.DiscountType; import cz.cvut.fel.restauracefel.hibernate.MenuItem; import cz.cvut.fel.restauracefel.hibernate.MenuItemType; import cz.cvut.fel.restauracefel.hibernate.MenuMenuItem; import cz.cvut.fel.restauracefel.hibernate.UsedMaterial; import java.util.Iterator; import java.util.List; /** * * @author Jarda * @author Tomas Hnizdil */ public class MenuItemController { private static MenuItemController instance = null; private MenuItem menuItem = null; private MenuItemController() { } public static MenuItemController getInstance() { if (instance == null) { instance = new MenuItemController(); } return instance; } //vytvari novou polozku menu public boolean createMenuItem(String name, double price, String quantity, int isAvailable, int menuItemTypeId) { menuItem = MenuItem.findByName(name); if (menuItem == null) { MenuItemType menuItemType = MenuItemType.findById(menuItemTypeId); if (menuItemType == null) { return false; } menuItemType.setItemCount(menuItemType.getItemCount() + 1); menuItem = new MenuItem(name, price, quantity, isAvailable, 0, menuItemType); menuItem.create(); return true; } else { return false; } } //maze stavajici polozku menu s danym Id public boolean deleteMenuItem(int menuItemId) { menuItem = MenuItem.findById(menuItemId); if (menuItem == null) { return false; } else { menuItem.getMenuItemType().setItemCount(menuItem.getMenuItemType().getItemCount() - 1); List<MenuMenuItem> list = MenuMenuItem.findByMenuItem(menuItemId); if (list != null) { Iterator it1 = list.iterator(); MenuMenuItem mmi = null; while (it1.hasNext()) { mmi = (MenuMenuItem) it1.next(); //mmi.delete(); mmi.setIsDeleted(1); } } List<UsedMaterial> list2 = UsedMaterial.findByMenuItem(menuItemId); if (list2 != null) { Iterator it2 = list2.iterator(); UsedMaterial um = null; while (it2.hasNext()) { um = (UsedMaterial) it2.next(); //um.delete(); um.setIsDeleted(1); } } //menuItem.delete(); menuItem.setIsDeleted(1); return true; } } //aktualizuje stavajici polozku menu s danym Id public boolean updateMenuItem(int menuItemId, String name, double price, String quantity, int isAvailable, int menuItemTypeId) { menuItem = MenuItem.findById(menuItemId); if (menuItem == null) { return false; } MenuItem mi = MenuItem.findByName(name); if (mi != null && mi != menuItem) { return false; } MenuItemType menuItemType = MenuItemType.findById(menuItemTypeId); if (menuItemType == null) { return false; } menuItem.setName(name); menuItem.setPrice(price); menuItem.setQuantity(quantity); menuItem.setIsAvailable(isAvailable); MenuItemType mit = menuItem.getMenuItemType(); mit.setItemCount(mit.getItemCount() - 1); menuItem.setMenuItemType(menuItemType); menuItemType.setItemCount(menuItemType.getItemCount() + 1); menuItem.update(); return true; } //vraci polozku menu dle daneho Id public MenuItem getMenuItemById(int menuItemId) { return MenuItem.findById(menuItemId); } public MenuItem getMenuItemByName(String name) { return MenuItem.findByName(name); } public String[] getMenuItemNames() { List<MenuItem> list = MenuItem.findAll(); if (list == null || list.isEmpty()) { return null; } String[] array = new String[list.size()]; Iterator it = list.iterator(); int i = 0; while (it.hasNext()) { menuItem = (MenuItem) it.next(); array[i] = menuItem.getName(); i++; } return array; } //vraci pole Objectu s polozkymi menu public Object[][] getMenuItems() { List<MenuItem> list = MenuItem.findAll(); if (list == null || list.isEmpty()) { return null; } Object[][] array = new Object[list.size()][6]; Iterator it = list.iterator(); int i = 0; while (it.hasNext()) { menuItem = (MenuItem) it.next(); array[i][0] = menuItem.getMenuItemId(); array[i][1] = menuItem.getMenuItemType().getName(); array[i][2] = menuItem.getName(); array[i][3] = menuItem.getQuantity(); array[i][4] = menuItem.getPrice(); if (menuItem.getIsAvailable() == 1) { array[i][5] = "Dostupná"; } else { array[i][5] = "Nedostupná"; } i++; } return array; } public Object[][] getMenuItemsByMenu(int menuId) { List<MenuItem> list = MenuItem.findByMenu(menuId); if (list == null || list.isEmpty()) { return null; } Object[][] array = new Object[list.size()][6]; Iterator it = list.iterator(); int i = 0; while (it.hasNext()) { menuItem = (MenuItem) it.next(); array[i][0] = menuItem.getMenuItemId(); array[i][1] = menuItem.getMenuItemType().getName(); array[i][2] = menuItem.getName(); array[i][3] = menuItem.getQuantity(); array[i][4] = menuItem.getPrice(); if (menuItem.getIsAvailable() == 1) { array[i][5] = "Dostupná"; } else { array[i][5] = "Nedostupná"; } i++; } return array; } public List<MenuItem> getMenuItemsByMenuList(int menuId) { return MenuItem.findByMenu(menuId); } //vytvari dvojrozmerne pole typu Object pro metody getMenuItemsByAccount a getAllMenuItemsByAccount public Object[][] createMenuItemArray(List<Object[]> list, int accountId) { if (list == null || list.isEmpty()) { return null; } Object[][] array = new Object[list.size()][7]; Iterator it = list.iterator(); int i = 0; Account a = Account.findById(accountId); DiscountType dt = (a!=null) ? a.getDiscountType() : null; while (it.hasNext()) { Object[] pole = (Object[]) it.next(); menuItem = (MenuItem) pole[0]; Discount d = (dt!=null) ? Discount.findByDiscountTypeAndMenuItem(dt.getDiscountTypeId(), menuItem.getMenuItemId()) : null; array[i][EnumMenuItemArray.ItemID.getCode()] = menuItem.getMenuItemId(); array[i][EnumMenuItemArray.TypeName.getCode()] = menuItem.getMenuItemType().getName(); array[i][EnumMenuItemArray.ItemName.getCode()] = menuItem.getName(); array[i][EnumMenuItemArray.ItemPrice.getCode()] = menuItem.getPrice(); array[i][EnumMenuItemArray.DiscountCoefficient.getCode()] = (d!=null) ? 1-(d.getCoefficient()/100) : 1; array[i][EnumMenuItemArray.DiscountAmount.getCode()] = (d!=null) ? d.getAmount() : 0; array[i][EnumMenuItemArray.Count.getCode()] = pole[1]; i++; } return array; } // vrati nezaplacene polozky na uctu public Object[][] getMenuItemsByAccount(int accountId) { List<Object[]> list = MenuItem.findByAccount(accountId); return createMenuItemArray(list, accountId); } // vrati vsechny polozky na uctu public Object[][] getAllMenuItemsByAccount(int accountId) { List<Object[]> list = MenuItem.findAllByAccount(accountId); return createMenuItemArray(list, accountId); } public Object[][] getMenuItemsByMenuItemType(int menuItemTypeId) { List<MenuItem> list = MenuItem.findByMenuItemType(menuItemTypeId); if (list == null || list.isEmpty()) { return null; } Object[][] array = new Object[list.size()][6]; Iterator it = list.iterator(); int i = 0; while (it.hasNext()) { menuItem = (MenuItem) it.next(); array[i][0] = menuItem.getMenuItemId(); array[i][1] = menuItem.getMenuItemType().getName(); array[i][2] = menuItem.getName(); array[i][3] = menuItem.getQuantity(); array[i][4] = menuItem.getPrice(); if (menuItem.getIsAvailable() == 1) { array[i][5] = "Dostupná"; } else { array[i][5] = "Nedostupná"; } i++; } return array; } public List<MenuItem> getMenuItemsByMenuItemTypeList(int menuItemTypeId) { return MenuItem.findByMenuItemType(menuItemTypeId); } }