/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
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 java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SICart;
import jp.co.sint.basic.SICartManager;
import jp.co.sint.basic.SICmdty;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIUserInfo;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SIDateTimeType;
import jp.co.sint.database.SITableCondition;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.tools.SIBGUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id : UIRegNewOrderCmdty.java,v 1.0 Exp $
 * @author : Jinwang Chen <br>
 * Description :ショップ管理の一覧・検索の画面に対するbeansクラスを作成します。
 * <p>History</p>
 * <p>Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason</p>
 * ========&nbsp;&nbsp;&nbsp;=========&nbsp;&nbsp;&nbsp;==========================<br>
 * asakura&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2003/08/05&nbsp;&nbsp;&nbsp;Original<br>
 * naotaka&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007/08/29&nbsp;&nbsp;&nbsp;Custom
 */

public class UIRegNewOrderCmdty extends SIBasic {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // ショップコード
  private String shopCodeTxt = "";
  
  // 商品コード
  private String cmdtyCodeTxt = "";
  
  // 在庫コード
  private String individualCodeTxt = "";
  
  // 商品名
  private String cmdtyNameTxt = "";
  
  // 中古新品フラグ
  private String usedNewFlg = "";
  
  // EC表示区分
  private String frontDispFlg = "2";
  
  // 在庫保有支店
  private String branchCode = "XX";
  
  // 在庫管理区分
  private String amountFlg = "2";
  
  // 入荷日From（年）
  private String arrivalDateFromYear = "";
  
  // 入荷日From（月）
  private String arrivalDateFromMonth = "";
  
  // 入荷日From（日）
  private String arrivalDateFromDay = "";
  
  // 入荷日To（年）
  private String arrivalDateToYear = "";
  
  // 入荷日To（月）
  private String arrivalDateToMonth = "";
  
  // 入荷日To（日）
  private String arrivalDateToDay = "";
  
  // カテゴリ
  private String ctgryCode = "";
  
  // ブランド
  private String maker = "";
  
  // JANコード
  private String janCodeIndividual = "";
  
  // 死活フラグ
  private String disableFlg = "0";
  
  private String pageNumberTxt_Order = "1";
  
  private String pageNumberTxt_Cust = "1";
  
  // SQL検索のばあいに、条件文
  private String conditionSQL = "";
  
  // 画面遷移フラグ
  private String screenFlg = "0";
  
