
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.SIHacchuDetail;
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.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;

public class UIHacchuDetailListCond extends SIBasic {
  
  private String hacchuCodeTxt = "";//発注番号
  
  private String stockCodeTxt = "";//仕入先
  
  private String branchCodeTxt = "";//発注支店
  
  private String chargeCodeTxt = "";//発注担当者
  
  private String hacchuBranchTxt = "";//納品支店
  
  private String statusTxt = "1";//発注ステータス
  
  private String orderDateYearFromCbo = "";//注文日From（年）
  
  private String orderDateMonthFromCbo = "";//注文日From（月）
  
  private String orderDateDayFromCbo = "";//注文日From（日）
  
  private String orderDateYearToCbo = "";//注文日To（年）
  
  private String orderDateMonthToCbo = "";//注文日To（月）
  
  private String orderDateDayToCbo = "";//注文日To（日）
  
  private String arrivalPlanDateYearFromCbo = "";//納期From（年）
  
  private String arrivalPlanDateMonthFromCbo = "";//納期From（月）
  
  private String arrivalPlanDateDayFromCbo = "";//納期From（日）
  
  private String arrivalPlanDateYearToCbo = "";//納期To（年）
  
  private String arrivalPlanDateMonthToCbo = "";//納期To（月）
  
  private String arrivalPlanDateDayToCbo = "";//納期To（日）
  
  private String shippmentDateYearFromCbo = "";//検索条件の仕入日From（年）
  
  private String shippmentDateMonthFromCbo = "";//検索条件の仕入日From（月）
  
  private String shippmentDateDayFromCbo = "";//検索条件の仕入日From（日）
  
  private String shippmentDateYearToCbo = "";//検索条件の仕入日To（年）
  
  private String shippmentDateMonthToCbo = "";//検索条件の仕入日To（月）
  
  private String shippmentDateDayToCbo = "";//検索条件の仕入日To（日）
  
  private String shippmentFlgRdo = "";//納品状況
  
  private String shippmentDateYearCbo = "";//出荷日の年
  
  private String shippmentDateMonthCbo = "";//出荷日の月
  
  private String shippmentDateDayCbo = "";//出荷日の日
  
  private String orderCodeTxt = ""; //受注番号
  
  private String cmdtyNameTxt = ""; //商品名
  
  private String individualCodeTxt = ""; //在庫コード
  
  private String[] check = new String[0];
  
  private boolean searchFlg = false;
  
  public UIHacchuDetailListCond(){
    // 初期値をセット
    SIDateTime date = new SIDateTime();
    this.setShippmentDateYearCbo(date.getYearStr());
    this.setShippmentDateMonthCbo(date.getMonthStr());
    this.setShippmentDateDayCbo(date.getDayStr());
    this.setShippmentFlgRdo("2");
    this.setStatusTxt("1");
  }
  
  public UIHacchuDetailListCond(String lUserCode){
    // 初期値をセット
    SIDateTime date = new SIDateTime();
    this.setShippmentDateYearCbo(date.getYearStr());
    this.setShippmentDateMonthCbo(date.getMonthStr());
    this.setShippmentDateDayCbo(date.getDayStr());
    
    this.setStatusTxt("1");
    this.setShippmentFlgRdo("2");
    if (SPUSER1.equals(lUserCode)) {//東配
      this.setHacchuBranchTxt("15");
    }else if (SPUSER2.equals(lUserCode)) {//西村製作所
      this.setHacchuBranchTxt("14");
    }else if (SPUSER3.equals(lUserCode)) {//フィフティヴィジョナリー
      this.setHacchuBranchTxt("20");
    }else if (SPUSER4.equals(lUserCode)) {//吉本製鏡
      this.setHacchuBranchTxt("21");
    }else if (SPUSER5.equals(lUserCode)) {//SPUSER5
      this.setHacchuBranchTxt("22");
    }else if (SPUSER6.equals(lUserCode)) {//SPUSER6
      this.setHacchuBranchTxt("23");
    }else if (SPUSER7.equals(lUserCode)) {//物流センター担当者SP
      this.setHacchuBranchTxt("18");
    }
  }
  
  public String getArrivalPlanDateYearFromCbo() {
    return this.arrivalPlanDateYearFromCbo;
  }
  
  public String getArrivalPlanDateMonthFromCbo() {
    return this.arrivalPlanDateMonthFromCbo;
  }
  
  public String getArrivalPlanDateDayFromCbo() {
    return this.arrivalPlanDateDayFromCbo;
  }
  
  public String getArrivalPlanDateFrom() {
    return SIDateTime.getDate(getArrivalPlanDateYearFromCbo(), getArrivalPlanDateMonthFromCbo(), getArrivalPlanDateDayFromCbo());
  }
  
  public String getArrivalPlanDateYearToCbo() {
    return this.arrivalPlanDateYearToCbo;
  }
  
