package cz.cvut.fel.restauracefel.hibernate;
// Generated 16.3.2009 21:36:54 by Hibernate Tools 3.2.1.GA
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
import java.util.List;
/**
* UsedMaterial generated by hbm2java
*/
public class UsedMaterial extends DBEntity {
private static final long serialVersionUID = 7570990718241429464L;
private Integer usedMaterialId;
private Material material;
private MenuItem menuItem;
private double quantity;
private int isDeleted;
public UsedMaterial() {
}
public UsedMaterial(Material material, MenuItem menuItem, double quantity, int isDeleted) {
this.material = material;
this.menuItem = menuItem;
this.quantity = quantity;
this.isDeleted = isDeleted;
}
//tato metoda zde musi byt, a to z duvodu, aby mohla probehnout spravne serializace
//zapis objektu do proudu bajtu
private void writeObject(ObjectOutputStream stream) throws IOException {
stream.writeInt(usedMaterialId);
Material m = new Material();
UnitType ut = new UnitType(material.getUnitType().getName(), material.getUnitType().getAbbreviation(), material.getUnitType().getTypeId(), material.getUnitType().getIsDeleted());
ut.setUnitTypeId(material.getUnitType().getUnitTypeId());
MaterialType mt = new MaterialType(material.getMaterialType().getName(), material.getMaterialType().getNote(), material.getMaterialType().getIsDeleted());
mt.setMaterialTypeId(material.getMaterialType().getMaterialTypeId());
m.setMaterialId(material.getMaterialId());
m.setUnitType(ut);
m.setMaterialType(mt);
m.setName(material.getName());
m.setCurrentQuantity(material.getCurrentQuantity());
m.setBarcode(material.getBarcode());
m.setMinimal(material.getMinimal());
m.setIsDeleted(material.getIsDeleted());
stream.writeObject(m);
MenuItem mi = new MenuItem();
mi.setMenuItemId(menuItem.getMenuItemId());
mi.setName(menuItem.getName());
mi.setPrice(menuItem.getPrice());
mi.setQuantity(menuItem.getQuantity());
mi.setIsAvailable(menuItem.getIsAvailable());
mi.setIsDeleted(menuItem.getIsDeleted());
stream.writeObject(mi);
stream.writeDouble(quantity);
stream.writeInt(isDeleted);
}
//tato metoda zde musi byt, a to z duvodu, aby mohla probehnout spravne serializace
//cteni a rekonstrukce objektu z proudu bajtu
private void readObject(ObjectInputStream stream) throws IOException {
try {
usedMaterialId = stream.readInt();
material = (Material) (stream.readObject());
menuItem = (MenuItem) (stream.readObject());
quantity = stream.readDouble();
isDeleted = stream.readInt();
} catch (Exception e) {
e.getMessage();
}
}
public Integer getUsedMaterialId() {
return this.usedMaterialId;
}
public void setUsedMaterialId(Integer usedMaterialId) {
this.usedMaterialId = usedMaterialId;
}
public Material getMaterial() {
return this.material;
}
public void setMaterial(Material material) {
this.material = material;
}
public MenuItem getMenuItem() {
return this.menuItem;
}
public void setMenuItem(MenuItem menuItem) {
this.menuItem = menuItem;
}
public double getQuantity() {
return this.quantity;
}
public void setQuantity(double quantity) {
this.quantity = quantity;
}
public int getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(int isDeleted) {
this.isDeleted = isDeleted;
}
public void create() {
create(this);
}
public void delete() {
delete(this);
}
public void update() {
update(this);
}
public static UsedMaterial findById(Integer id) {
//return (UsedMaterial) findById("UsedMaterial", "usedMaterialId", id);
return (UsedMaterial) findByIdNotDeleted("UsedMaterial", "usedMaterialId", id, "isDeleted", 0);
}
//vraci vsechny UsedMaterialy, ktere nejsou oznaceny jako smazane
public static List findAll() {
return findAllNotDeleted("UsedMaterial", "isDeleted", 0);
}
public static List findByMenuItem(Integer menuItemId) {
String query = "from UsedMaterial um where um.menuItem.menuItemId = :id1 and um.isDeleted = :id2 ";
String[] paramNames = new String[]{"id1", "id2"};
String[] paramTypes = new String[]{"Integer", "Integer"};
Integer[] paramValues = new Integer[]{menuItemId, 0};
List res = executeQuery(query, paramNames, paramTypes, paramValues);
if (res == null || res.isEmpty()) {
return null;
}
return res;
}
public static double[] findQuantityOfUsedMaterialUsedAfterInOrders(Date date, Material material) {
List<Order> orders = Order.findByDateAfter(date);
double[] result = new double[2];
double quantity = 0;
double price = 0;
if (orders != null) {
for (Order o : orders) {
List<OrderMenuItem> ordersMenu = OrderMenuItem.findByOrder(o.getOrderId());
if (ordersMenu != null) {
for (OrderMenuItem item : ordersMenu) {
List<UsedMaterial> usedMaterials = UsedMaterial.findByMenuItem(item.getMenuItem().getMenuItemId());
if (usedMaterials != null) {
for (UsedMaterial m : usedMaterials) {
if (m.getMaterial().equals(material)) {
quantity += m.getQuantity();
//toto funguje pouze pokud je menu item slozen z jednoho produktu
price += item.getMenuItem().getPrice() * m.getQuantity();
}
}
}
}
}
}
}
result[0] = quantity;
result[1] = price;
return result;
}
public static List findByMaterial(Integer materialId) {
String query = "from UsedMaterial um where um.material.materialId = :id1 and um.isDeleted = :id2";
String[] paramNames = new String[]{"id1", "id2"};
String[] paramTypes = new String[]{"Integer", "Integer"};
Integer[] paramValues = new Integer[]{materialId, 0};
List res = executeQuery(query, paramNames, paramTypes, paramValues);
if (res == null || res.isEmpty()) {
return null;
}
return res;
}
}