
package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SICmdty;
import jp.co.sint.basic.SIPriceCard;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SITableCondition;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

public class UIPriceCardCmdtyListCond extends SIBasic {
  
  private String individualCodeTxt = "";//在庫コード
  
  private String cmdtyNameTxt = "";//商品名
  
  private String makerCodeTxt = "";//ブランド
  
  private String stockCodeTxt = "";//仕入先
  
  private String disableFlgTxt = "0";//死活フラグ
  
  private String amountFlgTxt = "";//在庫管理フラグ
  
  private String usedNewFlgTxt = "";//中古新品区分
  
  private String branchCodeTxt = "";//在庫保有支店
  
  private boolean searchFlg = false;
  
  public UIPriceCardCmdtyListCond(){}
  
  public String getIndividualCodeTxt() {
    return individualCodeTxt;
  }
  
  public String getCmdtyNameTxt() {
    return cmdtyNameTxt;
  }
  
  public String getMakerCodeTxt() {
    return makerCodeTxt;
  }
  
  public String getStockCodeTxt() {
    return stockCodeTxt;
  }
  
  public String getDisableFlgTxt() {
    return disableFlgTxt;
  }
  
  public String getAmountFlgTxt() {
    return amountFlgTxt;
  }
  
  public String getUsedNewFlgTxt() {
    return usedNewFlgTxt;
  }
  
  public String getBranchCodeTxt() {
    return branchCodeTxt;
  }
  
  public void setIndividualCodeTxt(String individualCodeTxt) {
    if (SIUtil.isNull(individualCodeTxt)) individualCodeTxt = "";
    this.individualCodeTxt = individualCodeTxt;
  }
  
  public void setCmdtyNameTxt(String cmdtyNameTxt) {
    if (SIUtil.isNull(cmdtyNameTxt)) cmdtyNameTxt = "";
    this.cmdtyNameTxt = cmdtyNameTxt;
  }
  
  public void setMakerCodeTxt(String makerCodeTxt) {
    if (SIUtil.isNull(makerCodeTxt)) makerCodeTxt = "";
    this.makerCodeTxt = makerCodeTxt;
  }
  
  public void setStockCodeTxt(String stockCodeTxt) {
    if (SIUtil.isNull(stockCodeTxt)) stockCodeTxt = "";
    this.stockCodeTxt = stockCodeTxt;
  }
  
  public void setDisableFlgTxt(String disableFlgTxt) {
    if (SIUtil.isNull(disableFlgTxt)) disableFlgTxt = "";
    this.disableFlgTxt = disableFlgTxt;
  }
  
  public void setAmountFlgTxt(String amountFlgTxt) {
    if (SIUtil.isNull(amountFlgTxt)) amountFlgTxt = "";
    this.amountFlgTxt = amountFlgTxt;
  }
  
  public void setUsedNewFlgTxt(String usedNewFlgTxt) {
    if (SIUtil.isNull(usedNewFlgTxt)) usedNewFlgTxt = "";
    this.usedNewFlgTxt = usedNewFlgTxt;
  }
  
