package cz.cvut.fel.restauracefel.server.service.controllers;
import cz.cvut.fel.restauracefel.hibernate.Income;
import cz.cvut.fel.restauracefel.hibernate.Material;
import cz.cvut.fel.restauracefel.hibernate.User;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
/**
*
* @author Jarda
*/
public class IncomeController {
private static IncomeController instance = null;
private Income income = null;
private IncomeController(){
}
public static IncomeController getInstance(){
if (instance == null){
instance = new IncomeController();
}
return instance;
}
//vytvari zaznam o prijmu dane suroviny na sklad
public boolean createIncome(Date date, int materialId, double quantity, double price, int userId, String note){
income = new Income();
Material mat = Material.findById(materialId);
if (mat == null){
return false;
}
mat.setCurrentQuantity(mat.getCurrentQuantity() + quantity);
mat.update();
income.setDate(date);
income.setMaterial(mat);
income.setQuantity(quantity);
income.setPrice(price);
User u = User.findById(userId);
if (u == null){
return false;
}
income.setUser(u);
income.setNote(note);
income.setIsDeleted(0);
income.create();
return true;
}
//maze zaznam o prijmu suroviny na sklad, dle daneho Id, ze seznamu prijmu
public boolean deleteIncome(int incomeId){
income = Income.findById(incomeId);
if (income == null){
return false;
}
Material mat = income.getMaterial();
mat.setCurrentQuantity(mat.getCurrentQuantity() - income.getQuantity());
mat.update();
//income.delete();
income.setIsDeleted(1);
return true;
}
//updatuje zaznam o prijmu suroviny na sklad, dle daneho Id, ze seznamu prijmu
public boolean updateIncome(int incomeId, Date date, int materialId, double quantity, double price, int userId, String note){
income = Income.findById(incomeId);
if (income == null){
return false;
}
Material mat = Material.findById(materialId);
if (mat == null){
return false;
}
if (mat == income.getMaterial()){
mat.setCurrentQuantity(mat.getCurrentQuantity() - income.getQuantity() + quantity);
} else {
Material mOld = income.getMaterial();
mOld.setCurrentQuantity(mOld.getCurrentQuantity() - income.getQuantity());
mOld.update();
mat.setCurrentQuantity(mat.getCurrentQuantity() + quantity);
}
mat.update();
income.setDate(date);
income.setMaterial(mat);
income.setQuantity(quantity);
income.setPrice(price);
User u = User.findById(userId);
if (u == null){
return false;
}
income.setUser(u);
income.setNote(note);
income.update();
return true;
}
//vraci pole Objectu reprezentujici zaznamy o prijmu surovin na sklad
public Object [][] getIncomes(){
List<Income> list = Income.findAll();
if (list == null){
return null;
}
Object [][] array = new Object [list.size()][8];
Iterator it = list.iterator();
int i = 0;
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
while (it.hasNext()){
income = (Income)it.next();
array [i][0] = income.getIncomeId();
array [i][1] = sdf.format(income.getDate());
array [i][2] = income.getMaterial().getName();
array [i][3] = income.getQuantity();
array [i][4] = income.getMaterial().getUnitType().getAbbreviation();
array [i][5] = income.getPrice();
if (income.getUser().getIsDeleted() == 1){
array [i][6] = "Uživatel smazán";
} else {
array [i][6] = income.getUser().getUsername();
}
array [i][7] = income.getNote();
i++;
}
return array;
}
//navraci zaznam o prijmu na sklad dle Id
public Income getIncomeByID(int incomeId){
return Income.findById(incomeId);
}
}