package cz.cvut.fel.restauracefel.server.service.controllers;
import cz.cvut.fel.restauracefel.hibernate.Account;
import cz.cvut.fel.restauracefel.hibernate.Order;
import cz.cvut.fel.restauracefel.hibernate.User;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
/**
*
* @author Jarda
* @author Tomas Hnizdil
*/
public class OrderController {
protected static OrderController instance = null;
protected Order order = null;
private OrderController() {
}
public static OrderController getInstance() {
if (instance == null) {
instance = new OrderController();
}
return instance;
}
//vytvari zaznam o nove objednavce
public boolean createOrder(int isPaid, Date time, int accountId, int userId) {
if (userId != 0 && accountId != 0) {
order = new Order();
order.setIsPaid(isPaid);
order.setTime(time);
Account account = Account.findById(accountId);
order.setAccount(account);
User user = User.findById(userId);
order.setUser(user);
order.create();
return true;
} else {
return false;
}
}
//vraci objednavku s danym Id
public Order getOrderById(int id) {
return Order.findById(id);
}
//vraci vsechny objednavky ve forme Listu
public List getAllOrders() {
return Order.findAll();
}
//maze objednavku s danym Id
public boolean deleteOrder(int orderId) {
order = Order.findById(orderId);
if (order == null){
return false;
}
order.setIsDeleted(1);
return true;
}
//v podobe pole typu String navraci nazvy vsech objednavek
public String[] getOrderNames() {
List list = Order.findAll();
if (list == null || list.isEmpty())
return null;
String array[] = new String[list.size()];
Iterator it = list.iterator();
int i = 0;
while (it.hasNext()) {
array[i] = "Objednavka cislo "+((Order) it.next()).getOrderId().toString();
i++;
}
return array;
}
public Object [][] getOrdersByAccount(int accountId){
List<Order> list = Order.findByAccount(accountId);
if (list == null || list.isEmpty())
return null;
Object [][] array = new Object [list.size()][5];
Iterator it = list.iterator();
int i = 0;
while (it.hasNext()){
order = (Order)it.next();
array[i][0] = order.getOrderId();
array[i][1] = order.getAccount().getAccountId();
array[i][2] = order.getTime();
array[i][3] = order.getUser().getUsername();
array[i][4] = order.getIsPaid();
i++;
}
return array;
}
public boolean payNMenuItemsByAccount(int n, int menuItemId, int accountId) {
List<Order> list = Order.findNByAccountAndMenuItem(n, menuItemId, accountId);
if (list == null || list.isEmpty()) return false;
Iterator it = list.iterator();
while (it.hasNext()) {
order = (Order)it.next();
order.setIsPaid(1);
}
return true;
}
/**
* Presune n polozek s id menuItemId z uctu sourceAccountId na ucet targetAccountId.
*
* @param n pocet polozek
* @param menuItemId id polozky
* @param sourceAccountId id uctu, ze ktereho se presouva
* @param targetAccountId id uctu, na ktery se presouva
*/
public boolean moveNMenuItemsByAccount(int n, int menuItemId, int sourceAccountId, int targetAccountId) {
List<Order> list = Order.findNByAccountAndMenuItem(n, menuItemId, sourceAccountId);
Account account = AccountController.getInstance().getAccountById(targetAccountId);
if (list == null || list.isEmpty() || account == null) return false;
Iterator it = list.iterator();
while (it.hasNext()) {
order = (Order)it.next();
order.setAccount(account);
}
return true;
}
//v podobe dvojrozmerneho pole typu Object navraci udaje o vsech objednavkach
public Object[][] getOrders() {
List<Order> list = Order.findAll();
if (list == null || list.isEmpty())
return null;
Object array[][] = new Object[list.size()][5];
int i = 0;
Iterator it = list.iterator();
while (it.hasNext()) {
Order a = (Order) it.next();
array[i][0] = a.getOrderId();
array[i][1] = a.getAccount().getAccountId();
array[i][2] = a.getTime();
array[i][3] = a.getUser().getUsername();
array[i][4] = a.getIsPaid();
i++;
}
return array;
}
}