package com.ese.model.dao;
import com.ese.model.db.ContainerItemModel;
import com.ese.model.view.ContainerItemView;
import com.ese.utils.Utils;
import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.type.IntegerType;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
public class ContainerItemDAO extends GenericDAO<ContainerItemModel, Integer>{
public List<ContainerItemModel> findByLoadingOrderId(int loadingOrderId){
List<ContainerItemModel> containerItemModelList = Utils.getEmptyList();
try {
Criteria criteria = getSession().createCriteria(ContainerItemModel.class, "conItem");
criteria.createAlias("conItem.containerModel", "con");
criteria.createAlias("con.loadingOrderModel", "loadOrder");
criteria.add(Restrictions.eq("loadOrder.id", loadingOrderId));
criteria.addOrder(Order.desc("updateDate"));
containerItemModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception e : ", e);
}
return containerItemModelList;
}
public List<ContainerItemModel> findByLoadingOrderIdOrderBy(int loadingOrderId){
List<ContainerItemModel> containerItemModelList = Utils.getEmptyList();
try {
Criteria criteria = getSession().createCriteria(ContainerItemModel.class, "conItem");
criteria.createAlias("conItem.containerModel", "con");
criteria.createAlias("con.loadingOrderModel", "loadOrder");
criteria.add(Restrictions.eq("loadOrder.id", loadingOrderId));
criteria.addOrder(Order.desc("msItemModel.id"));
containerItemModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception e : ", e);
}
return containerItemModelList;
}
public List<ContainerItemView> findByInsertModel(int loadingOrderId){
List<ContainerItemView> containerItemViewList = new ArrayList<ContainerItemView>();
StringBuilder selectLocationQty = new StringBuilder();
selectLocationQty.append(" SELECT ");
selectLocationQty.append(" ").append(getPrefix()).append(".container.id AS CONTAINER_ID,");
selectLocationQty.append(" ").append(getPrefix()).append(".item_master.id AS ITEM_ID,");
selectLocationQty.append(" SUM(").append(getPrefix()).append(".reserved_order.picked_qty)/");
selectLocationQty.append(" COUNT(").append(getPrefix()).append(".container.id) AS CONTAINER_ITEM_QTY");
selectLocationQty.append(" FROM ").append(getPrefix()).append(".picking_order_line");
selectLocationQty.append(" INNER JOIN ").append(getPrefix()).append(".reserved_order");
selectLocationQty.append(" ON ").append(getPrefix()).append(".picking_order_line.id = ").append(getPrefix()).append(".reserved_order.picking_order_line_id");
selectLocationQty.append(" INNER JOIN ").append(getPrefix()).append(".picking_order");
selectLocationQty.append(" ON ").append(getPrefix()).append(".picking_order_line.picking_order_id = ").append(getPrefix()).append(".picking_order.id");
selectLocationQty.append(" INNER JOIN ").append(getPrefix()).append(".container");
selectLocationQty.append(" ON ").append(getPrefix()).append(".container.loading_order_id = ").append(getPrefix()).append(".picking_order.loading_order_id");
selectLocationQty.append(" INNER JOIN ").append(getPrefix()).append(".item_master");
selectLocationQty.append(" ON ").append(getPrefix()).append(".picking_order_line.ItemId = ").append(getPrefix()).append(".item_master.ItemId");
selectLocationQty.append(" WHERE ").append(getPrefix()).append(".picking_order.loading_order_id = " ).append(loadingOrderId);
selectLocationQty.append(" GROUP BY ").append(getPrefix()).append(".container.id, ").append(getPrefix()).append(".item_master.id");
log.debug("findByInsertModel : {}", selectLocationQty.toString());
try {
SQLQuery query = getSession().createSQLQuery(selectLocationQty.toString())
.addScalar("CONTAINER_ID", IntegerType.INSTANCE)
.addScalar("ITEM_ID", IntegerType.INSTANCE)
.addScalar("CONTAINER_ITEM_QTY", IntegerType.INSTANCE);
List<Object[]> objects = query.list();
for (Object[] entity : objects) {
ContainerItemView containerItemView = new ContainerItemView();
containerItemView.setContainnerId(Utils.parseInt(entity[0]));
containerItemView.setItemId(Utils.parseInt(entity[1]));
containerItemView.setContainerQty(Utils.parseInt(entity[2]));
containerItemViewList.add(containerItemView);
}
} catch (Exception e) {
log.debug("Exception findOnPostStatus SQL : {}", e);
}
return containerItemViewList;
}
}