package cz.cvut.fel.restauracefel.server.service.controllers;
import cz.cvut.fel.restauracefel.hibernate.Expenditure;
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 ExpenditureController {
private static ExpenditureController instance = null;
private Expenditure expenditure = null;
private ExpenditureController(){
}
public static ExpenditureController getInstance(){
if (instance == null){
instance = new ExpenditureController();
}
return instance;
}
//vytvari novy objekt tridy Expenditure
public boolean createExpenditure(Date date, int materialId, double quantity, int userId, String note){
expenditure = new Expenditure();
Material mat = Material.findById(materialId);
if (mat == null){
return false;
}
if (mat.getCurrentQuantity() < quantity){
return false;
}
mat.setCurrentQuantity(mat.getCurrentQuantity() - quantity);
mat.update();
expenditure.setDate(date);
expenditure.setMaterial(mat);
expenditure.setQuantity(quantity);
User user = User.findById(userId);
if (user == null){
return false;
}
expenditure.setUser(user);
expenditure.setNote(note);
expenditure.setIsDeleted(0);
expenditure.create();
return true;
}
//aktualizuje objekt tridy Expenditure s danym Id
public boolean updateExpenditure(int expenditureId, Date date, int materialId, double quantity, int userId, String note){
expenditure = Expenditure.findById(expenditureId);
if (expenditure == null){
return false;
}
Material mat = Material.findById(materialId);
if (mat == null || mat.getCurrentQuantity() < quantity){
return false;
}
if (mat == expenditure.getMaterial()){
mat.setCurrentQuantity(mat.getCurrentQuantity() + expenditure.getQuantity() - quantity);
} else {
Material mOld = expenditure.getMaterial();
mOld.setCurrentQuantity(mOld.getCurrentQuantity() + expenditure.getQuantity());
mOld.update();
mat.setCurrentQuantity(mat.getCurrentQuantity() - quantity);
}
mat.update();
expenditure.setDate(date);
expenditure.setMaterial(mat);
expenditure.setQuantity(quantity);
User u = User.findById(userId);
if (u == null){
return false;
}
expenditure.setUser(u);
expenditure.setNote(note);
expenditure.update();
return true;
}
//maze objekt tridy Expenditure s danym Id
public boolean deleteExpenditure(int expenditureId){
expenditure = Expenditure.findById(expenditureId);
if (expenditure == null){
return false;
}
Material mat = expenditure.getMaterial();
mat.setCurrentQuantity(mat.getCurrentQuantity() + expenditure.getQuantity());
mat.update();
//expenditure.delete();
expenditure.setIsDeleted(1);
return true;
}
//navraci objekt tridy Expenditure s danym Id
public Expenditure getExpenditureById(int expenditureId){
return Expenditure.findById(expenditureId);
}
//v podobe dvojrozmerneho pole typu Object navraci objekty tridy Expenditure
public Object [][] getExpenditures(){
List<Expenditure> list = Expenditure.findAll();
if (list == null || list.isEmpty()){
return null;
}
Object [][] array = new Object [list.size()][7];
Iterator it = list.iterator();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
int i = 0;
while (it.hasNext()){
expenditure = (Expenditure)it.next();
array [i][0] = expenditure.getExpenditureId();
array [i][1] = sdf.format(expenditure.getDate());
array [i][2] = expenditure.getMaterial().getName();
array [i][3] = expenditure.getQuantity();
array [i][4] = expenditure.getMaterial().getUnitType().getAbbreviation();
if (expenditure.getUser().getIsDeleted() == 1){
array [i][5] = "Uživatel smazán";
} else {
array [i][5] = expenditure.getUser().getUsername();
}
array [i][6] = expenditure.getNote();
i++;
}
return array;
}
}