package com.ese.model.dao;
import com.ese.model.db.StockInOutModel;
import com.ese.model.view.IncomingView;
import com.ese.model.view.IssuingView;
import com.ese.model.view.QuarantineView;
import com.ese.model.view.StockTransferView;
import com.ese.model.view.report.StockViewReport;
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.DateType;
import org.hibernate.type.IntegerType;
import org.hibernate.type.StringType;
import org.hibernate.type.TimestampType;
import org.springframework.stereotype.Repository;
import java.util.*;
@Repository
public class StockInOutDAO extends GenericDAO<StockInOutModel, Integer> {
public List<StockInOutModel> findByDocnoAndCurrentDate(){
List<StockInOutModel> stockInOutModelList = Utils.getEmptyList();
try {
System.setProperty("user.timezone", "GMT+07:00");
System.setProperty("user.language", "en");
System.setProperty("user.country", "US");
Locale.setDefault(Locale.US);
Criteria criteria = getCriteria();
criteria.add(Restrictions.ilike("docNo", "TR%"));
criteria.add(Restrictions.ge("docDate", Utils.minDateTime()));
criteria.add(Restrictions.le("docDate", Utils.maxDateTime()));
criteria.add(Restrictions.eq("isValid", 1));
criteria.addOrder(Order.desc("updateDate"));
stockInOutModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception error findByDocnoAndCurrentDate : ", e);
}
return stockInOutModelList;
}
public List<StockInOutModel> findByDocNoINAndCurrentDate(){
List<StockInOutModel> stockInOutModelList = Utils.getEmptyList();
try {
System.setProperty("user.timezone", "GMT+07:00");
System.setProperty("user.language", "en");
System.setProperty("user.country", "US");
Locale.setDefault(Locale.US);
Criteria criteria = getCriteria();
criteria.add(Restrictions.like("docNo", "IN%"));
criteria.add(Restrictions.ge("docDate", Utils.minDateTime()));
criteria.add(Restrictions.le("docDate", Utils.maxDateTime()));
criteria.add(Restrictions.eq("isValid", 1));
criteria.addOrder(Order.desc("updateDate"));
stockInOutModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception error findByDocNoINAndCurrentDate : ", e);
}
return stockInOutModelList;
}
public List<StockInOutModel> findByDocNoIOUAndCurrentDate(){
List<StockInOutModel> stockInOutModelList = Utils.getEmptyList();
try {
System.setProperty("user.timezone", "GMT+07:00");
System.setProperty("user.language", "en");
System.setProperty("user.country", "US");
Locale.setDefault(Locale.US);
Criteria criteria = getCriteria();
criteria.add(Restrictions.like("docNo", "OU%"));
criteria.add(Restrictions.ge("docDate", Utils.minDateTime()));
criteria.add(Restrictions.le("docDate", Utils.maxDateTime()));
criteria.add(Restrictions.eq("isValid", 1));
criteria.addOrder(Order.desc("updateDate"));
stockInOutModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception error findByDocNoINAndCurrentDate : ", e);
}
return stockInOutModelList;
}
public List<StockInOutModel> findByDocNoQRndCurrentDate(){
List<StockInOutModel> stockInOutModelList = Utils.getEmptyList();
try {
System.setProperty("user.timezone", "GMT+07:00");
System.setProperty("user.language", "en");
System.setProperty("user.country", "US");
Locale.setDefault(Locale.US);
Criteria criteria = getCriteria();
criteria.add(Restrictions.like("docNo", "QR%"));
criteria.add(Restrictions.ge("docDate", Utils.minDateTime()));
criteria.add(Restrictions.le("docDate", Utils.maxDateTime()));
criteria.add(Restrictions.eq("isValid", 1));
criteria.addOrder(Order.desc("updateDate"));
stockInOutModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception error findByDocNoINAndCurrentDate : ", e);
}
return stockInOutModelList;
}
public List<StockInOutModel> findBySearch(StockTransferView stockTransferView){
log.debug("search {}", stockTransferView.toString());
List<StockInOutModel> stockInOutModelList = Utils.getEmptyList();
try {
System.setProperty("user.timezone", "GMT+07:00");
System.setProperty("user.language", "en");
System.setProperty("user.country", "US");
Locale.setDefault(Locale.US);
Criteria criteria = getCriteria();
if (!Utils.isNull(stockTransferView.getDocNo()) && !Utils.isZero(stockTransferView.getDocNo().length())){
criteria.add(Restrictions.ilike("docNo", "%" + stockTransferView.getDocNo() + "%"));
} else {
criteria.add(Restrictions.ilike("docNo", "TR%"));
}
if (!Utils.isZero(stockTransferView.getDocNoteId())){
log.debug("---------- {}", stockTransferView.getDocNoteId());
criteria.add(Restrictions.eq("msStockInOutNoteModel.id", stockTransferView.getDocNoteId()));
}
criteria.add(Restrictions.between("docDate", Utils.minDateTime(stockTransferView.getFormDate()), Utils.maxDateTime(stockTransferView.getToDate())));
criteria.add(Restrictions.eq("isValid", 1));
criteria.addOrder(Order.desc("updateDate"));
stockInOutModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception error findBySearch : ", e);
}
return stockInOutModelList;
}
public List<StockInOutModel> findBySearchIN(IncomingView incomingView){
List<StockInOutModel> stockInOutModelList = Utils.getEmptyList();
try {
System.setProperty("user.timezone", "GMT+07:00");
System.setProperty("user.language", "en");
System.setProperty("user.country", "US");
Locale.setDefault(Locale.US);
Criteria criteria = getCriteria();
criteria.add(Restrictions.like("docNo", "IN%"));
if (!Utils.isZero(incomingView.getDocNoteId())){
criteria.add(Restrictions.eq("msStockInOutNoteModel.id", incomingView.getDocNoteId()));
}
criteria.add(Restrictions.between("docDate", Utils.minDateTime(incomingView.getFormDate()), Utils.maxDateTime(incomingView.getToDate())));
// criteria.add(Restrictions.ge("docDate", incomingView.getFormDate()));
// criteria.add(Restrictions.le("docDate", incomingView.getToDate()));
criteria.add(Restrictions.eq("isValid", 1));
criteria.addOrder(Order.desc("updateDate"));
// log.debug("SQL : [{}] - [{}]", Utils.minDateTime(incomingView.getFormDate()), Utils.maxDateTime(incomingView.getToDate()));
// log.debug("[{}]", Locale.getDefault());
stockInOutModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception error findBySearch : ", e);
}
return stockInOutModelList;
}
public List<StockInOutModel> findBySearchIOU(IssuingView issuingView){
List<StockInOutModel> stockInOutModelList = Utils.getEmptyList();
try {
System.setProperty("user.timezone", "GMT+07:00");
System.setProperty("user.language", "en");
System.setProperty("user.country", "US");
Locale.setDefault(Locale.US);
Criteria criteria = getCriteria();
criteria.add(Restrictions.like("docNo", "OU%"));
if (!Utils.isZero(issuingView.getDocNoteId())){
criteria.add(Restrictions.eq("msStockInOutNoteModel.id", issuingView.getDocNoteId()));
}
criteria.add(Restrictions.between("docDate", Utils.minDateTime(issuingView.getFormDate()), Utils.maxDateTime(issuingView.getToDate())));
// criteria.add(Restrictions.ge("docDate", issuingView.getFormDate()));
// criteria.add(Restrictions.le("docDate", issuingView.getToDate()));
criteria.add(Restrictions.eq("isValid", 1));
criteria.addOrder(Order.desc("updateDate"));
stockInOutModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception error findBySearch : ", e);
}
return stockInOutModelList;
}
public List<StockInOutModel> findBySearchQR(QuarantineView quarantineView){
List<StockInOutModel> stockInOutModelList = Utils.getEmptyList();
try {
System.setProperty("user.timezone", "GMT+07:00");
System.setProperty("user.language", "en");
System.setProperty("user.country", "US");
Locale.setDefault(Locale.US);
Criteria criteria = getCriteria();
criteria.add(Restrictions.like("docNo", "QR%"));
criteria.add(Restrictions.between("docDate", Utils.minDateTime(quarantineView.getFormDate()), Utils.maxDateTime(quarantineView.getToDate())));
// criteria.add(Restrictions.ge("docDate", quarantineView.getFormDate()));
// criteria.add(Restrictions.le("docDate", quarantineView.getToDate()));
criteria.add(Restrictions.eq("isValid", 1));
criteria.addOrder(Order.desc("updateDate"));
stockInOutModelList = criteria.list();
} catch (Exception e) {
log.debug("Exception error findBySearch : ", e);
}
return stockInOutModelList;
}
public List<StockViewReport> findReportByStickInoutId(int stockInOutId){
log.debug("findReportByStickInoutId(). {}", stockInOutId);
List<StockViewReport> viewReportList = new ArrayList<StockViewReport>();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append("SELECT ");
sqlBuilder.append(" ").append(getPrefix()).append(".stock_inout.id AS ID,");
sqlBuilder.append(" ").append(getPrefix()).append(".stock_inout.docno AS DOC_NO,");
sqlBuilder.append(" ").append(getPrefix()).append(".stock_inout.docdate AS DOC_DATE,");
sqlBuilder.append(" ").append(getPrefix()).append(".stock_inout_note.inout_code AS INOUT_CODE,");
sqlBuilder.append(" ").append(getPrefix()).append(".stock_inout.remark AS REMARK");
sqlBuilder.append(" FROM ").append(getPrefix()).append(".stock_inout");
sqlBuilder.append(" LEFT JOIN ").append(getPrefix()).append(".stock_inout_note");
sqlBuilder.append(" ON ").append(getPrefix()).append(".stock_inout.stock_inout_note_id = ").append(getPrefix()).append(".stock_inout_note.id");
sqlBuilder.append(" WHERE ").append(getPrefix()).append(".stock_inout.id = ").append(stockInOutId);
log.debug(sqlBuilder.toString());
try {
SQLQuery query = getSession().createSQLQuery(sqlBuilder.toString())
.addScalar("ID", IntegerType.INSTANCE)
.addScalar("DOC_NO", StringType.INSTANCE)
.addScalar("DOC_DATE", TimestampType.INSTANCE)
.addScalar("INOUT_CODE", StringType.INSTANCE)
.addScalar("REMARK", StringType.INSTANCE);
List<Object[]> objects = query.list();
int i = 1;
for (Object[] entity : objects) {
StockViewReport viewReport = new StockViewReport();
viewReport.setId(Utils.parseInt(entity[0]));
viewReport.setDocNo(Utils.parseString(entity[1]));
viewReport.setDocDate(Utils.parseDate(entity[2], null));
viewReport.setInoutCode(Utils.parseString(entity[3]));
viewReport.setRemark(Utils.parseString(entity[4]));
viewReportList.add(viewReport);
}
} catch (Exception e) {
log.debug("Exception SQL : {}", e);
}
return viewReportList;
}
}