/**
 * Copyright (c) 2006-2006 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 javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Category;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIProcess;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
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.SICheckDataConf;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

/**
 * @version $Id: UIProcessListCond.java,v 1.0 2006/04/03 Exp $
 * @author  加工一覧を処理します。
 * <br>Description:
 * <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;===========================<br>
 * Hong.M.J        2006/04/03 12:20:42  Original
 */
public class UIProcessListCond extends SIBasic {
  
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  //在庫コード(検索条件)
  private String individualCode = "";
  //親子コード
  private String cmdtyCode = "";
  //商品名(検索条件)
  private String cmdtyNameTxt = "";
  //加工価格
  private String processPrice = "0";
  //加工支店(検索条件)
  private String branchCode="";
  //加工担当者(検索条件)
  private String chargeCode = "";
  //加工先メーカー名(検索条件)
  private String makerName = "";
  //決済方法(検索条件)
  private String paymentMethod = "";
  //加工日の年(To)(検索条件)
  private String initDateYearToCbo="";
  //加工日の月(To)(検索条件)
  private String initDateMonthToCbo="";
  //加工日の日(To)(検索条件)
  private String initDateDayToCbo="";
  //加工日の年(From)(検索条件)
  private String initDateYearFromCbo="";
  //加工日の月(From)(検索条件)
  private String initDateMonthFromCbo="";
  //加工日の日(From)(検索条件)
  private String initDateDayFromCbo="";
  //在庫ごとの加工費
  private String processingExpence = "0";
  //前画面url
  private String backUrl="";
  //検索用のＳＱＬ文
  private String conditionSQL="";
  //ページ番号
  private String pageNumberTxt="1";
  //入力値チェックの結果、検索可能かどうか？
  private boolean searchFlg = true;
  //並び順
  private String orderBySQL=" ORDER BY aa.initDateTime DESC, aa.individualCode ASC, aa.processNumber DESC ";
  
  private String[] processNumberChk=new String[0];
  
  private String[] processNumberHid=new String[0];
  
  private String[] individualCodeHid=new String[0];
  
