package com.ese.model.dao; import com.ese.model.view.*; import com.ese.utils.Utils; import org.hibernate.SQLQuery; import org.hibernate.type.IntegerType; import org.hibernate.type.StringType; import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.List; @Repository public class InventoryOnhandReportDAO extends GenericDAO<InventoryOnhandReportView, Integer>{ private int zero = 0; public List<InventoryOnhandReportView> findInventOnhandReport(){ List<InventoryOnhandReportView> reportViewList = new ArrayList<InventoryOnhandReportView>(); StringBuilder sqlReport = new StringBuilder(); sqlReport.append(" SELECT DISTINCT"); sqlReport.append(" ").append(getPrefix()).append(".inv_onhand_view.ItemId AS ITEM_CODE,"); sqlReport.append(" ").append(getPrefix()).append(".inv_onhand_view.item_description AS ITEM_DESC,"); sqlReport.append(" ").append(getPrefix()).append(".inv_onhand_view.batchno AS BATCH_NO,"); sqlReport.append(" ").append(getPrefix()).append(".inv_onhand_view.location_barcode AS LOCATION,"); sqlReport.append(" ").append(getPrefix()).append(".inv_onhand_view.warehouse_code AS WAREHOUSE,"); sqlReport.append(" (SELECT COUNT( ").append(getPrefix()).append(".inv_onhand.id) FROM ").append(getPrefix()).append(".inv_onhand WHERE ") .append(getPrefix()).append(".inv_onhand.status < 6 AND ").append(getPrefix()).append(".inv_onhand.location_id = ").append(getPrefix()).append(".inv_onhand_view.location_id AND ") .append(getPrefix()).append(".inv_onhand.item_id = ").append(getPrefix()).append(".inv_onhand_view.item_id AND ").append(getPrefix()).append(".inv_onhand.batchno = ") .append(getPrefix()).append(".inv_onhand_view.batchno) AS AVALIABLE,"); sqlReport.append(" (SELECT ").append(getPrefix()).append(".location_qty.reserved_qty FROM ").append(getPrefix()).append(".location_qty WHERE ") .append(getPrefix()).append(".location_qty.batchno = ").append(getPrefix()).append(".inv_onhand_view.batchno AND ").append(getPrefix()).append(".location_qty.item_master_id =") .append(getPrefix()).append(".inv_onhand_view.item_id AND ").append(getPrefix()).append(".location_qty.location_id = ").append(getPrefix()).append(".inv_onhand_view.location_id) + (SELECT COUNT(") .append(getPrefix()).append(".inv_onhand.id) FROM ").append(getPrefix()).append(".inv_onhand WHERE ").append(getPrefix()).append(".inv_onhand.status = 3 AND ") .append(getPrefix()).append(".inv_onhand.location_id = ").append(getPrefix()).append(".inv_onhand_view.location_id AND ").append(getPrefix()).append(".inv_onhand.item_id = ") .append(getPrefix()).append(".inv_onhand_view.item_id AND ").append(getPrefix()).append(".inv_onhand.batchno = ").append(getPrefix()).append(".inv_onhand_view.batchno) AS RESERVED_QTY, "); sqlReport.append(" (SELECT ").append(getPrefix()).append(".location_qty.picked_qty FROM ").append(getPrefix()).append(".location_qty WHERE ").append(getPrefix()).append(".location_qty.batchno = ") .append(getPrefix()).append(".inv_onhand_view.batchno AND ").append(getPrefix()).append(".location_qty.item_master_id = ").append(getPrefix()).append(".inv_onhand_view.item_id AND ") .append(getPrefix()).append(".location_qty.location_id = ").append(getPrefix()).append(".inv_onhand_view.location_id) AS PICKED_QTY,"); sqlReport.append(" ").append(getPrefix()).append(".inv_onhand_view.cost AS COST"); sqlReport.append(" FROM ").append(getPrefix()).append(".inv_onhand_view "); sqlReport.append(" GROUP BY ").append(getPrefix()).append(".inv_onhand_view.item_id, ").append(getPrefix()).append(".inv_onhand_view.itemid, "); sqlReport.append(getPrefix()).append(".inv_onhand_view.batchno, ").append(getPrefix()).append(".inv_onhand_view.location_id, "); sqlReport.append(getPrefix()).append(".inv_onhand_view.location_barcode, ").append(getPrefix()).append(".inv_onhand_view.warehouse_code, "); sqlReport.append(getPrefix()).append(".inv_onhand_view.ItemId, ").append(getPrefix()).append(".inv_onhand_view.item_description, "); sqlReport.append(getPrefix()).append(".inv_onhand_view.cost"); log.debug(sqlReport.toString()); try { SQLQuery query = getSession().createSQLQuery(sqlReport.toString()) .addScalar("ITEM_CODE", StringType.INSTANCE) .addScalar("ITEM_DESC", StringType.INSTANCE) .addScalar("BATCH_NO", StringType.INSTANCE) .addScalar("LOCATION", StringType.INSTANCE) .addScalar("WAREHOUSE", StringType.INSTANCE) .addScalar("AVALIABLE", IntegerType.INSTANCE) .addScalar("RESERVED_QTY", IntegerType.INSTANCE) .addScalar("PICKED_QTY", IntegerType.INSTANCE) .addScalar("COST", IntegerType.INSTANCE); List<Object[]> objects = query.list(); //AVALIABLE = 5, RESERVED_QTY = 6, PICKED_QTY = 7 int availableQty = 0; int availableAmount = 0; int reservedQty = 0; int reservedAmount = 0; int pickQty = 0; int pickAmount = 0; for (Object[] entity : objects){ availableQty = Utils.parseInt(entity[5]) - Utils.parseInt(entity[6]) - Utils.parseInt(entity[7]); availableAmount = Utils.multiply(Utils.parseInt(entity[5]), Utils.parseInt(entity[8])); reservedQty = Utils.parseInt(entity[6]) - Utils.parseInt(entity[7]); reservedAmount = Utils.multiply(Utils.parseInt(entity[6]), Utils.parseInt(entity[8])); pickQty = Utils.parseInt(entity[7]); pickAmount = Utils.multiply(Utils.parseInt(entity[7]), Utils.parseInt(entity[8])); if (availableQty + reservedQty + pickQty > 0){ InventoryOnhandReportView reportView = new InventoryOnhandReportView(); AvailivbleView availivbleView = new AvailivbleView(); ReservedView reservedView = new ReservedView(); PickView pickView = new PickView(); // PackView packView = new PackView(); PhysicalView physicalView = new PhysicalView(); reportView.setItemCode(Utils.parseString(entity[0])); reportView.setItemDesc(Utils.parseString(entity[1])); reportView.setBatchNo(Utils.parseString(entity[2])); reportView.setLocationBarcode(Utils.parseString(entity[3])); reportView.setWarehouseName(Utils.parseString(entity[4])); availivbleView.setQty(availableQty); availivbleView.setAmount(availableAmount); reservedView.setQty(reservedQty); reservedView.setAmount(reservedAmount); pickView.setQty(pickQty); pickView.setAmount(pickAmount); physicalView.setQty(availableQty + reservedQty + pickQty); physicalView.setAmount(availableAmount + reservedAmount + pickAmount); reportView.setAvailableView(availivbleView); reportView.setReservedView(reservedView); reportView.setPickView(pickView); reportView.setPhysicalView(physicalView); reportViewList.add(reportView); } } } catch (Exception e) { log.debug("Exception errror findInventOnhandReport : ", e); } return reportViewList; } }