  public String getArrivalPlanDateMonthToCbo() {
    return this.arrivalPlanDateMonthToCbo;
  }
  
  public String getArrivalPlanDateDayToCbo() {
    return this.arrivalPlanDateDayToCbo;
  }
  
  public String getArrivalPlanDateTo() {
    return SIDateTime.getDate(getArrivalPlanDateYearToCbo(), getArrivalPlanDateMonthToCbo(), getArrivalPlanDateDayToCbo());
  }
  
  public String getBranchCodeTxt() {
    return branchCodeTxt;
  }
  
  public String getChargeCodeTxt() {
    return chargeCodeTxt;
  }
  
  public String[] getCheck() {
    return check;
  }
  
  public String getCmdtyNameTxt() {
    return cmdtyNameTxt;
  }
  
  public String getIndividualCodeTxt() {
    return individualCodeTxt;
  }
  
  public String getHacchuBranchTxt() {
    return hacchuBranchTxt;
  }
  
  public String getHacchuCodeTxt() {
    return hacchuCodeTxt;
  }
  
  public String getOrderCodeTxt() {
    return this.orderCodeTxt;
  }
  
  public String getOrderDateYearFromCbo() {
    return this.orderDateYearFromCbo;
  }
  
  public String getOrderDateMonthFromCbo() {
    return this.orderDateMonthFromCbo;
  }
  
  public String getOrderDateDayFromCbo() {
    return this.orderDateDayFromCbo;
  }
  
  public String getOrderDateFrom() {
    return SIDateTime.getDate(getOrderDateYearFromCbo(), getOrderDateMonthFromCbo(), getOrderDateDayFromCbo());
  }
  
  public String getOrderDateYearToCbo() {
    return this.orderDateYearToCbo;
  }
  
  public String getOrderDateMonthToCbo() {
    return this.orderDateMonthToCbo;
  }
  
  public String getOrderDateDayToCbo() {
    return this.orderDateDayToCbo;
  }
  
  public String getOrderDateTo() {
    return SIDateTime.getDate(getOrderDateYearToCbo(), getOrderDateMonthToCbo(), getOrderDateDayToCbo());
  }
  
  public String getShippmentDateYearFromCbo() {
    return this.shippmentDateYearFromCbo;
  }
  
  public String getShippmentDateMonthFromCbo() {
    return this.shippmentDateMonthFromCbo;
  }
  
  public String getShippmentDateDayFromCbo() {
    return this.shippmentDateDayFromCbo;
  }
  
  public String getShippmentDateFrom() {
    return SIDateTime.getDate(getShippmentDateYearFromCbo(), getShippmentDateMonthFromCbo(), getShippmentDateDayFromCbo());
  }
  
  public String getShippmentDateYearToCbo() {
    return this.shippmentDateYearToCbo;
  }
  
  public String getShippmentDateMonthToCbo() {
    return this.shippmentDateMonthToCbo;
  }
  
  public String getShippmentDateDayToCbo() {
    return this.shippmentDateDayToCbo;
  }
  
  public String getShippmentDateTo() {
    return SIDateTime.getDate(getShippmentDateYearToCbo(), getShippmentDateMonthToCbo(), getShippmentDateDayToCbo());
  }
  
  public String getShippmentDateYearCbo() {
    return this.shippmentDateYearCbo;
  }
  
  public String getShippmentDateMonthCbo() {
    return this.shippmentDateMonthCbo;
  }
  
  public String getShippmentDateDayCbo() {
    return this.shippmentDateDayCbo;
  }
  
  public String getShippmentDate() {
    return SIDateTime.getDate(getShippmentDateYearCbo(), getShippmentDateMonthCbo(), getShippmentDateDayCbo());
  }
  
  public String getShippmentFlgRdo() {
    return this.shippmentFlgRdo;
  }
  
  public String getStatusTxt() {
    return statusTxt;
  }
  
  public String getStockCodeTxt() {
    return stockCodeTxt;
  }
  
  public void setArrivalPlanDateYearFromCbo(String arrivalPlanDateYearFromCbo) {
    if (SIUtil.isNull(arrivalPlanDateYearFromCbo)) arrivalPlanDateYearFromCbo = "";
    this.arrivalPlanDateYearFromCbo = SIUtil.changeTo(arrivalPlanDateYearFromCbo.trim(), this.encode);
  }
  
  public void setArrivalPlanDateMonthFromCbo(String arrivalPlanDateMonthFromCbo) {
    if (SIUtil.isNull(arrivalPlanDateMonthFromCbo)) arrivalPlanDateMonthFromCbo = "";
    this.arrivalPlanDateMonthFromCbo = SIUtil.changeTo(arrivalPlanDateMonthFromCbo.trim(), this.encode);
  }
  