  /**
   * @return branchCode を戻します。
   */
  public String getBranchCode() {
    return branchCode;
  }
  /**
   * @param branchCode branchCode を設定。
   */
  public void setBranchCode(String branchCode) {
    this.branchCode = branchCode;
  }
  /**
   * @return chargeCode を戻します。
   */
  public String getChargeCode() {
    return chargeCode;
  }
  /**
   * @param chargeCode chargeCode を設定。
   */
  public void setChargeCode(String chargeCode) {
    this.chargeCode = chargeCode;
  }
  /**
   * @return cmdtyNameTxt を戻します。
   */
  public String getCmdtyNameTxt() {
    return cmdtyNameTxt;
  }
  /**
   * @param cmdtyNameTxt cmdtyNameTxt を設定。
   */
  public void setCmdtyNameTxt(String cmdtyNameTxt) {
    if (SIUtil.isNull(cmdtyNameTxt)) cmdtyNameTxt="";
    this.cmdtyNameTxt=SIUtil.changeTo(cmdtyNameTxt.trim(),this.encode);
  }
  /**
   * @return conditionSQL を戻します。
   */
  public String getConditionSQL() {
    return conditionSQL;
  }
  /**
   * @param conditionSQL conditionSQL を設定。
   */
  public void setConditionSQL(String conditionSQL) {
    if (SIUtil.isNull(conditionSQL)) conditionSQL="";
    this.conditionSQL=SIUtil.changeTo(conditionSQL.trim(),this.encode);
  }
  /**
   * @return individualCode を戻します。
   */
  public String getIndividualCode() {
    return individualCode;
  }
  /**
   * @param individualCode individualCode を設定。
   */
  public void setIndividualCode(String individualCode) {
    if (SIUtil.isNull(individualCode)) individualCode="";
    this.individualCode=SIUtil.changeTo(individualCode.trim(),this.encode);
  }
  /**
   * @return initDateDayFromCbo を戻します。
   */
  public String getInitDateDayFromCbo() {
    return initDateDayFromCbo;
  }
  /**
   * @param initDateDayFromCbo initDateDayFromCbo を設定。
   */
  public void setInitDateDayFromCbo(String initDateDayFromCbo) {
    this.initDateDayFromCbo = initDateDayFromCbo;
  }
  /**
   * @return initDateDayToCbo を戻します。
   */
  public String getInitDateDayToCbo() {
    return initDateDayToCbo;
  }
  /**
   * @param initDateDayToCbo initDateDayToCbo を設定。
   */
  public void setInitDateDayToCbo(String initDateDayToCbo) {
    this.initDateDayToCbo = initDateDayToCbo;
  }
  /**
   * @return initDateMonthFromCbo を戻します。
   */
  public String getInitDateMonthFromCbo() {
    return initDateMonthFromCbo;
  }
  /**
   * @param initDateMonthFromCbo initDateMonthFromCbo を設定。
   */
  public void setInitDateMonthFromCbo(String initDateMonthFromCbo) {
    this.initDateMonthFromCbo = initDateMonthFromCbo;
  }
  /**
   * @return initDateMonthToCbo を戻します。
   */
  public String getInitDateMonthToCbo() {
    return initDateMonthToCbo;
  }
  /**
   * @param initDateMonthToCbo initDateMonthToCbo を設定。
   */
  public void setInitDateMonthToCbo(String initDateMonthToCbo) {
    this.initDateMonthToCbo = initDateMonthToCbo;
  }
  /**
   * @return initDateYearFromCbo を戻します。
   */
  public String getInitDateYearFromCbo() {
    return initDateYearFromCbo;
  }
  /**
   * @param initDateYearFromCbo initDateYearFromCbo を設定。
   */
  public void setInitDateYearFromCbo(String initDateYearFromCbo) {
    this.initDateYearFromCbo = initDateYearFromCbo;
  }
  /**
   * @return initDateYearToCbo を戻します。
   */
  public String getInitDateYearToCbo() {
    return initDateYearToCbo;
  }
  /**
   * @param initDateYearToCbo initDateYearToCbo を設定。
   */
  public void setInitDateYearToCbo(String initDateYearToCbo) {
    this.initDateYearToCbo = initDateYearToCbo;
  }
  //  getter of 加工日(From)
  public String getInitDateFrom(){
    return SIDateTime.getDate(getInitDateYearFromCbo(),getInitDateMonthFromCbo(),getInitDateDayFromCbo());
  }
  //  getter of 加工日(To)
  public String getInitDateTo(){
    return SIDateTime.getDate(getInitDateYearToCbo(),getInitDateMonthToCbo(),getInitDateDayToCbo());
  }
  /**
   * @return makerName を戻します。
   */
  public String getMakerName() {
    return makerName;
  }
  /**
   * @param makerName makerName を設定。
   */
  public void setMakerName(String makerName) {
    if (SIUtil.isNull(makerName)) makerName="";
    this.makerName=SIUtil.changeTo(makerName.trim(),this.encode);
  }
  /**
   * @return pageNumberTxt を戻します。
   */
  public String getPageNumberTxt() {
    return pageNumberTxt;
  }
  /**
   * @param pageNumberTxt pageNumberTxt を設定。
   */
  public void setPageNumberTxt(String pageNumberTxt) {
    this.pageNumberTxt = pageNumberTxt;
  }
  /**
   * @return paymentMethod を戻します。
   */
  public String getPaymentMethod() {
    return paymentMethod;
  }
  /**
   * @param paymentMethod paymentMethod を設定。
   */
  public void setPaymentMethod(String paymentMethod) {
    if (SIUtil.isNull(paymentMethod)) paymentMethod="";
    this.paymentMethod=SIUtil.changeTo(paymentMethod.trim(),this.encode);
  }
  /**
   * @return processPrice を戻します。
   */
  public String getProcessPrice() {
    return processPrice;
  }
  /**
   * @param processPrice processPrice を設定。
   */
  public void setProcessPrice(String processPrice) {
    if (SIUtil.isNull(processPrice)) processPrice="0";
    this.processPrice=SIUtil.changeTo(processPrice.trim(),this.encode);
  }
  /**
   * @return orderBySQL を戻します。
   */
  public String getOrderBySQL() {
    return orderBySQL;
  }
  /**
   * @param orderBySQL orderBySQL を設定。
   */
  public void setOrderBySQL(String orderBySQL) {
    this.orderBySQL = orderBySQL;
  }
  /**
   * @return cmdtyCode を戻します。
   */
  public String getCmdtyCode() {
    return cmdtyCode;
  }
  /**
   * @param cmdtyCode cmdtyCode を設定。
   */
  public void setCmdtyCode(String cmdtyCode) {
    this.cmdtyCode = cmdtyCode;
  }
  /**
   * @return processingExpence を戻します。
   */
  public String getProcessingExpence() {
    return processingExpence;
  }
  /**
   * @param processingExpence processingExpence を設定。
   */
  public void setProcessingExpence(String processingExpence) {
    if (SIUtil.isNull(processingExpence)) processingExpence="0";
    this.processingExpence = processingExpence;
  }
  /**
   * @return backUrl を戻します。
   */
  public String getBackUrl() {
    return backUrl;
  }
  /**
   * @param backUrlを設定。
   */
  public void setBackUrl(String backUrl) {
    if (SIUtil.isNull(backUrl)) backUrl="";
    this.backUrl = backUrl;
  }
  /**
   * @return individualCodeHid を戻します。
   */
  public String[] getIndividualCodeHid() {
    return individualCodeHid;
  }
  /**
   * @param individualCodeHid individualCodeHid を設定。
   */
  public void setIndividualCodeHid(String[] individualCodeHid) {
    this.individualCodeHid = individualCodeHid;
  }
  /**
   * @return processNumberChk を戻します。
   */
  public String[] getProcessNumberChk() {
    return processNumberChk;
  }
  /**
   * @param processNumberChk processNumberChk を設定。
   */
  public void setProcessNumberChk(String[] processNumberChk) {
    this.processNumberChk = processNumberChk;
  }
  /**
   * @return processNumberHid を戻します。
   */
  public String[] getProcessNumberHid() {
    return processNumberHid;
  }
  /**
   * @param processNumberHid processNumberHid を設定。
   */
  public void setProcessNumberHid(String[] processNumberHid) {
    this.processNumberHid = processNumberHid;
  }
  /**
   * 初期設定
   * 初期化を設定します。
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIProcessListCond(){
    searchFlg=false;
    SIDateTime lDateTime = new SIDateTime();
    String Year = Integer.toString(lDateTime.getYear());
    String Month=Integer.toString(lDateTime.getMonth());
    String Day=Integer.toString(lDateTime.getDay());
    
    if(Month.length()==1) Month="0"+Month;
    if(Day.length()==1) Day="0"+Day;
    
    //加工日の年(To)
    this.setInitDateYearToCbo(Year);
    //加工日の月(To)
    this.setInitDateMonthToCbo(Month);
    //加工日の日(To)
    this.setInitDateDayToCbo(Day);
    
    //2週間前の日付をゲットします
    lDateTime.addDay(-14);
    Year = Integer.toString(lDateTime.getYear());
    Month=Integer.toString(lDateTime.getMonth());
    Day=Integer.toString(lDateTime.getDay());
    if(Month.length()==1) Month="0"+Month;
    if(Day.length()==1) Day="0"+Day;
    
    //加工日の年(From)
    this.setInitDateYearFromCbo(Year);
    //加工日の月(From)
    this.setInitDateMonthFromCbo(Month);
    //加工日の日(From)
    this.setInitDateDayFromCbo(Day);
    
    //条件文の設定
    SITableConditionManager lConditionMan=new SITableConditionManager();
    if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
      lConditionMan.add(new SITableCondition("aa","initDateTime",getInitDateFrom(),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      lConditionMan.add(new SITableCondition("aa","initDateTime",getInitDateTo()+" 23:59:59",SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }else{
      lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(getInitDateFrom()),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(getInitDateTo()+" 23:59:59"),SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }
    this.setConditionSQL(lConditionMan.getCondtionSQL());//検索条件設定
  }
  
  public UIProcessListCond(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    init(lRequest,lUrlParam);
  }
  
  /**
   * <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.setIndividualCode((String)lUrlParam.getParam("individualCode"));//在庫コード
    this.setCmdtyNameTxt((String)lUrlParam.getParam("cmdtyNameTxt"));//商品名
    this.setProcessPrice((String)lUrlParam.getParam("processPrice"));//加工価格
    this.setBranchCode((String)lUrlParam.getParam("branchCode"));//加工支店
    this.setChargeCode((String)lUrlParam.getParam("chargeCode"));//加工担当者
    this.setMakerName((String)lUrlParam.getParam("makerName"));//加工先メーカー名
    this.setPaymentMethod((String)lUrlParam.getParam("paymentMethod"));//決済方法
    this.setInitDateYearToCbo((String)lUrlParam.getParam("initDateYearToCbo"));//加工日の年(To)
    this.setInitDateMonthToCbo((String)lUrlParam.getParam("initDateMonthToCbo"));//加工日の月(To)
    this.setInitDateDayToCbo((String)lUrlParam.getParam("initDateDayToCbo"));//加工日の日(To)
    this.setInitDateYearFromCbo((String)lUrlParam.getParam("initDateYearFromCbo"));//加工日の年(From)
    this.setInitDateMonthFromCbo((String)lUrlParam.getParam("initDateMonthFromCbo"));//加工日の月(From)
    this.setInitDateDayFromCbo((String)lUrlParam.getParam("initDateDayFromCbo"));//加工日の日(From)
  }
  
  public void printinit(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest,lUrlParam);
    this.setProcessNumberChk(lRequest.getParameterValues("processNumberChk"));
    this.setProcessNumberHid(lRequest.getParameterValues("processNumberHid"));
    this.setIndividualCodeHid(lRequest.getParameterValues("individualCodeHid"));
  }
  /**
   * <b>initCmdty</b>
   * 入力したデータを基づいて、このbeansを設定します。
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void initCmdty(HttpServletRequest lRequest,SIURLParameter lUrlParam,Connection lConnection){
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest,lUrlParam);
    this.setCmdtyCode((String)lUrlParam.getParam("cmdtyCodeTxt"));//商品コード
    this.setIndividualCode((String)lUrlParam.getParam("individualCodeTxt"));//在庫コード
    try{
      this.setCmdtyNameTxt(SIDBUtil.getFirstData(lConnection,"SELECT cmdtyname FROM cmdtymtbl WHERE cmdtycode="+SIDBUtil.SQL2Str(this.getCmdtyCode())));
    }catch(Exception e){
      this.setCmdtyNameTxt("");
      e.printStackTrace();
    }
  }
  /**
   * <b>getCollection</b>
   * 条件に合ったレコードを検索して、結果のコネクションを作成して、戻します。
   * @param lConnection データベースへの接続コネクション
   * @return レコードのセット
   * @throws なし
   */
  public Collection getCollection(Connection lConnection,SILogin lLogin) throws SIDBAccessException{
    
    Statement lStatement=null;
    ResultSet lResultSet=null;
    StringBuffer lSqlBuf=new StringBuffer();
    StringBuffer lCountBuf=new StringBuffer();
    Collection lResultColl=new ArrayList();
    SIProcess process = null;
    
    //検索条件にエラーがあると検索しない。
    if(!searchFlg){
      return lResultColl;
    }
    lCountBuf.append("SELECT count(*) FROM ").append(SIConfig.SITABLE_CMDTY_PROCESS_NAME).append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa,");
    lCountBuf.append(" cmdtymtbl ").append(SIDBMultiConf.SIALIAS_CURR_NAME).append(" bb");
    lCountBuf.append(" WHERE aa.cmdtyCode = bb.cmdtyCode ");
    lSqlBuf.append("SELECT aa.*,bb.cmdtyCode FROM ").append(SIConfig.SITABLE_CMDTY_PROCESS_NAME).append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa,");
    lSqlBuf.append(" cmdtymtbl ").append(SIDBMultiConf.SIALIAS_CURR_NAME).append(" bb");
    lSqlBuf.append(" WHERE aa.cmdtyCode = bb.cmdtyCode ");
    //検索の条件
    lCountBuf.append(this.getConditionSQL());
    lSqlBuf.append(this.getConditionSQL());
    
    //出力順
    lSqlBuf.append(this.getOrderBySQL());
    log.debug("lSqlBuf="+lSqlBuf.toString());
    //実行
    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();
      lSqlBuf.append(" LIMIT ").append(lPageSize);
      if(lFromInx>0) lSqlBuf.append(" OFFSET ").append(lFromInx);
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      
      for (int jj=0;jj<lFromInx;jj++)lResultColl.add(null);
      int lIndex=0;
      
      //加工レコードのセットの作成
      while (lResultSet.next()&&lIndex<lPageSize){
        process = new SIProcess();
        process.setCmdtyCode(lResultSet.getString("cmdtyCode"));////親コード
        process.setIndividualCode(lResultSet.getString("individualCode"));//在庫コード
        process.setProcessNumber(lResultSet.getString("processNumber"));//加工番号
        process.setStoreNumber(lResultSet.getString("storeNumber"));//入庫番号
        process.setProcessPrice(lResultSet.getString("processPrice"));//加工価格
        process.setBranchCode(lResultSet.getString("branchCode"));//加工支店
        process.setChargeCode(lResultSet.getString("chargeCode"));//加工担当者
        process.setMakerName(lResultSet.getString("makerName"));//加工先メーカー名
        process.setPaymentMethod(lResultSet.getString("paymentMethod"));//決済方法
        process.setRemarks(lResultSet.getString("remarks"));//摘要
        process.setInitDateTime(SIDBUtil.getDate(lResultSet.getTimestamp("initDateTime")));//登録日時(加工日)
        lResultColl.add(process);
        lIndex++;
      }
      for (int jj=lFromInx+lPageSize;jj<lRecordCount;jj++)lResultColl.add(null);
    }catch(Exception ex){
      throw new SIDBAccessException(ex);
    }finally{
      SIDBUtil.close(lResultSet,lStatement);
    }
    return lResultColl;
  }
  
  public Collection getPrintCollection(Connection lConnection,SILogin lLogin) throws SIDBAccessException{
    Statement lStatement=null;
    ResultSet lResultSet=null;
    StringBuffer lSqlBuf=new StringBuffer();
    Collection lResultColl=new ArrayList();
    SIProcess process = null;
    
    //検索条件にエラーがあると検索しない。
    if(!searchFlg){
      return lResultColl;
    }
    lSqlBuf.append("SELECT aa.*,bb.cmdtyname,bb.cmdtyCode ");
    lSqlBuf.append("FROM ").append(SIConfig.SITABLE_CMDTY_PROCESS_NAME).append(" aa,cmdtymtbl bb ");
    lSqlBuf.append("WHERE aa.cmdtyCode = bb.cmdtyCode ");
    lSqlBuf.append(this.getConditionSQL());
    lSqlBuf.append(this.orderBySQL);
    
    log.debug("lSqlBuf="+lSqlBuf.toString());
    //実行
    try{
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      
      //加工レコードのセットの作成
      while (lResultSet.next()){
        process = new SIProcess();
        process.setCmdtyCode(lResultSet.getString("cmdtyCode"));//親コード
        process.setCmdtyNameTxt(lResultSet.getString("cmdtyname"));//商品名
        process.setIndividualCode(lResultSet.getString("individualCode"));//在庫コード
        process.setProcessNumber(lResultSet.getString("processNumber"));//加工番号
        process.setStoreNumber(lResultSet.getString("storeNumber"));//入庫番号
        process.setProcessPrice(lResultSet.getString("processPrice"));//加工価格
        process.setBranchCode(lResultSet.getString("branchCode"));//加工支店
        process.setChargeCode(lResultSet.getString("chargeCode"));//加工担当者
        process.setMakerName(lResultSet.getString("makerName"));//加工先メーカー名
        process.setPaymentMethod(lResultSet.getString("paymentMethod"));//決済方法
        process.setRemarks(lResultSet.getString("remarks"));//摘要
        process.setInitDateTime(SIDBUtil.getDate(lResultSet.getTimestamp("initDateTime")));//登録日時(加工日)
        lResultColl.add(process);
      }
    }catch(Exception ex){
      throw new SIDBAccessException(ex);
    }finally{
      SIDBUtil.close(lResultSet,lStatement);
    }
    return lResultColl;
  }
  
  /**
   * <b>getCmdtyCollection</b>
   * 条件に合ったレコードを検索して、結果のコネクションを作成して、戻します。
   * @param lConnection データベースへの接続コネクション
   * @return レコードのセット
   * @throws なし
   */
  public Collection getCmdtyCollection(Connection lConnection,SILogin lLogin) throws SIDBAccessException{
    Statement lStatement=null;
    ResultSet lResultSet=null;
    StringBuffer lSqlBuf=new StringBuffer();
    Collection lResultColl=new ArrayList();
    SIProcess process = null;
    
    lSqlBuf.append("SELECT aa.*,bb.usedNewFlg, cc.cmdtyname , bb.processingExpence ");
    lSqlBuf.append("FROM ").append(SIConfig.SITABLE_CMDTY_PROCESS_NAME).append(" aa, ");
    lSqlBuf.append("individualtbl bb,cmdtymtbl cc ");
    lSqlBuf.append("WHERE aa.cmdtyCode = bb.cmdtyCode ");
    lSqlBuf.append("AND aa.cmdtyCode = cc.cmdtyCode ");
    lSqlBuf.append("AND aa.individualCode = bb.individualCode ");
    lSqlBuf.append("AND aa.cmdtyCode = ").append(SIDBUtil.SQL2Str(this.getCmdtyCode()," "));
    lSqlBuf.append("AND aa.individualCode =").append(SIDBUtil.SQL2Str(this.getIndividualCode()," "));
    
    //出力順
    lSqlBuf.append(this.getOrderBySQL());
    log.debug("lSqlBuf="+lSqlBuf.toString());
    //実行
    try{
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      
      //商品レコードのセットの作成
      while (lResultSet.next()){
        process = new SIProcess();
        process.setCmdtyCode(lResultSet.getString("cmdtyCode"));////親コード
        process.setIndividualCode(lResultSet.getString("individualCode"));//在庫コード
        process.setCmdtyNameTxt(lResultSet.getString("cmdtyname"));//商品名
        process.setUsedNewFlg(lResultSet.getString("usedNewFlg"));//中古・新品区分
        process.setProcessNumber(lResultSet.getString("processNumber"));//加工番号
        process.setStoreNumber(lResultSet.getString("storeNumber"));//入庫番号
        process.setProcessPrice(lResultSet.getString("processPrice"));//加工価格
        process.setBranchCode(lResultSet.getString("branchCode"));//加工支店
        process.setChargeCode(lResultSet.getString("chargeCode"));//加工担当者
        process.setMakerName(lResultSet.getString("makerName"));//加工先メーカー名
        process.setPaymentMethod(lResultSet.getString("paymentMethod"));//決済方法
        process.setRemarks(lResultSet.getString("remarks"));//摘要
        process.setInitDateTime(SIDBUtil.getDate(lResultSet.getTimestamp("initDateTime")));//登録日時(加工日)
        this.setCmdtyNameTxt(lResultSet.getString("cmdtyname"));//ヘッダ表示項目
        this.setProcessingExpence(lResultSet.getString("processingExpence"));//在庫ごとの加工費
        lResultColl.add(process);
      }
    }catch(Exception ex){
      throw new SIDBAccessException(ex);
    }finally{
      SIDBUtil.close(lResultSet,lStatement);
    }
    return lResultColl;
  }
  
  /**
   * <b>validate</b>
   * 入力したデータをチェックして、同時にSQLの条件文を作成します。
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  public void validate(HttpServletRequest lRequest,SILogin lLogin){
    SICustomErrors errors=new SICustomErrors();
    SITableConditionManager lConditionMan=new SITableConditionManager();
    
    //在庫コード
    if (SIUtil.isNotNull(this.getIndividualCode())&&SICheckValid.checkValid(errors,"在庫コード",this.getIndividualCode(),SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE)){
      lConditionMan.add(new SITableCondition("aa","INDIVIDUALCODE",this.getIndividualCode(),SIConfig.SICONDITION_TYPE_FRONTLIKE,SIConfig.SICONDITION_TYPE_AND));
    }
    //加工支店
    if (SIUtil.isNotNull(this.getBranchCode())){
      lConditionMan.add(new SITableCondition("aa","BRANCHCODE",this.getBranchCode(),SIConfig.SICONDITION_TYPE_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }
    //加工担当者
    if (SIUtil.isNotNull(this.getChargeCode())){
      lConditionMan.add(new SITableCondition("aa","CHARGECODE",this.getChargeCode(),SIConfig.SICONDITION_TYPE_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }
    //加工先メーカー名
    if (SIUtil.isNotNull(this.getMakerName()) && SICheckValid.checkValid(errors,"加工先メーカー名",this.getMakerName(),SICheckDataConf.SICHECK_DATA_ZENKAKU_TYPE)) {
      lConditionMan.add(new SITableCondition("aa","MAKERNAME",this.getMakerName(),SIConfig.SICONDITION_TYPE_LIKE,SIConfig.SICONDITION_TYPE_AND));
    }
    //商品名
    if (SIUtil.isNotNull(this.getCmdtyNameTxt()) && SICheckValid.checkValid(errors,"商品名",this.getCmdtyNameTxt(),SICheckDataConf.SICHECK_DATA_ZENKAKU_TYPE)) {
      lConditionMan.add(new SITableCondition("bb","cmdtyName",this.getCmdtyNameTxt(),SIConfig.SICONDITION_TYPE_LIKE,SIConfig.SICONDITION_TYPE_AND));
    }
    //決済方法
    if (SIUtil.isNotNull(this.getPaymentMethod())){
      lConditionMan.add(new SITableCondition("aa","PAYMENTMETHOD",this.getPaymentMethod(),SIConfig.SICONDITION_TYPE_LIKE,SIConfig.SICONDITION_TYPE_AND));
    }
    //加工日(From)
    if (SIUtil.isNotNull(this.getInitDateFrom())&&SICheckValid.checkValid(errors,"加工日From",this.getInitDateFrom(),SICheckDataConf.SICHECK_DATA_DATE_TYPE)){
      if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
        lConditionMan.add(new SITableCondition("aa","initDateTime",this.getInitDateFrom(),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }else{
        lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(this.getInitDateFrom()),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }
    }
    //加工日(To)
    if (SIUtil.isNotNull(this.getInitDateTo())&&SICheckValid.checkValid(errors,"加工日To",this.getInitDateTo(),SICheckDataConf.SICHECK_DATA_DATE_TYPE)){
      if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
        lConditionMan.add(new SITableCondition("aa","initDateTime",this.getInitDateTo()+" 23:59:59",SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }else{
        lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(this.getInitDateTo()+" 23:59:59"),SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }
    }
    //加工日(比較)
    try{
      if(!SICheckUtil.dateEqual(this.getInitDateFrom(),this.getInitDateTo())){
        SICheckValid.checkValid(errors,"加工日From","加工日To",this.getInitDateFrom(),this.getInitDateTo(),SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
    }catch(Exception e){}
    
    if (!errors.isEmpty()){
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
      this.searchFlg = false;
    }else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      this.searchFlg = true;
    }
    //条件文の設定
    this.conditionSQL=lConditionMan.getCondtionSQL();
  }
  
  /**
   * <b>validateIndividual</b>
   * 入力した在庫コードをチェックします。
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @return なし
   *  @throws なし
   */
  public boolean validateIndividual(HttpServletRequest lRequest,Connection lConnection){
    SICustomErrors errors=new SICustomErrors();
    StringBuffer lCountBuf=new StringBuffer();
    StringBuffer lSqlBuf=new StringBuffer();
    StringBuffer lNameBuf=new StringBuffer();
    
    SICheckValid.checkValid(errors,"在庫コード（リンク）",this.getIndividualCode(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors,"在庫コード（リンク）",this.getIndividualCode(),SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    
    try{
      if(errors.isEmpty()&&SIUtil.isNull(this.getCmdtyCode())){
        lCountBuf.append("SELECT count(*) FROM individualtbl WHERE individualcode=").append(SIDBUtil.SQL2Str(this.getIndividualCode()));
        lSqlBuf.append("SELECT cmdtycode FROM individualtbl WHERE individualcode=").append(SIDBUtil.SQL2Str(this.getIndividualCode()));
        if(!SIDBUtil.getFirstData(lConnection, lCountBuf.toString()).equals("1")){
          errors.addError(new SICustomError("manager.message.error.individual.nothing"));
        }else{
          this.setCmdtyCode(SIDBUtil.getFirstData(lConnection, lSqlBuf.toString()));
          lNameBuf.append("SELECT cmdtyname FROM cmdtymtbl WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.getCmdtyCode()));
          this.setCmdtyNameTxt(SIDBUtil.getFirstData(lConnection, lNameBuf.toString()));
        }
      }else if(errors.isEmpty()){
        return true;
      }
    }catch(Exception e){
      e.printStackTrace();
      errors.addError(new SICustomError("manager.message.error.individual.nothing"));
    }
    if (!errors.isEmpty()){
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
}
