package cz.cvut.fel.restauracefel.server.service.controllers;
import cz.cvut.fel.restauracefel.hibernate.Depreciation;
import cz.cvut.fel.restauracefel.hibernate.Expenditure;
import cz.cvut.fel.restauracefel.hibernate.Income;
import cz.cvut.fel.restauracefel.hibernate.Material;
import cz.cvut.fel.restauracefel.hibernate.MaterialType;
import cz.cvut.fel.restauracefel.hibernate.UnitType;
import cz.cvut.fel.restauracefel.hibernate.UsedMaterial;
import java.util.Iterator;
import java.util.List;
/**
*
* @author Jarda
*/
public class MaterialController {
protected Material material;
protected static MaterialController instance = null;
private MaterialController() {
}
public static MaterialController getInstance() {
if (instance == null) {
instance = new MaterialController();
}
return instance;
}
//vytvari novy zaznam o materialu
//navraci true, pokud byl material uspesne vytvoren a ulozen do DB
//navraci false, pokud zaznam nebyl vytvoren nebo nebyl zapsan do DB
public boolean createMaterial(String name, int idMaterialType, int idUnitType, String barcode, double minimal, double density, double emptyPackageWeight, double packageCapacity) {
if (!isExistedMaterial(name, barcode)) {
material = new Material();
material.setName(name);
material.setCurrentQuantity(0.0);
material.setUnitType(UnitType.findById(idUnitType));
material.setMaterialType(MaterialType.findById(idMaterialType));
material.setBarcode(barcode);
material.setMinimal(minimal);
material.setIsDeleted(0);
material.setDensity(density);
material.setEmptyPackageWeight(emptyPackageWeight);
material.setPackageCapacity(packageCapacity);
material.create();
return true;
} else {
return false;
}
}
//pokud material s danym jmenem a car. kodem neexistuje, tak metoda navraci false; pokud existuje, tak navraci true
public boolean isExistedMaterial(String name, String barcode) {
material = Material.findByName(name);
if (material != null) {
return true;
}
material = Material.findByBarcode(barcode);
if (material != null) {
return true;
}
return false;
}
//pokud material s danym barcodem neexistuje, tak metoda vraci false, jinak navraci true
public boolean isExistedByBarcode(String barcode) {
material = Material.findByBarcode(barcode);
if (material == null) {
return false;
} else {
return true;
}
}
//navraci seznam vsech materialu v podobe Listu
public List getAllMaterials() {
return Material.findAll();
}
//navraci material pro dane materialId
public Material getMaterialByID(int id) {
return Material.findById(id);
}
public Material getMaterialByName(String name) {
return Material.findByName(name);
}
//navraci Stringovou reprezentaci vsechny objektu tridy Material, ktere jsou daneho typu (materialTypeId)
public String[] getMaterialNamesByMaterialType(int materialTypeId) {
List<Material> list = Material.findByMaterialType(materialTypeId);
if (list == null || list.isEmpty()) {
return null;
}
String array[] = new String[list.size()];
Iterator it = list.iterator();
int i = 0;
while (it.hasNext()) {
material = (Material) it.next();
array[i] = material.getName();
i++;
}
return array;
}
//navraci pole Stringu, kde kazdy zaznam obsahuje id materialu a nazev materialu
public String[] getMaterialNames() {
List<Material> list = Material.findAll();
if (list == null || list.isEmpty()) {
return null;
}
String array[] = new String[list.size()];
Iterator it = list.iterator();
int i = 0;
while (it.hasNext()) {
material = (Material) it.next();
array[i] = material.getName();
i++;
}
return array;
}
//navraci pole Objectu, ktere je tvoreno jednotlivymi zaznamy
public Object[][] getMaterials() {
List<Material> list = Material.findAll();
if (list == null || list.isEmpty()) {
return null;
}
Object array[][] = new Object[list.size()][11];
Iterator it = list.iterator();
int i = 0;
while (it.hasNext()) {
Material mat = (Material) it.next();
array[i][0] = mat.getMaterialId();
array[i][1] = mat.getName();
array[i][2] = mat.getCurrentQuantity();
array[i][3] = mat.getMaterialType().getName();
array[i][4] = mat.getUnitType().getName();
array[i][5] = mat.getBarcode();
array[i][6] = mat.getMinimal();
array[i][7] = mat.getDensity();
array[i][8] = mat.getEmptyPackageWeight();
array[i][9] = mat.getPackageCapacity();
i++;
}
return array;
}
//maze material dle daneho Id
public boolean deleteMaterial(int materialId) {
material = Material.findById(materialId);
if (material == null) {
return false;
}
//material.delete();
material.setIsDeleted(1);
return true;
}
//updatuje material dle daneho Id
public boolean updateMaterial(Integer materialId, String name, int idMaterialType, int idUnitType, String barcode, double minimal, double density, double emptyPackageWeight, double packageCapacity) {
if(MaterialType.findById(idMaterialType) == null || UnitType.findById(idUnitType) == null){
return false;
}
material = Material.findById(materialId);
if (material == null) {
return false;
}
Material m = null;
m = Material.findByName(name);
if (m != null && m != material) {
return false;
}
m = Material.findByBarcode(barcode);
if (m != null && m != material) {
return false;
}
material.setName(name);
material.setMaterialType(MaterialType.findById(idMaterialType));
material.setUnitType(UnitType.findById(idUnitType));
material.setBarcode(barcode);
material.setMinimal(minimal);
material.setDensity(density);
material.setEmptyPackageWeight(emptyPackageWeight);
material.setPackageCapacity(packageCapacity);
material.update();
return true;
}
public boolean isDeletableMaterial(int materialId) {
List<Income> incomes = Income.findByMaterial(materialId);
if (incomes != null) {
return false;
}
List<Expenditure> expends = Expenditure.findByMaterial(materialId);
if (expends != null) {
return false;
}
List<Depreciation> deps = Depreciation.findByMaterial(materialId);
if (deps != null) {
return false;
}
List<UsedMaterial> useds = UsedMaterial.findByMaterial(materialId);
if (useds != null) {
return false;
}
return true;
}
}