  public void setBranchCodeTxt(String branchCodeTxt) {
    if (SIUtil.isNull(branchCodeTxt)) branchCodeTxt = "";
    this.branchCodeTxt = branchCodeTxt;
  }
  
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest, lUrlParam);
    this.setIndividualCodeTxt((String) lUrlParam.getParam("individualCodeTxt"));
    this.setCmdtyNameTxt((String) lUrlParam.getParam("cmdtyNameTxt"));
    this.setMakerCodeTxt((String) lUrlParam.getParam("makerCodeTxt"));
    this.setStockCodeTxt((String) lUrlParam.getParam("stockCodeTxt"));
    this.setDisableFlgTxt((String) lUrlParam.getParam("disableFlgTxt"));
    this.setAmountFlgTxt((String) lUrlParam.getParam("amountFlgTxt"));
    this.setUsedNewFlgTxt((String) lUrlParam.getParam("usedNewFlgTxt"));
    this.setBranchCodeTxt((String) lUrlParam.getParam("branchCodeTxt"));
  }
  
  public boolean validate(HttpServletRequest lRequest) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "在庫コード", this.getIndividualCodeTxt(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    // EDBTG003-00 elecs-tani mod start
    //SICheckValid.checkValid(errors, "在庫コード", this.getIndividualCodeTxt(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    SICheckValid.checkValid(errors, "在庫コード", this.getIndividualCodeTxt(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
    // EDBTG003-00 elecs-tani mod start
    SICheckValid.checkValid(errors, "商品名", this.getCmdtyNameTxt(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "商品名", this.getCmdtyNameTxt(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    if (SIUtil.isNotNull(this.getBranchCodeTxt())) {
      this.setAmountFlgTxt("1");
    }
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      this.searchFlg = false;
    }else{
      this.searchFlg = true;
    }
    
    return errors.isEmpty();
  }
  
  public String getCondtionSQL() {
    SITableConditionManager lConditionMan = new SITableConditionManager();
    
    SITableCondition DD = new SITableCondition("", "a.individualCode", this.individualCodeTxt, SIConfig.SICONDITION_TYPE_FRONTLIKE, SIConfig.SICONDITION_TYPE_AND);
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.cmdtyName", this.cmdtyNameTxt, SIConfig.SICONDITION_TYPE_LIKE, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.stockCode", this.stockCodeTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.makerCode", this.makerCodeTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.disableFlg", this.disableFlgTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.amountFlg", this.amountFlgTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.usedNewFlg", this.usedNewFlgTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    return lConditionMan.getCondtionSQL();
  }
  
  public Collection getCollection(Connection lConnection){
    Collection resultColl = new ArrayList();
    StringBuffer lSqlBuf = new StringBuffer();
    StringBuffer lItemBuf = new StringBuffer();
    StringBuffer lCountBuf = new StringBuffer();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    if (!this.searchFlg) return resultColl;
    // EDBTG003-00 nagayoshi add start
//    lItemBuf.append("SELECT a.individualCode,a.cmdtyName,m.makerName,a.newFixedPrice,a.unitprice,a.usedNewFlg ");
    lItemBuf.append("SELECT a.cmdtyCode, a.individualCode,a.cmdtyName,m.makerName,a.newFixedPrice,a.unitprice,a.usedNewFlg ");
    // EDBTG003-00 nagayoshi add end
    lCountBuf.append("SELECT count(*) ");
    
    lSqlBuf.append("FROM cmdtyUnitTbl a LEFT OUTER JOIN stockMTbl s ON a.stockcode=s.stockcode,makerTbl m ");
    if (SIUtil.isNotNull(this.getBranchCodeTxt())) {
      lSqlBuf.append(",storestocktbl ss WHERE a.makerCode=m.makerCode AND ss.individualcode=a.individualcode ");
      lSqlBuf.append("AND ss.amount<>0 AND ss.branchcode=").append(SIDBUtil.SQL2Str(this.getBranchCodeTxt()," "));
    } else {
      lSqlBuf.append("WHERE a.makerCode=m.makerCode ");
    }
    lSqlBuf.append(this.getCondtionSQL());
    
    lItemBuf.append(lSqlBuf);
    lCountBuf.append(lSqlBuf);
    
    lItemBuf.append("ORDER BY a.individualCode");
    
    try {
      String rowCnt = SIDBUtil.getFirstData(lConnection, lCountBuf.toString());
      if (rowCnt.equals("") || rowCnt == null) {
        rowCnt = "0";
      }
      int lRecordCount = Integer.parseInt(rowCnt);// レコード数の取得
      
      int lPageSize = this.getPageSize();// ページサイズ
      int lPageNumber = this.getPageNumer();// ページ番号
      
      int lMaxPage = lRecordCount / lPageSize;
      if (lRecordCount % lPageSize > 0) {
        lMaxPage++;
      }
      if (lPageNumber > lMaxPage) lPageNumber = lMaxPage;
      
      // 開始レコードの番号の設定
      int lFromInx = (lPageNumber - 1) * lPageSize;
      // 終止のレコード番号の設定
      int lToInx = lFromInx + lPageSize - 1;
      if (lFromInx < 0) lFromInx = 0;
      if (lToInx < 0) lToInx = 0;
      
      lStatement = lConnection.createStatement();
      lItemBuf.append(" LIMIT ").append(lPageSize);
      if(lFromInx>0) lItemBuf.append(" OFFSET ").append(lFromInx);
      lResultSet = lStatement.executeQuery(lItemBuf.toString());
      
      for (int jj = 0; jj < lFromInx; jj++)
        resultColl.add(null);
      
      int lIndex = 0;
      
      // レコードのセットの作成
      while (lResultSet.next() && lIndex < lPageSize) {
        SICmdty lCmdty = new SICmdty();
        // EDBTG003-00 nagayoshi add start
        lCmdty.setCmdtyCode(lResultSet.getString("cmdtyCode"));
        // EDBTG003-00 nagayoshi add end
        lCmdty.setIndividualCode(lResultSet.getString("individualCode"));
        lCmdty.setCmdtyName(lResultSet.getString("cmdtyName"));
        lCmdty.setMakerName(lResultSet.getString("makerName"));
        lCmdty.setUnitPrice(lResultSet.getString("unitPrice"));
        lCmdty.setNewFixedPrice(lResultSet.getString("newFixedPrice"));
        lCmdty.setUsedNewFlg(lResultSet.getInt("usedNewFlg"));
        resultColl.add(lCmdty);
        lIndex++;
      }
      
      for (int jj = lFromInx + lPageSize; jj < lRecordCount; jj++) resultColl.add(null);
      
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    
    return resultColl;
  }
}