  public void setArrivalPlanDateDayFromCbo(String arrivalPlanDateDayFromCbo) {
    if (SIUtil.isNull(arrivalPlanDateDayFromCbo)) arrivalPlanDateDayFromCbo = "";
    this.arrivalPlanDateDayFromCbo = SIUtil.changeTo(arrivalPlanDateDayFromCbo.trim(), this.encode);
  }
  
  public void setArrivalPlanDateYearToCbo(String arrivalPlanDateYearToCbo) {
    if (SIUtil.isNull(arrivalPlanDateYearToCbo)) arrivalPlanDateYearToCbo = "";
    this.arrivalPlanDateYearToCbo = SIUtil.changeTo(arrivalPlanDateYearToCbo.trim(), this.encode);
  }
  
  public void setArrivalPlanDateMonthToCbo(String arrivalPlanDateMonthToCbo) {
    if (SIUtil.isNull(arrivalPlanDateMonthToCbo)) arrivalPlanDateMonthToCbo = "";
    this.arrivalPlanDateMonthToCbo = SIUtil.changeTo(arrivalPlanDateMonthToCbo.trim(), this.encode);
  }
  
  public void setArrivalPlanDateDayToCbo(String arrivalPlanDateDayToCbo) {
    if (SIUtil.isNull(arrivalPlanDateDayToCbo)) arrivalPlanDateDayToCbo = "";
    this.arrivalPlanDateDayToCbo = SIUtil.changeTo(arrivalPlanDateDayToCbo.trim(), this.encode);
  }
  
  public void setBranchCodeTxt(String branchCodeTxt) {
    if (SIUtil.isNull(branchCodeTxt)) branchCodeTxt = "";
    this.branchCodeTxt = branchCodeTxt;
  }
  
  public void setChargeCodeTxt(String chargeCodeTxt) {
    if (SIUtil.isNull(chargeCodeTxt)) chargeCodeTxt = "";
    this.chargeCodeTxt = chargeCodeTxt;
  }
  
  public void setCheck(String[] check) {
    this.check = check;
  }
  
  public void setCmdtyNameTxt(String cmdtyNameTxt) {
    if (SIUtil.isNull(cmdtyNameTxt)) cmdtyNameTxt = "";
    this.cmdtyNameTxt = cmdtyNameTxt;
  }
  
  public void setIndividualCodeTxt(String individualCodeTxt) {
    if (SIUtil.isNull(individualCodeTxt)) individualCodeTxt = "";
    this.individualCodeTxt = individualCodeTxt;
  }
  
  public void setHacchuBranchTxt(String hacchuBranchTxt) {
    if (SIUtil.isNull(hacchuBranchTxt)) hacchuBranchTxt = "";
    this.hacchuBranchTxt = hacchuBranchTxt;
  }
  
  public void setHacchuCodeTxt(String hacchuCodeTxt) {
    if (SIUtil.isNull(hacchuCodeTxt)) hacchuCodeTxt = "";
    this.hacchuCodeTxt = hacchuCodeTxt;
  }
  
  public void setOrderCodeTxt(String lOrderCodeTxt) {
    if (SIUtil.isNull(lOrderCodeTxt)) lOrderCodeTxt = "";
    this.orderCodeTxt = SIUtil.changeTo(lOrderCodeTxt.trim(), this.encode);
  }
  
  public void setOrderDateYearFromCbo(String lOrderDateYearFromCbo) {
    if (SIUtil.isNull(lOrderDateYearFromCbo)) lOrderDateYearFromCbo = "";
    this.orderDateYearFromCbo = SIUtil.changeTo(lOrderDateYearFromCbo.trim(), this.encode);
  }
  
  public void setOrderDateMonthFromCbo(String lOrderDateMonthFromCbo) {
    if (SIUtil.isNull(lOrderDateMonthFromCbo)) lOrderDateMonthFromCbo = "";
    this.orderDateMonthFromCbo = SIUtil.changeTo(lOrderDateMonthFromCbo.trim(), this.encode);
  }
  
  public void setOrderDateDayFromCbo(String lOrderDateDayFromCbo) {
    if (SIUtil.isNull(lOrderDateDayFromCbo)) lOrderDateDayFromCbo = "";
    this.orderDateDayFromCbo = SIUtil.changeTo(lOrderDateDayFromCbo.trim(), this.encode);
  }
  
  public void setOrderDateYearToCbo(String lOrderDateYearToCbo) {
    if (SIUtil.isNull(lOrderDateYearToCbo)) lOrderDateYearToCbo = "";
    this.orderDateYearToCbo = SIUtil.changeTo(lOrderDateYearToCbo.trim(), this.encode);
  }
  
  public void setOrderDateMonthToCbo(String lOrderDateMonthToCbo) {
    if (SIUtil.isNull(lOrderDateMonthToCbo)) lOrderDateMonthToCbo = "";
    this.orderDateMonthToCbo = SIUtil.changeTo(lOrderDateMonthToCbo.trim(), this.encode);
  }
  
