package com.ese.model.dao; import com.ese.model.StatusBarcodeRegiterValue; import com.ese.model.db.BarcodeRegisterModel; import com.ese.model.view.report.BarcodeRegisterModelReport; 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.hibernate.type.StringType; import org.hibernate.type.TimestampType; import org.springframework.stereotype.Repository; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @Repository public class BarcodeRegisterDAO extends GenericDAO<BarcodeRegisterModel, Integer> { public List<BarcodeRegisterModel> findByIsValid() throws Exception { Criteria criteria = getCriteria().add(Restrictions.eq("isValid", 1)).addOrder(Order.desc("updateDate")); return Utils.safetyList(criteria.list()); } public List<BarcodeRegisterModel> findByStockInOut(String stockInout) throws Exception { Criteria criteria = getCriteria() .add(Restrictions.eq("isValid", 1)) .add(Restrictions.eq("status", StatusBarcodeRegiterValue.INPROCESS)) .addOrder(Order.desc("updateDate")); if (!Utils.isNull(stockInout) && !Utils.isZero(stockInout.trim().length())){ criteria.add(Restrictions.eq("docNo", stockInout)); } return Utils.safetyList(criteria.list()); } public List<BarcodeRegisterModel> findByLike(String filed, String text) throws Exception { Criteria criteria = getCriteria().add(Restrictions.eq("isValid", 1)).addOrder(Order.desc("updateDate")); criteria.add(Restrictions.like(filed, "%"+text+"%")); return Utils.safetyList(criteria.list()); } public List<BarcodeRegisterModel> findByBetween(String startBarcode) throws Exception { StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.append("SELECT * FROM ").append(getPrefix()).append(".barcode_register"); sqlBuilder.append(" WHERE ").append(getPrefix()).append(".barcode_register.finish_barcode"); sqlBuilder.append(" BETWEEN "+startBarcode+" AND 999999999"); SQLQuery query = getSession().createSQLQuery(sqlBuilder.toString()).addEntity(BarcodeRegisterModel.class); return Utils.safetyList(query.list()); } public List<BarcodeRegisterModel> findByLike(String text) throws Exception { StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.append("SELECT * FROM ").append(getPrefix()).append(".barcode_register"); sqlBuilder.append(" WHERE ").append(getPrefix()).append(".barcode_register.item_id"); sqlBuilder.append(" IN(SELECT ").append(getPrefix()).append(".item_master.id FROM ").append(getPrefix()).append(".item_master WHERE"); sqlBuilder.append(" ").append(getPrefix()).append(".item_master.DSGThaiItemDescription LIKE '%"+text+"%')"); SQLQuery query = getSession().createSQLQuery(sqlBuilder.toString()).addEntity(BarcodeRegisterModel.class); return Utils.safetyList(query.list()); } public void deleteByUpdate(final BarcodeRegisterModel model) throws Exception { model.setIsValid(0); //0 is flag for delete model.setUpdateDate(Utils.currentDate()); update(model); } public BigDecimal getPrice(String iTemId) throws Exception { final String sql = "SELECT a.Price FROM "+ getPrefix() + ".ax_InventtableModule a WHERE a.ItemId = '"+iTemId+"' AND a.ModuleType = 0"; return Utils.parseBigDecimal(getSession().createSQLQuery(sql).uniqueResult(), BigDecimal.ZERO); } public List<BarcodeRegisterModelReport> genSQLReportBarcode(int barcodeId){ log.debug("genSQLReportBarcode(). {}", barcodeId); List<BarcodeRegisterModelReport> reportViews = new ArrayList<BarcodeRegisterModelReport>(); StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.append("SELECT DISTINCT ").append(getPrefix()).append(".item_master.DSGThaiItemDescription AS ITEMDESCRIPTION,"); sqlBuilder.append(" ").append(getPrefix()).append(".barcode_register.docno AS DOCNO,"); sqlBuilder.append(" ").append(getPrefix()).append(".barcode_register.production_date AS PRODUCT_DATE,"); sqlBuilder.append(" ").append(getPrefix()).append(".barcode_register.batchno AS BATCHNO,"); sqlBuilder.append(" ").append(getPrefix()).append(".barcode_register.start_barcode_text AS START_BARCODE,"); sqlBuilder.append(" ").append(getPrefix()).append(".barcode_register.finish_barcode_text AS FINISH_BARCODE,"); sqlBuilder.append(" ").append(getPrefix()).append(".barcode_register.qty AS QTY,"); sqlBuilder.append(" ").append(getPrefix()).append(".barcode_register.remark AS REMARK"); sqlBuilder.append(" FROM ").append(getPrefix()).append(".barcode_register"); sqlBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".item_master"); sqlBuilder.append(" ON ").append(getPrefix()).append(".barcode_register.item_id = ").append(getPrefix()).append(".item_master.id"); sqlBuilder.append(" WHERE ").append(getPrefix()).append(".barcode_register.id = " + barcodeId); log.debug(sqlBuilder.toString()); try{ SQLQuery query = getSession().createSQLQuery(sqlBuilder.toString()) .addScalar("ITEMDESCRIPTION", StringType.INSTANCE) .addScalar("DOCNO", StringType.INSTANCE) .addScalar("PRODUCT_DATE", TimestampType.INSTANCE) .addScalar("BATCHNO", StringType.INSTANCE) .addScalar("START_BARCODE", StringType.INSTANCE) .addScalar("FINISH_BARCODE", StringType.INSTANCE) .addScalar("QTY", IntegerType.INSTANCE) .addScalar("REMARK", StringType.INSTANCE); List<Object[]> objects = query.list(); for (Object[] entity : objects) { BarcodeRegisterModelReport report = new BarcodeRegisterModelReport(); report.setDSGThaiItemDescription("Item : " + Utils.parseString(entity[0], "")); report.setDocNo("Doc No : " + Utils.parseString(entity[1], "")); report.setProductDate("Date : " + Utils.convertToStringDDMMYYYY(Utils.parseDate(entity[2], null))); report.setBatchNo("Batch No :" + Utils.parseString(entity[3], "")); report.setStartBarcode("Start Barcode : " + Utils.parseString(entity[4], "")); report.setFinishBarcode("Finish Barcode : " + Utils.parseString(entity[5], "")); report.setQty(Utils.parseInt(entity[6], 0)); report.setRemark("Remark : " + Utils.parseString(entity[7], "")); reportViews.add(report); } } catch (Exception e){ log.debug("Exception Report : ", e); } return reportViews; } }