  // EDBTG003-00 nagayoshi add start
  // 商品種別
  private String cmdtySetTypeFlg = "";
  // EDBTG003-00 nagayoshi add end
  /**
   * UIRegNewOrdercmdty コンストラクタ
   * 
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIRegNewOrderCmdty() {

  }
  
  /**
   * UIRegNewOrdercmdty コンストラクタ
   * 
   * @param lRequest リクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public UIRegNewOrderCmdty(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
  }
  
  // setter of ショップコード
  public void setShopCodeTxt(String lShopCodeTxt) {
    if (SIUtil.isNull(lShopCodeTxt)) lShopCodeTxt = "";
    this.shopCodeTxt = SIUtil.changeTo(lShopCodeTxt.trim(), this.encode);
  }
  
  // setter of 商品コード
  public void setCmdtyCodeTxt(String lCmdtyCodeTxt) {
    if (SIUtil.isNull(lCmdtyCodeTxt)) lCmdtyCodeTxt = "";
    this.cmdtyCodeTxt = SIUtil.changeTo(lCmdtyCodeTxt.trim(), this.encode);
  }
  
  // setter of 商品名
  public void setCmdtyNameTxt(String lCmdtyNameTxt) {
    if (SIUtil.isNull(lCmdtyNameTxt)) lCmdtyNameTxt = "";
    this.cmdtyNameTxt = SIUtil.changeTo(lCmdtyNameTxt.trim(), this.encode);
  }
  
  public void setPageNumberTxt_Order(String string) {
    if (SIUtil.isNull(string)) string = "1";
    pageNumberTxt_Order = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  public void setPageNumberTxt_Cust(String string) {
    if (SIUtil.isNull(string)) string = "1";
    pageNumberTxt_Cust = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  // setter of 条件文
  public void setConditionSQL(String lConditionSQL) {
    if (lConditionSQL == null) lConditionSQL = "";
    this.conditionSQL = lConditionSQL;
  }
  
  // getter of ショップコード
  public String getShopCodeTxt() {
    return this.shopCodeTxt;
  }
  
  // getter of 商品コード
  public String getCmdtyCodeTxt() {
    return this.cmdtyCodeTxt;
  }
  
  // getter of 商品名
  public String getCmdtyNameTxt() {
    return this.cmdtyNameTxt;
  }
  
  public String getPageNumberTxt_Order() {
    return this.pageNumberTxt_Order;
  }
  
  public String getPageNumberTxt_Cust() {
    return this.pageNumberTxt_Cust;
  }
  
  // getter of 条件文
  public String getCondtionSQL() {
    return this.conditionSQL;
  }
  
  // getter of 在庫コード
  public String getIndividualCodeTxt() {
    return individualCodeTxt;
  }
  
  // setter of 在庫コード
  public void setIndividualCodeTxt(String individualCodeTxt) {
    this.individualCodeTxt = individualCodeTxt;
  }
  
  // getter of 中古新品フラグ
  public String getUsedNewFlg() {
    return usedNewFlg;
  }
  
  // setter of 中古新品フラグ
  public void setUsedNewFlg(String usedNewFlg) {
    this.usedNewFlg = usedNewFlg;
  }
  
  //getter of screenFlg.
  public String getScreenFlg() {
    return screenFlg;
  }
  
  //setter of screenFlg
  public void setScreenFlg(String screenFlg) {
    this.screenFlg = screenFlg;
  }
  
  //getter of amountFlg
  public String getAmountFlg() {
    return this.amountFlg;
  }
  
  //getter of arrivalDateFromDay
  public String getArrivalDateFromDay() {
    return this.arrivalDateFromDay;
  }
  
  //getter of arrivalDateFromMonth
  public String getArrivalDateFromMonth() {
    return this.arrivalDateFromMonth;
  }
  
  //getter of arrivalDateFromYear
  public String getArrivalDateFromYear() {
    return this.arrivalDateFromYear;
  }
  
  //getter of arrivalDateToDay
  public String getArrivalDateToDay() {
    return this.arrivalDateToDay;
  }
  
  //getter of arrivalDateToMonth
  public String getArrivalDateToMonth() {
    return this.arrivalDateToMonth;
  }
  
  //getter of arrivalDateToYear
  public String getArrivalDateToYear() {
    return this.arrivalDateToYear;
  }
  
  //getter of branchCode
  public String getBranchCode() {
    return this.branchCode;
  }
  
  //getter of ctgryCode
  public String getCtgryCode() {
    return this.ctgryCode;
  }
  
  //getter of frontDispFlg
  public String getFrontDispFlg() {
    return this.frontDispFlg;
  }
  
  //getter of maker
  public String getMaker() {
    return this.maker;
  }
  
  //getter of janCodeIndividual
  public String getJanCodeIndividual() {
    return this.janCodeIndividual;
  }
  
  //getter of disableFlg
  public String getDisableFlg() {
    return this.disableFlg;
  }
  
  //setter of amountFlg
  public void setAmountFlg(String amountFlg) {
    if (SIUtil.isNull(amountFlg)) amountFlg = "2";
    this.amountFlg = SIUtil.changeTo(amountFlg.trim(), this.encode);
  }
  
  //setter of arrivalDateFromDay
  public void setArrivalDateFromDay(String arrivalDateFromDay) {
    if (SIUtil.isNull(arrivalDateFromDay)) arrivalDateFromDay = "";
    this.arrivalDateFromDay = SIUtil.changeTo(arrivalDateFromDay.trim(), this.encode);
  }
  
  //setter of arrivalDateFromMonth
  public void setArrivalDateFromMonth(String arrivalDateFromMonth) {
    if (SIUtil.isNull(arrivalDateFromMonth)) arrivalDateFromMonth = "";
    this.arrivalDateFromMonth = SIUtil.changeTo(arrivalDateFromMonth.trim(), this.encode);
  }
  
  //setter of arrivalDateFromYear
  public void setArrivalDateFromYear(String arrivalDateFromYear) {
    if (SIUtil.isNull(arrivalDateFromYear)) arrivalDateFromYear = "";
    this.arrivalDateFromYear = SIUtil.changeTo(arrivalDateFromYear.trim(), this.encode);
  }
  
  //setter of arrivalDateToDay
  public void setArrivalDateToDay(String arrivalDateToDay) {
    if (SIUtil.isNull(arrivalDateToDay)) arrivalDateToDay = "";
    this.arrivalDateToDay = SIUtil.changeTo(arrivalDateToDay.trim(), this.encode);
  }
  
  //setter of arrivalDateToMonth
  public void setArrivalDateToMonth(String arrivalDateToMonth) {
    if (SIUtil.isNull(arrivalDateToMonth)) arrivalDateToMonth = "";
    this.arrivalDateToMonth = SIUtil.changeTo(arrivalDateToMonth.trim(), this.encode);
  }
  
  //setter of arrivalDateToYear
  public void setArrivalDateToYear(String arrivalDateToYear) {
    if (SIUtil.isNull(arrivalDateToYear)) arrivalDateToYear = "";
    this.arrivalDateToYear = SIUtil.changeTo(arrivalDateToYear.trim(), this.encode);
  }
  
  //setter of branchCode
  public void setBranchCode(String branchCode) {
    if (SIUtil.isNull(branchCode)) branchCode = "XX";
    this.branchCode = SIUtil.changeTo(branchCode.trim(), this.encode);
  }
  
  //setter of ctgryCode
  public void setCtgryCode(String ctgryCode) {
    if (SIUtil.isNull(ctgryCode)) ctgryCode = "";
    this.ctgryCode = SIUtil.changeTo(ctgryCode.trim(), this.encode);
  }
  
  //setter of frontDispFlg
  public void setFrontDispFlg(String frontDispFlg) {
    if (SIUtil.isNull(frontDispFlg)) frontDispFlg = "2";
    this.frontDispFlg = SIUtil.changeTo(frontDispFlg.trim(), this.encode);
  }
  
  //setter of maker
  public void setMaker(String maker) {
    if (SIUtil.isNull(maker)) maker = "";
    this.maker = SIUtil.changeTo(maker.trim(), this.encode);
  }
  
  //setter of janCodeIndividual
  public void setJanCodeIndividual(String janCodeIndividual) {
    if (SIUtil.isNull(janCodeIndividual)) janCodeIndividual = "";
    this.janCodeIndividual = SIUtil.changeTo(janCodeIndividual.trim(), this.encode);
  }
  
  //setter of disableFlg
  public void setDisableFlg(String disableFlg) {
    if (SIUtil.isNull(disableFlg)) disableFlg = "";
    this.disableFlg = SIUtil.changeTo(disableFlg.trim(), this.encode);
  }
  
  // getter of ArrivalDateFrom
  public String getArrivalDateFrom(){
    return SIDateTime.getDate(getArrivalDateFromYear(),getArrivalDateFromMonth(),getArrivalDateFromDay());
  }
  
  // getter of ArrivalDateTo
  public String getArrivalDateTo(){
    return SIDateTime.getDate(getArrivalDateToYear(),getArrivalDateToMonth(),getArrivalDateToDay());
  }
  
  // EDBTG003-00 nagayoshi add start
  // getter of CmdtySetTypeFlg
  public String getCmdtySetTypeFlg() {
    return this.cmdtySetTypeFlg;
  }
  
  // setter of CmdtySetTypeFlg
  public void setCmdtySetTypeFlg(String cmdtySetTypeFlg) {
    if (SIUtil.isNull(cmdtySetTypeFlg)) cmdtySetTypeFlg = "";
    this.cmdtySetTypeFlg = cmdtySetTypeFlg;
  }
  // EDBTG003-00 nagayoshi add end
  
  /**
   * <b>init</b> 入力したデータを基づいて、このbeansを設定します。
   * 
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);
    this.setCmdtyCodeTxt((String) lUrlParam.getParam("cmdtyCodeTxt"));
    this.setIndividualCodeTxt((String) lUrlParam.getParam("individualCodeTxt"));
    this.setCmdtyNameTxt((String) lUrlParam.getParam("cmdtyNameTxt"));
    this.setShopCodeTxt((String) lUrlParam.getParam("shopCodeTxt"));
    this.setUsedNewFlg((String) lUrlParam.getParam("usedNewFlg"));
    this.setPageNumberTxt_Order((String) lUrlParam.getParam("pageNumberTxt_order"));
    this.setPageNumberTxt_Cust((String) lUrlParam.getParam("pageNumberTxt_cust"));
    this.setMaker((String) lUrlParam.getParam("maker"));
    this.setAmountFlg((String) lUrlParam.getParam("amountFlg"));
    this.setCtgryCode((String) lUrlParam.getParam("ctgryCode"));
    this.setBranchCode((String) lUrlParam.getParam("branchCode"));
    this.setFrontDispFlg((String) lUrlParam.getParam("frontDispFlg"));
    this.setArrivalDateFromYear((String) lUrlParam.getParam("arrivalDateFromYear"));
    this.setArrivalDateFromMonth((String) lUrlParam.getParam("arrivalDateFromMonth"));
    this.setArrivalDateFromDay((String) lUrlParam.getParam("arrivalDateFromDay"));
    this.setArrivalDateToYear((String) lUrlParam.getParam("arrivalDateToYear"));
    this.setArrivalDateToMonth((String) lUrlParam.getParam("arrivalDateToMonth"));
    this.setArrivalDateToDay((String) lUrlParam.getParam("arrivalDateToDay"));
    this.setJanCodeIndividual((String) lUrlParam.getParam("janCodeIndividual"));
    this.setDisableFlg((String) lUrlParam.getParam("disableFlg"));
    if(SIUtil.isNotNull(this.branchCode)&&!this.branchCode.equals("XX")){
      this.setAmountFlg("1");
    }
    // EDBTG003-00 nagayoshi add start
    this.setCmdtySetTypeFlg((String) lUrlParam.getParam("cmdtySetTypeFlg"));
    // EDBTG003-00 nagayoshi add end
  }
  
  public Collection getCollection(HttpServletRequest lRequest, Connection lConnection) throws SIDBAccessException {
    return getCollection(lRequest,lConnection,"");
  }
  
  public Collection getCollection(HttpServletRequest lRequest, Connection lConnection, String branchCode) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    SICmdty lCmdty = new SICmdty();
    Collection lCmdtys = new ArrayList();
    String amountBranch = branchCode;
    if(SIUtil.isNull(amountBranch)) amountBranch="999";
    SIUserInfo lUserInfo = new SIUserInfo();
    if (lRequest != null) lUserInfo = SIHTMLUtil.getUserInfo(lRequest);
    
    StringBuffer lCountSqlBuf = new StringBuffer();// レコード数を求める
    StringBuffer lCmdtySqlBuf = new StringBuffer();// 商品レコード
    
    // EDBTG003-00 nagayoshi mod start
//    lCmdtySqlBuf.append("SELECT a1.ShopCode,a1.cmdtycode,a1.individualcode,a1.cmdtyname,a1.usedNewFlg,a1.taxFlg,a1.unitprice, a1.amountFlg ");
    lCmdtySqlBuf.append("SELECT a1.ShopCode,a1.cmdtycode,a1.individualcode,a1.cmdtyname,a1.usedNewFlg,a1.taxFlg, a1.amountFlg ");
    lCmdtySqlBuf.append(",case ");
    lCmdtySqlBuf.append("  when a1.cmdtycompositionflg = 0 then a1.unitprice  ");
    lCmdtySqlBuf.append("  else getSetCmdtyPrice(a1.ShopCode,a1.cmdtycode,a1.individualcode,a1.cmdtycompositionflg,a1.unitprice)");
    lCmdtySqlBuf.append("end AS unitprice ");
    // EDBTG003-00 nagayoshi mod end
    lCmdtySqlBuf.append(",s1.amount,ss.amount AS amount2,b1.colorname,COALESCE((SELECT TaxRate FROM TaxVW),0) AS TaxRate, a1.memberdiscountflg ");
    // EDBTG003-00 nagayoshi add start
    lCmdtySqlBuf.append(",a1.cmdtycompositionflg ");
    // EDBTG003-00 nagayoshi add end
    lCmdtySqlBuf.append("FROM cmdtyunittbl a1,colortbl b1 ");
    lCmdtySqlBuf.append(",(SELECT individualcode,amount-bgpamount AS amount FROM cmdtyunittbl) s1 ");
    lCmdtySqlBuf.append(",(SELECT individualcode,amount FROM storestocktbl WHERE branchCode = ").append(SIDBUtil.SQL2Str(amountBranch,") ss "));
    lCmdtySqlBuf.append("WHERE a1.colorcode=b1.colorcode AND shopCode='0' ");
    lCmdtySqlBuf.append("AND a1.individualcode=ss.individualcode AND a1.individualcode=s1.individualcode ");
    
    lCountSqlBuf.append("SELECT count(a1.individualcode) ");
    lCountSqlBuf.append("FROM cmdtyunittbl a1 WHERE shopCode='0' ");
    
    lCmdtySqlBuf.append(this.conditionSQL);
    lCountSqlBuf.append(this.conditionSQL);
    
    if(SIUtil.isNotNull(branchCode)) {
      lCmdtySqlBuf.append(" AND CASE WHEN a1.amountFlg='0' THEN true ");
      lCmdtySqlBuf.append(" WHEN a1.individualcode IN(SELECT individualcode FROM storestocktbl WHERE amount<>0 AND branchcode=").append(SIDBUtil.SQL2Str(branchCode,") "));
      lCmdtySqlBuf.append(" THEN true ELSE false END ");
      lCountSqlBuf.append(" AND CASE WHEN a1.amountFlg='0' THEN true ");
      lCountSqlBuf.append(" WHEN a1.individualcode IN(SELECT individualcode FROM storestocktbl WHERE amount<>0 AND branchcode=").append(SIDBUtil.SQL2Str(branchCode,") "));
      lCountSqlBuf.append(" THEN true ELSE false END ");
    }
    
    lCmdtySqlBuf.append(" ORDER BY to_number(a1.cmdtycode,'9999999999999'),a1.individualCode");
    
    // 出力順
    log.debug("lSqlBuf=" + lCmdtySqlBuf.toString());
    // 実行
    try {
      int lRecordCount = Integer.parseInt(SIDBUtil.getFirstData(lConnection, lCountSqlBuf.toString()));// レコード数の取得
      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;
      
      log.debug("getCollection:lFromInx=" + lFromInx + ",lToInx=" + lToInx + ",lRecordCount=" + lRecordCount);
      
      lStatement = lConnection.createStatement();
      lCmdtySqlBuf.append(" LIMIT ").append(lPageSize);
      if(lFromInx>0) lCmdtySqlBuf.append(" OFFSET ").append(lFromInx);
      lResultSet = lStatement.executeQuery(lCmdtySqlBuf.toString());
      
      for (int jj = 0; jj < lFromInx; jj++)
        lCmdtys.add(null);
      int lIndex = 0;
      
      // 商品レコードのセットの作成
      while (lResultSet.next() && lIndex < lPageSize) {
        lCmdty = new SICmdty();
        lCmdty.setEncode(SIConfig.SIENCODE_NONE);
        lCmdty.setShopCode(lResultSet.getString("ShopCode"));
        lCmdty.setCmdtyCode(lResultSet.getString("CmdtyCode"));
        lCmdty.setIndividualCode(lResultSet.getString("IndividualCode"));
        lCmdty.setCmdtyName(lResultSet.getString("CmdtyName"));
        lCmdty.setUsedNewFlg(lResultSet.getInt("UsedNewFlg"));
        lCmdty.setColorName(lResultSet.getString("ColorName"));
        lCmdty.setUnitPrice(lResultSet.getString("UnitPrice"));
        lCmdty.setTaxFlg(lResultSet.getString("taxFlg"));// 税区分
        if (SIUtil.isNull(branchCode)) lCmdty.setAmount(lResultSet.getString("amount"));
        else lCmdty.setAmount(lResultSet.getString("amount2"));
        lCmdty.setTaxRate(lResultSet.getString("taxRate"));// 税率
        lCmdty.setAmountFlg(lResultSet.getString("amountFlg"));
        if (lCmdty.getAmountFlg().equals("0")) lCmdty.setBranchName("在庫管理なし");
        else lCmdty.setBranchName(SIBGUtil.getBranchStockTxt(lConnection, lCmdty.getCmdtyCode(), lCmdty.getIndividualCode(), "", "<br>"));
        lCmdty.setMemberDiscountFlg(lResultSet.getString("memberdiscountflg"));
        lCmdty.setMemberDiscountRate(lUserInfo.getDiscountRate());
        lCmdty.setCalcUnitPrice(lResultSet.getString("UnitPrice"));
        // EDBTG003-00 nagayoshi add start
        lCmdty.setCmdtyCompositionFlg(lResultSet.getString("cmdtycompositionflg"));
        // EDBTG003-00 nagayoshi add end
        lCmdtys.add(lCmdty);
        lIndex++;
      }
      for (int jj = lFromInx + lPageSize; jj < lRecordCount; jj++)
        lCmdtys.add(null);
    } catch (Exception ex) {
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lCmdtys;
  }
  
  /**
   * <b>validate</b> 入力したデータをチェックして、同時にSQLの条件文を作成します。
   * 
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  public void validate(HttpServletRequest lRequest) {
    SICustomErrors errors = new SICustomErrors();
    SITableConditionManager lConditionMan = new SITableConditionManager();
    
    // ショップ個別の時はショップコード必須
    if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_INDIVIDUAL) {
      SICheckValid.checkValid(errors, "ショップコード", this.shopCodeTxt, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      // ショップコード
      if (SIUtil.isNotNull(this.shopCodeTxt) && SICheckValid.checkValid(errors, "ショップコード", this.shopCodeTxt, SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE)) {
        lConditionMan.add(new SITableCondition("", "ShopCode", this.shopCodeTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND));
      }
    }
    // 親コード
    if (SIUtil.isNotNull(this.cmdtyCodeTxt) && SICheckValid.checkValid(errors, "親コード", this.cmdtyCodeTxt, SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE)) {
      lConditionMan.add(new SITableCondition("a1", "CmdtyCode", this.cmdtyCodeTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND));
    }
    // 在庫コード
    if (SIUtil.isNotNull(this.individualCodeTxt)) {
      StringBuffer individualSql = new StringBuffer();
      String[] codes = this.individualCodeTxt.trim().split(" |　");
      for (int i = 0; i < codes.length; i++) {
        if (!SICheckUtil.isAlphaDigit(codes[i])) {
          errors.addError(new SICustomError("input.data.alphadigit", "在庫コード"));
          break;
        }
        if (SIUtil.isNotNull(codes[i])) {
          if (SIUtil.isNotNull(individualSql.toString())) individualSql.append("OR");
          individualSql.append(" a1.individualcode LIKE '").append(SIDBUtil.SQL2Like(codes[i])).append("%' ");
        }
      }
      if (SIUtil.isNotNull(individualSql.toString())) {
        lConditionMan.add(new SITableCondition(" AND (" + individualSql.toString() + ") "));
      }
    }
    // 商品名
    if (SIUtil.isNotNull(this.cmdtyNameTxt)) {
      StringBuffer cmdtynameSql = new StringBuffer();
      String[] codes = this.cmdtyNameTxt.trim().split((" |　"));
      for (int i = 0; i < codes.length; i++) {
        if (SIUtil.isNotNull(codes[i])) {
          if (SIUtil.isNotNull(cmdtynameSql.toString())) cmdtynameSql.append("OR");
          cmdtynameSql.append(" a1.cmdtyname LIKE '%").append(SIDBUtil.SQL2Like(codes[i])).append("%' ");
        }
      }
      if (SIUtil.isNotNull(cmdtynameSql.toString())) {
        lConditionMan.add(new SITableCondition(" AND (" + cmdtynameSql.toString() + ") "));
      }
    }
    // カテゴリ
    if(SIUtil.isNotNull(ctgryCode)){
      lConditionMan.add(new SITableCondition(" AND substr(a1.individualcode,0,3) = "+SIDBUtil.SQL2Str(this.ctgryCode)));
    }
    // 支店名
    if(SIUtil.isNotNull(branchCode)&&!branchCode.equals("XX")){
      lConditionMan.add(new SITableCondition(" AND a1.individualcode IN(SELECT individualcode FROM storestocktbl WHERE amount<>0 AND branchcode="+SIDBUtil.SQL2Str(this.branchCode,") ")));
    }
    // 中古新品フラグ
    if (SIUtil.isNotNull(this.usedNewFlg)) {
      lConditionMan.add(new SITableCondition("a1", "UsedNewFlg", this.usedNewFlg, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND));
    }
    // 在庫管理
    if(!this.amountFlg.equals("2")){
      lConditionMan.add(new SITableCondition("a1","amountflg",this.amountFlg,SIConfig.SICONDITION_TYPE_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }
    // EC表示
    if(!frontDispFlg.equals("2")){
      lConditionMan.add(new SITableCondition("a1","frontDispFlg",this.frontDispFlg,SIConfig.SICONDITION_TYPE_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }
    // ブランド
    if(this.maker!=null){
      lConditionMan.add(new SITableCondition("a1","makercode",this.maker,SIConfig.SICONDITION_TYPE_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }
    // JANコード
    if(SIUtil.isNotNull(this.janCodeIndividual)){
      lConditionMan.add(new SITableCondition("a1","janCodeIndividual",this.janCodeIndividual,SIConfig.SICONDITION_TYPE_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }
    // 死活フラグ
    if (SIUtil.isNotNull(this.disableFlg)) {
      lConditionMan.add(new SITableCondition("a1", "disableFlg", this.disableFlg, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND));
    }
    // 入荷日(From)
    if (SIUtil.isNotNull(getArrivalDateFrom())&&SICheckValid.checkValid(errors,"入荷日From",getArrivalDateFrom(),SICheckDataConf.SICHECK_DATA_DATE_TYPE)){
      if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
        lConditionMan.add(new SITableCondition("a1","arrivaldate",getArrivalDateFrom(),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }else{
        lConditionMan.add(new SITableCondition("a1","arrivaldate",new SIDateTimeType(getArrivalDateFrom()),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }
    }
    // 入荷日(To)
    if (SIUtil.isNotNull(getArrivalDateTo())&&SICheckValid.checkValid(errors,"入荷日To",getArrivalDateTo(),SICheckDataConf.SICHECK_DATA_DATE_TYPE)){
      if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
        lConditionMan.add(new SITableCondition("a1","arrivaldate",getArrivalDateTo()+" 23:59:59",SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }else{
        lConditionMan.add(new SITableCondition("a1","arrivaldate",new SIDateTimeType(getArrivalDateTo()+" 23:59:59"),SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }
    }
    // 入荷日大小
    try{
      if(!SICheckUtil.dateEqual(this.getArrivalDateFrom(),this.getArrivalDateTo())){
        SICheckValid.checkValid(errors,"受注日From","受注日To",this.getArrivalDateFrom(),this.getArrivalDateTo(),SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
    }catch(Exception e){}
    
    // EDBTG003-00 nagayoshi add start
    if (SIUtil.isNotNull(this.getCmdtySetTypeFlg())){
      if (SICheckValid.checkValid(errors, "商品種別", this.getCmdtySetTypeFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_CMDTY_SECTION_FLG_INX)) {
        if (getCmdtySetTypeFlg().equals("1")) {
//          StringBuffer str = new StringBuffer();
//          str.append(" AND ( ");
//          str.append("   a1.cmdtycompositionflg in (");
//          str.append(SIDBUtil.SQL2Str(SIConfig.CMDTY_COMPOSITION_VARIATION_SET, ", "));
//          str.append(SIDBUtil.SQL2Str(SIConfig.CMDTY_COMPOSITION_SELECTION_SET, ", "));
//          str.append(SIDBUtil.SQL2Str(SIConfig.CMDTY_COMPOSITION_FIXED_SET, ", "));
//          str.append(SIDBUtil.SQL2Str(SIConfig.CMDTY_COMPOSITION_SPECIFICATION, " "));
//          str.append("   )");
//          str.append(" )");
         lConditionMan.add(new SITableCondition("a1", "cmdtycompositionflg", SIConfig.CMDTY_COMPOSITION_NORMAL, SIConfig.SICONDITION_TYPE_NOT_EQUAL, SIConfig.SICONDITION_TYPE_AND));
//         lConditionMan.add(new SITableCondition(str.toString()));
        } else if (getCmdtySetTypeFlg().equals("0")) {
          lConditionMan.add(new SITableCondition("a1", "cmdtycompositionflg", SIConfig.CMDTY_COMPOSITION_NORMAL, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND));
        }
      }
    }
    // EDBTG003-00 nagayoshi add end
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      lConditionMan.add(new SITableCondition(" AND 1=2 "));
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    }
    // 条件文の設定
    this.setConditionSQL(lConditionMan.getCondtionSQL());
  }
}