  public void setOrderDateDayToCbo(String lOrderDateDayToCbo) {
    if (SIUtil.isNull(lOrderDateDayToCbo)) lOrderDateDayToCbo = "";
    this.orderDateDayToCbo = SIUtil.changeTo(lOrderDateDayToCbo.trim(), this.encode);
  }
  
  public void setShippmentDateYearFromCbo(String shippmentDateYearFromCbo) {
    if (SIUtil.isNull(shippmentDateYearFromCbo)) shippmentDateYearFromCbo = "";
    this.shippmentDateYearFromCbo = SIUtil.changeTo(shippmentDateYearFromCbo.trim(), this.encode);
  }
  
  public void setShippmentDateMonthFromCbo(String shippmentDateMonthFromCbo) {
    if (SIUtil.isNull(shippmentDateMonthFromCbo)) shippmentDateMonthFromCbo = "";
    this.shippmentDateMonthFromCbo = SIUtil.changeTo(shippmentDateMonthFromCbo.trim(), this.encode);
  }
  
  public void setShippmentDateDayFromCbo(String shippmentDateDayFromCbo) {
    if (SIUtil.isNull(shippmentDateDayFromCbo)) shippmentDateDayFromCbo = "";
    this.shippmentDateDayFromCbo = SIUtil.changeTo(shippmentDateDayFromCbo.trim(), this.encode);
  }
  
  public void setShippmentDateYearToCbo(String shippmentDateYearToCbo) {
    if (SIUtil.isNull(shippmentDateYearToCbo)) shippmentDateYearToCbo = "";
    this.shippmentDateYearToCbo = SIUtil.changeTo(shippmentDateYearToCbo.trim(), this.encode);
  }
  
  public void setShippmentDateMonthToCbo(String shippmentDateMonthToCbo) {
    if (SIUtil.isNull(shippmentDateMonthToCbo)) shippmentDateMonthToCbo = "";
    this.shippmentDateMonthToCbo = SIUtil.changeTo(shippmentDateMonthToCbo.trim(), this.encode);
  }
  
  public void setShippmentDateDayToCbo(String shippmentDateDayToCbo) {
    if (SIUtil.isNull(shippmentDateDayToCbo)) shippmentDateDayToCbo = "";
    this.shippmentDateDayToCbo = SIUtil.changeTo(shippmentDateDayToCbo.trim(), this.encode);
  }
  
  public void setShippmentDateYearCbo(String lShippmentDateYearCbo) {
    if (SIUtil.isNull(lShippmentDateYearCbo)) lShippmentDateYearCbo = "";
    this.shippmentDateYearCbo = SIUtil.changeTo(lShippmentDateYearCbo.trim(), this.encode);
  }
  
  public void setShippmentDateMonthCbo(String lShippmentDateMonthCbo) {
    if (SIUtil.isNull(lShippmentDateMonthCbo)) lShippmentDateMonthCbo = "";
    this.shippmentDateMonthCbo = SIUtil.changeTo(lShippmentDateMonthCbo.trim(), this.encode);
  }
  
  public void setShippmentDateDayCbo(String lShippmentDateDayCbo) {
    if (SIUtil.isNull(lShippmentDateDayCbo)) lShippmentDateDayCbo = "";
    this.shippmentDateDayCbo = SIUtil.changeTo(lShippmentDateDayCbo.trim(), this.encode);
  }
  
  public void setShippmentFlgRdo(String lshippmentFlgRdo) {
    if (SIUtil.isNull(lshippmentFlgRdo)) lshippmentFlgRdo = "";
    this.shippmentFlgRdo = SIUtil.changeTo(lshippmentFlgRdo.trim(), this.encode);
  }
  
  public void setStatusTxt(String statusTxt) {
    if (SIUtil.isNull(statusTxt)) statusTxt = "";
    this.statusTxt = statusTxt;
  }
  
  public void setStockCodeTxt(String stockCodeTxt) {
    if (SIUtil.isNull(stockCodeTxt)) stockCodeTxt = "";
    this.stockCodeTxt = stockCodeTxt;
  }
  
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest, lUrlParam);
    this.setHacchuCodeTxt((String) lUrlParam.getParam("hacchuCodeTxt"));
    this.setOrderCodeTxt((String) lUrlParam.getParam("orderCodeTxt"));
    this.setStockCodeTxt((String) lUrlParam.getParam("stockCodeTxt"));
    this.setBranchCodeTxt((String) lUrlParam.getParam("branchCodeTxt"));
    this.setChargeCodeTxt((String) lUrlParam.getParam("chargeCodeTxt"));
    this.setHacchuBranchTxt((String) lUrlParam.getParam("hacchuBranchTxt"));
    this.setCmdtyNameTxt((String) lUrlParam.getParam("cmdtyNameTxt"));
    this.setIndividualCodeTxt((String) lUrlParam.getParam("individualCodeTxt"));
    this.setStatusTxt((String) lUrlParam.getParam("statusTxt"));
    this.setOrderDateYearFromCbo((String) lUrlParam.getParam("orderDateYearFromCbo"));
    this.setOrderDateMonthFromCbo((String) lUrlParam.getParam("orderDateMonthFromCbo"));
    this.setOrderDateDayFromCbo((String) lUrlParam.getParam("orderDateDayFromCbo"));
    this.setOrderDateYearToCbo((String) lUrlParam.getParam("orderDateYearToCbo"));
    this.setOrderDateMonthToCbo((String) lUrlParam.getParam("orderDateMonthToCbo"));
    this.setOrderDateDayToCbo((String) lUrlParam.getParam("orderDateDayToCbo"));
    this.setShippmentFlgRdo((String) lUrlParam.getParam("shippmentFlgRdo"));
    this.setArrivalPlanDateYearFromCbo((String) lUrlParam.getParam("arrivalPlanDateYearFromCbo"));
    this.setArrivalPlanDateMonthFromCbo((String) lUrlParam.getParam("arrivalPlanDateMonthFromCbo"));
    this.setArrivalPlanDateDayFromCbo((String) lUrlParam.getParam("arrivalPlanDateDayFromCbo"));
    this.setArrivalPlanDateYearToCbo((String) lUrlParam.getParam("arrivalPlanDateYearToCbo"));
    this.setArrivalPlanDateMonthToCbo((String) lUrlParam.getParam("arrivalPlanDateMonthToCbo"));
    this.setArrivalPlanDateDayToCbo((String) lUrlParam.getParam("arrivalPlanDateDayToCbo"));
    this.setShippmentDateYearFromCbo((String) lUrlParam.getParam("shippmentDateYearFromCbo"));
    this.setShippmentDateMonthFromCbo((String) lUrlParam.getParam("shippmentDateMonthFromCbo"));
    this.setShippmentDateDayFromCbo((String) lUrlParam.getParam("shippmentDateDayFromCbo"));
    this.setShippmentDateYearToCbo((String) lUrlParam.getParam("shippmentDateYearToCbo"));
    this.setShippmentDateMonthToCbo((String) lUrlParam.getParam("shippmentDateMonthToCbo"));
    this.setShippmentDateDayToCbo((String) lUrlParam.getParam("shippmentDateDayToCbo"));
    this.setShippmentDateYearCbo((String) lUrlParam.getParam("shippmentDateYearCbo"));
    this.setShippmentDateMonthCbo((String) lUrlParam.getParam("shippmentDateMonthCbo"));
    this.setShippmentDateDayCbo((String) lUrlParam.getParam("shippmentDateDayCbo"));
  }
  
  public void initUpdate(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    this.setShippmentDateYearCbo((String) lUrlParam.getParam("shippmentDateYearCbo"));
    this.setShippmentDateMonthCbo((String) lUrlParam.getParam("shippmentDateMonthCbo"));
    this.setShippmentDateDayCbo((String) lUrlParam.getParam("shippmentDateDayCbo"));
    this.setCheck(lRequest.getParameterValues("check"));
  }
  
  public boolean validate(HttpServletRequest lRequest) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "発注番号", this.getHacchuCodeTxt(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "発注番号", this.getHacchuCodeTxt(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    SICheckValid.checkValid(errors, "受注番号", this.getOrderCodeTxt(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "受注番号", this.getOrderCodeTxt(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    SICheckValid.checkValid(errors, "商品名", this.getCmdtyNameTxt(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "商品名", this.getCmdtyNameTxt(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    SICheckValid.checkValid(errors, "注文日From", getOrderDateFrom(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    SICheckValid.checkValid(errors, "注文日To", getOrderDateTo(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    SICheckValid.checkValid(errors, "納期From", getArrivalPlanDateFrom(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    SICheckValid.checkValid(errors, "納期To", getArrivalPlanDateTo(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    SICheckValid.checkValid(errors, "仕入日From", getShippmentDateFrom(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    SICheckValid.checkValid(errors, "仕入日To", getShippmentDateTo(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    
    try {
      if (!SICheckUtil.dateEqual(this.getOrderDateFrom(), this.getOrderDateTo())) {
        SICheckValid.checkValid(errors, "注文日From", "注文日To", this.getOrderDateFrom(), this.getOrderDateTo(), SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
      if (!SICheckUtil.dateEqual(this.getArrivalPlanDateFrom(), this.getArrivalPlanDateTo())) {
        SICheckValid.checkValid(errors, "納期From", "納期To", this.getArrivalPlanDateFrom(), this.getArrivalPlanDateTo(), SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
      if (!SICheckUtil.dateEqual(this.getShippmentDateFrom(), this.getShippmentDateTo())) {
        SICheckValid.checkValid(errors, "仕入日From", "仕入日To", this.getShippmentDateFrom(), this.getShippmentDateTo(), SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
    } catch (Exception e) {}
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      this.searchFlg = false;
    } else {
      this.searchFlg = true;
    }
    
    return errors.isEmpty();
  }
  
  public boolean validateUpdate(HttpServletRequest lRequest,Connection lConnection){
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "仕入日", getShippmentDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    
    // 出荷日の整合性チェック
    if (SIUtil.isNotNull(getShippmentDate())) {
      SICheckValid.checkValid(errors, "仕入日設定", getShippmentDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    }
    
    // チェックボックスのチェック
    if (this.getCheck() == null || this.getCheck().length == 0) {
      errors.addError(new SICustomError("input.data.checkbox.require", "仕入日設定"));
    }
    
    // 発注日＜＝仕入日 && 設定済仕入日＜＝締処理翌月の１日の場合の変更禁止 && 返品・キャンセル禁止
    boolean datecheck = true;
    boolean datecheck2 = true;
    boolean datecheck3 = true;
    boolean datecheck4 = true;
    boolean statuscheck = true;
    boolean statuscheck2 = true;
    boolean chargecheck = true;
    boolean shippmentcheck = true;
    boolean shippmentcheck2 = true;
    boolean amountcheck = true;
    try {
      if (this.getCheck() != null && this.getCheck().length > 0) {
        for (int i = 0; i < this.getCheck().length; i++) {
          String codeParam = this.getCheck()[i];
          String hacchuCode = "";
          String hacchuIndividualCode = "";
          String hacchuBranchCode = "";
          String[] params = codeParam.split("~");
          if (params.length>=3) {
            hacchuCode = params[0];
            hacchuIndividualCode = params[1];
            hacchuBranchCode = params[2];
          }
          
          SIHacchuDetail detail = new SIHacchuDetail(hacchuCode, hacchuIndividualCode, hacchuBranchCode);
          detail.reset(lConnection);
          
          String amountFlg = SIDBUtil.getFirstData(lConnection, "SELECT amountFlg FROM individualtbl WHERE individualcode="+SIDBUtil.SQL2Str(detail.getIndividualCode()));
          
          if ("1".equals(amountFlg) && SIUtil.isNotNull(getShippmentDate()) && SICheckUtil.dateGreater(getShippmentDate(), new SIDateTime().getFullDate())) {
            datecheck4 = false;
          }
          
          
          String record = "";
          SIDateTime recDate = new SIDateTime();
          record = SIDBUtil.getFirstData(lConnection, "SELECT MAX(season) FROM inventorytbl");
          if (SIUtil.isNotNull(record)) {
            recDate = new SIDateTime(SIDateTime.getDate(record.substring(0, 4), record.substring(4, 6), "01"), "yyyy/MM/dd");
            recDate.addMonth(1);
            if (SIUtil.isNotNull(getShippmentDate()) && SICheckUtil.dateLess(getShippmentDate(), recDate.getFullDate())) {
              errors.addError(new SICustomError("input.data.date.shippment.record3"));
            }
            if (SIUtil.isNotNull(detail.getShippmentDate())) {
              if (SICheckUtil.dateLess(detail.getShippmentDateF(), recDate.getFullDate())) datecheck2 = false;
            }
            if (SICheckUtil.dateEqual(detail.getShippmentDateF(), this.getShippmentDate())) datecheck3 = false;
          }
          String time = detail.getInitDateTime();
          if (SIUtil.isNotNull(getShippmentDate()) && SICheckUtil.isDate(getShippmentDate())) {
            if (SICheckUtil.dateLess(getShippmentDate(), time)) datecheck = false;
          }
          StringBuffer sql = new StringBuffer();
          sql.append("SELECT a.shippmentdate ");
          sql.append("FROM orderdetaillatestvw a,hacchutbl b ");
          sql.append("WHERE a.ordercode=b.ordercode ");
          sql.append("AND NOT EXISTS (SELECT c.hacchucode FROM hacchutbl c WHERE c.status='2' AND c.ordercode=b.ordercode AND c.stockcode=b.stockcode) ");
          sql.append("AND b.hacchucode=").append(SIDBUtil.SQL2Str(hacchuCode," "));
          sql.append("AND a.individualcode=").append(SIDBUtil.SQL2Str(detail.getIndividualCode()));
          
          Statement lStatement = lConnection.createStatement();
          ResultSet lResultSet = lStatement.executeQuery(sql.toString());
          while (lResultSet.next()) {
            String shippmentDate = SIDBUtil.getDate(lResultSet.getTimestamp("shippmentdate"));
            if (SIUtil.isNotNull(getShippmentDate()) && SIUtil.isNotNull(shippmentDate)) {
              if (SICheckUtil.dateGreater(getShippmentDate(), shippmentDate)) shippmentcheck = false;
            } else if (SIUtil.isNull(getShippmentDate()) && SIUtil.isNotNull(shippmentDate)) {
              shippmentcheck2 = false;
            }
          }
          
          sql = new StringBuffer();
          sql.append("SELECT s.individualcode FROM storestocktbl s,hacchudetailtbl d,individualtbl i ");
          sql.append("WHERE i.individualcode=s.individualcode AND i.individualcode=d.individualcode AND s.branchcode=d.branchcode ");
          sql.append("AND i.amountflg=1 AND d.shippmentdate IS NOT NULL AND d.amount+coalesce(d.amountadd,0) > s.amount ");
          sql.append("AND d.hacchucode=").append(SIDBUtil.SQL2Str(hacchuCode," "));
          sql.append("AND d.hacchuIndividualCode=").append(SIDBUtil.SQL2Str(hacchuIndividualCode," "));
          sql.append("AND d.hacchuBranchCode=").append(SIDBUtil.SQL2Str(hacchuBranchCode));
          
          if (SIUtil.isNull(getShippmentDate())&&SIDBUtil.hasData(lConnection, sql.toString())) amountcheck = false;
          
          SIDBUtil.close(lResultSet, lStatement);
          if (!detail.getStatus().equals("1")&&!detail.getStatus().equals("3")) statuscheck = false;
          if (detail.getStatus().equals("3")) statuscheck2 = false;
          if (SIUtil.isNull(detail.getBranch())||SIUtil.isNull(detail.getCharge())) chargecheck = false;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      errors.addError(new SICustomError("database.execute.error"));
    }
    if (!datecheck) errors.addError(new SICustomError("manager.message.freeword", "仕入日は登録日以降の日付を指定してください。"));
    if (!datecheck2) errors.addError(new SICustomError("input.data.date.shippment.record4"));
    if (!datecheck3) errors.addError(new SICustomError("manager.message.error.shippment.nochange"));
    if (!datecheck4) errors.addError(new SICustomError("manager.message.freeword","店舗在庫品は未来日付では仕入日設定できません"));
    if (!shippmentcheck) errors.addError(new SICustomError("manager.message.freeword", "出荷日より後の日付で仕入日を設定することはできません"));
    if (!shippmentcheck2) errors.addError(new SICustomError("manager.message.freeword", "出荷日設定済みのデータに対する仕入日の取り消しはできません"));
    if (!statuscheck) errors.addError(new SICustomError("manager.message.error.shippment.badstatus"));
    if (!statuscheck2) errors.addError(new SICustomError("manager.message.freeword", "未承認の発注データは消し込みできません"));
    if (!chargecheck) errors.addError(new SICustomError("manager.message.freeword", "担当者が設定されていない発注データは消し込みできません"));
    if (!amountcheck) errors.addError(new SICustomError("manager.message.freeword", "在庫がマイナスになるデータに対する仕入日の取り消しはできません"));
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    }
    return errors.isEmpty();
  }
  
  public String getCondtionSQL() {
    SITableConditionManager lConditionMan = new SITableConditionManager();
    
    SITableCondition DD = new SITableCondition("", "a.HacchuCode", this.hacchuCodeTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.orderCode", this.orderCodeTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.branchCode", this.branchCodeTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.chargeCode", this.chargeCodeTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "b.branchCode", this.hacchuBranchTxt, SIConfig.SICONDITION_TYPE_EQUAL, 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("", "b.cmdtyName", this.cmdtyNameTxt, SIConfig.SICONDITION_TYPE_LIKE, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "b.individualCode", this.individualCodeTxt, SIConfig.SICONDITION_TYPE_FRONTLIKE, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    if ("3".equals(this.statusTxt)) {
      DD = new SITableCondition("", "a.status", "1", SIConfig.SICONDITION_TYPE_NOT_EQUAL, SIConfig.SICONDITION_TYPE_AND);
      lConditionMan.add(DD);
    } else {
      DD = new SITableCondition("", "a.status", this.statusTxt, SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
      lConditionMan.add(DD);
    }
    
    DD = new SITableCondition("", "a.hacchuupdatedatetime::date", this.getOrderDateFrom(), SIConfig.SICONDITION_TYPE_GREATER_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.hacchuupdatedatetime::date", this.getOrderDateTo(), SIConfig.SICONDITION_TYPE_LESS_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.arrivalplandate::date", this.getArrivalPlanDateFrom(), SIConfig.SICONDITION_TYPE_GREATER_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.arrivalplandate::date", this.getArrivalPlanDateTo(), SIConfig.SICONDITION_TYPE_LESS_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "b.shippmentdate", this.getShippmentDateFrom(), SIConfig.SICONDITION_TYPE_GREATER_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "b.shippmentdate", this.getShippmentDateTo(), SIConfig.SICONDITION_TYPE_LESS_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    if ("1".equals(this.shippmentFlgRdo)) {
      DD = new SITableCondition("", "b.shippmentdate", "", SIConfig.SICONDITION_TYPE_IS_NOT_NULL, SIConfig.SICONDITION_TYPE_AND);
    } else if ("2".equals(this.shippmentFlgRdo)) {
      DD = new SITableCondition("", "b.shippmentdate", "", SIConfig.SICONDITION_TYPE_IS_NULL, SIConfig.SICONDITION_TYPE_AND);
    }
    lConditionMan.add(DD);
    
    return lConditionMan.getCondtionSQL();
  }
  
  public Collection getCollection(Connection lConnection){
    Collection resultColl = new ArrayList();
    StringBuffer lSqlBuf = new StringBuffer();
    StringBuffer lHacchuBuf = new StringBuffer();
    StringBuffer lCountBuf = new StringBuffer();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    if (!this.searchFlg) return resultColl;
    
    lHacchuBuf.append("SELECT b.hacchucode,b.hacchuindividualcode,b.hacchubranchcode,a.stockcode,c.stockname,b.cmdtyname,b.colorname, ");
    lHacchuBuf.append("b.branchname,CASE b.branchcode WHEN 0 THEN a.branchcode ELSE b.branchcode END AS branchcode, ");
    lHacchuBuf.append("b.amount,b.amountadd,b.purchaseprice,a.ordercode,a.custname, ");
    lHacchuBuf.append("d.branchname AS branch,e.chargecode,e.chargename AS charge, ");
    lHacchuBuf.append("a.hacchuupdatedatetime,a.arrivalplandate,b.shippmentdate,a.status,b.individualcode ");
    
    lCountBuf.append("SELECT count(*) ");
    
    lSqlBuf.append("FROM hacchutbl a ");
    lSqlBuf.append("LEFT OUTER JOIN branchtbl d ON a.branchcode=d.branchcode ");
    lSqlBuf.append("LEFT OUTER JOIN chargetbl e ON a.chargecode=e.chargecode,");
    lSqlBuf.append("hacchudetailtbl b,stockmtbl c ");
    lSqlBuf.append("WHERE a.hacchucode=b.hacchucode AND a.stockcode=c.stockcode AND a.layercode=b.layercode AND a.enabledflg='1' AND b.shipflg='0' ");
    lSqlBuf.append(this.getCondtionSQL());
    
    lHacchuBuf.append(lSqlBuf);
    lCountBuf.append(lSqlBuf);
    
    lHacchuBuf.append("ORDER BY b.hacchucode DESC,b.hacchuindividualcode,b.hacchubranchcode");
    
    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();
      lHacchuBuf.append(" LIMIT ").append(lPageSize);
      if(lFromInx>0)lHacchuBuf.append(" OFFSET ").append(lFromInx);
      lResultSet = lStatement.executeQuery(lHacchuBuf.toString());
      
      for (int jj = 0; jj < lFromInx; jj++)
        resultColl.add(null);
      
      int lIndex = 0;
      
      // レコードのセットの作成
      while (lResultSet.next() && lIndex < lPageSize) {
        SIHacchuDetail lDetail = new SIHacchuDetail();
        lDetail.setHacchuCode(lResultSet.getString("hacchuCode"));
        lDetail.setHacchuIndividualCode(lResultSet.getString("hacchuIndividualCode"));
        lDetail.setHacchuBranchCode(lResultSet.getString("hacchuBranchCode"));
        lDetail.setOrderCode(lResultSet.getString("orderCode"));
        lDetail.setStockCode(lResultSet.getString("stockCode"));
        lDetail.setStockName(lResultSet.getString("stockName"));
        lDetail.setIndividualCode(lResultSet.getString("individualCode"));
        lDetail.setCmdtyName(lResultSet.getString("cmdtyName"));
        lDetail.setColorName(lResultSet.getString("colorName"));
        lDetail.setBranch(lResultSet.getString("branch"));
        lDetail.setChargeCode(lResultSet.getString("chargeCode"));
        lDetail.setCharge(lResultSet.getString("charge"));
        lDetail.setBranchCode(lResultSet.getString("branchCode"));
        lDetail.setBranchName(lResultSet.getString("branchName"));
        lDetail.setAmount(lResultSet.getString("amount"));
        lDetail.setAmountAdd(lResultSet.getString("amountAdd"));
        lDetail.setPurchasePrice(lResultSet.getString("purchasePrice"));
        lDetail.setOrderDateTime(SIDBUtil.getDate(lResultSet.getTimestamp("hacchuUpdateDateTime")));
        lDetail.setArrivalPlanDate(SIDBUtil.getDate(lResultSet.getTimestamp("arrivalPlanDate")));
        lDetail.setShippmentDate(SIDBUtil.getDate(lResultSet.getTimestamp("shippmentDate")));
        lDetail.setStatus(lResultSet.getString("status"));
        lDetail.setCustName(lResultSet.getString("custName"));
        resultColl.add(lDetail);
        lIndex++;
      }
      
      for (int jj = lFromInx + lPageSize; jj < lRecordCount; jj++) resultColl.add(null);
      
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    
    return resultColl;
  }
}