package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
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 jp.co.sint.basic.SICmdty;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIHacchu;
import jp.co.sint.basic.SIHacchuDetail;
import jp.co.sint.basic.SIStock;
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.SIUtil;
import jp.co.sint.tools.SIURLParameter;

public class UIRegHacchu extends SIHacchu {
  
  //検索条件−仕入先選択
  private String stockCodeTxt = "";
  private String stockNameTxt = "";
  private String stockPronNameTxt = "";
  private String chargeCodeTxt = "";
  
  //検索条件−商品選択
  private String individualCodeTxt = "";
  private String cmdtyNameTxt = "";
  private String ctgryCodeTxt = "";
  private String disableFlgTxt = "0";
  private String usedNewFlgTxt = "";
  private String frontDispFlgTxt = "";
  
  //ヘッダ情報（希望納期）
  private String arrivalPlanDate = "";
  private String arrivalPlanTime = "";
  
  private String cmdtyType = "1";
  private String branchCodeDB = "";
  private String chargeCodeDB = "";
  
  private String[] individualCodeAll;
  private String[] amountAll;
  private String stockBranch = "";
  private String amount = "0";
  
  private Collection itemColl = new ArrayList();
  
  private Collection detailColl = new ArrayList();
  
  private SIHacchuDetail detail = new SIHacchuDetail();
  
  private final int INSERTTYPE = 0;//itemList挿入
  private final int MODIFYTYPE = 1;//itemList更新
  private final int DELETETYPE = 2;//itemList削除
  
  private final String STOCKTYPE = "1";//cmdtyType店舗在庫商品
  private final String ORDERTYPE = "0";//cmdtyType受注発注商品
  
  public UIRegHacchu(){}
  
  public UIRegHacchu(String lLoginUserCode){
    this.setChargeCodeTxt(lLoginUserCode);
  }
  
  public UIRegHacchu(String hacchuCode,String check){
    this.setHacchuCode(hacchuCode);
  }
  
  public String getCmdtyType() {
    return cmdtyType;
  }
  
  public String getStockCodeTxt() {
    return stockCodeTxt;
  }
  
  public String getStockNameTxt() {
    return stockNameTxt;
  }
  
  public String getStockPronNameTxt() {
    return stockPronNameTxt;
  }
  
  public String getChargeCodeTxt() {
    return chargeCodeTxt;
  }
  
  public String getIndividualCodeTxt() {
    return individualCodeTxt;
  }
  
  public String getCmdtyNameTxt() {
    return cmdtyNameTxt;
  }
  
  public String getCtgryCodeTxt() {
    return ctgryCodeTxt;
  }
  
  public String getArrivalPlanDate() {
    return arrivalPlanDate;
  }
  
  public String getArrivalPlanTime() {
    return arrivalPlanTime;
  }
  
  public String getBranchCodeDB() {
    return branchCodeDB;
  }
  
  public String getChargeCodeDB() {
    return chargeCodeDB;
  }
  
  public String getDisableFlgTxt() {
    return disableFlgTxt;
  }
  
  public String getUsedNewFlgTxt() {
    return usedNewFlgTxt;
  }
  
  public String getFrontDispFlgTxt() {
    return frontDispFlgTxt;
  }
  
  public String getStockBranch() {
    return stockBranch;
  }
  
  public String[] getIndividualCodeAll() {
    return individualCodeAll;
  }
  
  public String[] getAmountAll() {
    return amountAll;
  }
  
  public void setCmdtyType(String cmdtyType) {
    if (SIUtil.isNull(cmdtyType)) cmdtyType = "0";
    this.cmdtyType = cmdtyType;
  }
  
  public void setStockCodeTxt(String stockCodeTxt) {
    if (SIUtil.isNull(stockCodeTxt)) stockCodeTxt = "";
    this.stockCodeTxt = stockCodeTxt;
  }
  
  public void setStockNameTxt(String stockNameTxt) {
    if (SIUtil.isNull(stockNameTxt)) stockNameTxt = "";
    this.stockNameTxt = stockNameTxt;
  }
  
  public void setStockPronNameTxt(String stockPronNameTxt) {
    if (SIUtil.isNull(stockPronNameTxt)) stockPronNameTxt = "";
    this.stockPronNameTxt = stockPronNameTxt;
  }
  
  public void setChargeCodeTxt(String chargeCodeTxt) {
    if (SIUtil.isNull(chargeCodeTxt)) chargeCodeTxt = "";
    this.chargeCodeTxt = chargeCodeTxt;
  }
  
  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 setCtgryCodeTxt(String ctgryCodeTxt) {
    if (SIUtil.isNull(ctgryCodeTxt)) ctgryCodeTxt = "";
    this.ctgryCodeTxt = ctgryCodeTxt;
  }
  
  public void setArrivalPlanDate(String arrivalPlanDate) {
    if (SIUtil.isNull(arrivalPlanDate)) arrivalPlanDate = "";
    this.arrivalPlanDate = arrivalPlanDate;
  }
  
  public void setArrivalPlanTime(String arrivalPlanTime) {
    if (SIUtil.isNull(arrivalPlanTime)) arrivalPlanTime = "";
    this.arrivalPlanTime = arrivalPlanTime;
  }
  
  public void setBranchCodeDB(String branchCodeDB) {
    if (SIUtil.isNull(branchCodeDB)) branchCodeDB = "";
    this.branchCodeDB = branchCodeDB;
  }
  
  public void setChargeCodeDB(String chargeCodeDB) {
    if (SIUtil.isNull(chargeCodeDB)) chargeCodeDB = "";
    this.chargeCodeDB = chargeCodeDB;
  }
  
  public void setDisableFlgTxt(String disableFlgTxt) {
    if (SIUtil.isNull(disableFlgTxt)) disableFlgTxt = "";
    this.disableFlgTxt = disableFlgTxt;
  }
  
  public void setUsedNewFlgTxt(String usedNewFlgTxt) {
    if (SIUtil.isNull(usedNewFlgTxt)) usedNewFlgTxt = "";
    this.usedNewFlgTxt = usedNewFlgTxt;
  }
  
  public void setFrontDispFlgTxt(String frontDispFlgTxt) {
    if (SIUtil.isNull(frontDispFlgTxt)) frontDispFlgTxt = "";
    this.frontDispFlgTxt = frontDispFlgTxt;
  }
  
  public void setStockBranch(String stockBranch) {
    if (SIUtil.isNull(stockBranch)) stockBranch = "";
    this.stockBranch = stockBranch;
  }
  
  public Collection getItemColl(){
    return itemColl;
  }
  
  public Collection getDetailColl(){
    return detailColl;
  }
  
  public SIHacchuDetail getDetail(){
    return detail;
  }
  
  public String getTotalOfPrice() {
    String val = "0";
    Iterator itemIte = itemColl.iterator();
    while (itemIte.hasNext()){
      SIHacchuDetail lDetail = (SIHacchuDetail) itemIte.next();
      val = SIUtil.add(val, SIUtil.multi(lDetail.getAmount(), lDetail.getPurchasePrice()));
      val = SIUtil.add(val, lDetail.getImportCost());
      val = SIUtil.add(val, lDetail.getProcessingExpence());
      val = SIUtil.add(val, lDetail.getDeliveryFee());
    }
    return val;
  }
  
  public void initModify(SIURLParameter lUrlParam){
    this.setHacchuCode((String)lUrlParam.getParam("hacchuCode"));
  }
  
  public void initStockCode(Connection lConnection,SIURLParameter lUrlParam){
    this.setStockCode((String)lUrlParam.getParam("stockCode"));
    this.setCmdtyType((String) lUrlParam.getParam("cmdtyType"));
    try{
      this.setStockName(SIDBUtil.getFirstData(lConnection, "SELECT stockname FROM stockmtbl WHERE stockcode="+SIDBUtil.SQL2Str(this.getStockCode())));
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  
  public void initStockCodeAdd(Connection lConnection,SIURLParameter lUrlParam){
    this.setStockCode((String)lUrlParam.getParam("stockCode"));
    this.setOrderCode((String)lUrlParam.getParam("orderCode"));
    this.setCmdtyType((String) lUrlParam.getParam("cmdtyType"));
  }
  
  public void initStockParam(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest, lUrlParam);
    this.setStockCodeTxt((String) lUrlParam.getParam("stockCodeTxt"));
    this.setStockNameTxt((String) lUrlParam.getParam("stockNameTxt"));
    this.setStockPronNameTxt((String) lUrlParam.getParam("stockPronNameTxt"));
    this.setChargeCodeTxt((String) lUrlParam.getParam("chargeCodeTxt"));
    this.setCmdtyType((String) lUrlParam.getParam("cmdtyType"));
  }
  
  public void initCmdtyParam(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest, lUrlParam);
    this.setIndividualCodeTxt((String) lUrlParam.getParam("individualCodeTxt"));
    this.setCmdtyNameTxt((String) lUrlParam.getParam("cmdtyNameTxt"));
    this.setCtgryCodeTxt((String) lUrlParam.getParam("ctgryCodeTxt"));
    this.setDisableFlgTxt((String) lUrlParam.getParam("disableFlgTxt"));
    this.setUsedNewFlgTxt((String) lUrlParam.getParam("usedNewFlgTxt"));
    this.setFrontDispFlgTxt((String) lUrlParam.getParam("frontDispFlgTxt"));
    this.setStockCode((String)lUrlParam.getParam("stockCode"));
    this.setStockName((String)lUrlParam.getParam("stockName"));
    this.setCmdtyType((String) lUrlParam.getParam("cmdtyType"));
    if (SIUtil.isNotNull((String) lUrlParam.getParam("pageNumberTxtNew"))) {
      this.setPageNumberTxt((String) lUrlParam.getParam("pageNumberTxtNew"));
    }
  }
  
  public void initItem(SIURLParameter lUrlParam){
    String index = (String)lUrlParam.getParam("index");
    detail.setIndividualCode((String)lUrlParam.getParam("individualCode" + index));
    detail.setAmount((String)lUrlParam.getParam("amount" + index));
  }
  
  public void initItemAll(SIURLParameter lUrlParam){
    int index = Integer.parseInt((String) lUrlParam.getParam("index"));
    individualCodeAll = new String[index];
    amountAll = new String[index];
    for (int i=1;i<=index;i++){
      individualCodeAll[i-1]=(String)lUrlParam.getParam("individualCode" + String.valueOf(i));
      amountAll[i-1]=(String)lUrlParam.getParam("amount" + String.valueOf(i));
    }
  }
  
  public boolean setItemOne(int i){
    if (individualCodeAll == null || individualCodeAll.length+1<i) return false;
    else if (amountAll == null || SIUtil.isNull(amountAll[i])) return false;
    else {
      detail.setIndividualCode(individualCodeAll[i]);
      detail.setAmount(amountAll[i]);
    }
    return true;
  }
  
  public void initUser(Connection lConnection,SILogin lLogin){
    String userCode = lLogin.getUserCode();
    if(!SICheckUtil.isDigit(userCode)) return;
    try{
      this.setBranchCode(SIDBUtil.getFirstData(lConnection,"SELECT belongingbranchcode FROM chargetbl WHERE chargecode="+SIDBUtil.SQL2Str(userCode)));
      if(SIUtil.isNotNull(this.getBranchCode())) this.setChargeCode(userCode);
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  
  public void initBranchAddress(Connection lConnection) {
    if ("0".equals(this.getDirectFlg())||SIUtil.isNull(this.getBranchCode())) return;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    try{
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery("SELECT * FROM branchtbl WHERE branchcode=" + SIDBUtil.SQL2Str(this.getBranchCode()));
      if (lResultSet.next()) {
        this.setCustName("仕入担当者");
        this.setAddress1(lResultSet.getString("address1"));
        this.setAddress2(lResultSet.getString("address2"));
        this.setAddress3(lResultSet.getString("address3"));
        this.setPostCode1(lResultSet.getString("postCode1"));
        this.setPostCode2(lResultSet.getString("postCode2"));
        this.setTel(lResultSet.getString("tel1"));
        this.setFax(lResultSet.getString("fax1"));
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    
  }
  
  public void initDetail(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    this.setArrivalPlanDate((String) lUrlParam.getParam("arrivalPlanDate"));
    this.setArrivalPlanTime((String) lUrlParam.getParam("arrivalPlanTime"));
    this.setDirectFlg((String) lUrlParam.getParam("directFlg"));
    this.setBranchCode((String) lUrlParam.getParam("branchCode"));
    this.setChargeCode((String) lUrlParam.getParam("chargeCode"));
    this.setCustName((String) lUrlParam.getParam("custName"));
    this.setSalonName((String) lUrlParam.getParam("salonName"));
    this.setPostCode1((String) lUrlParam.getParam("postCode1"));
    this.setPostCode2((String) lUrlParam.getParam("postCode2"));
    this.setAddress1((String) lUrlParam.getParam("address1"));
    this.setAddress2((String) lUrlParam.getParam("address2"));
    this.setAddress3((String) lUrlParam.getParam("address3"));
    this.setTel((String) lUrlParam.getParam("tel"));
    this.setFax((String) lUrlParam.getParam("fax"));
    
    Iterator itemIte = itemColl.iterator();
    while(itemIte.hasNext()){
      SIHacchuDetail lDetail = (SIHacchuDetail)itemIte.next();
      lDetail.setPurchasePrice((String) lUrlParam.getParam("purchasePrice"+lDetail.getIndividualCode()));
      lDetail.setImportCost((String) lUrlParam.getParam("importCost"+lDetail.getIndividualCode()));
      lDetail.setProcessingExpence((String) lUrlParam.getParam("processingExpence"+lDetail.getIndividualCode()));
      lDetail.setDeliveryFee((String) lUrlParam.getParam("deliveryFee"+lDetail.getIndividualCode()));
      lDetail.setComment((String) lUrlParam.getParam("comment"+lDetail.getIndividualCode()));
      lDetail.setAmountAdd((String) lUrlParam.getParam("amountAdd"+lDetail.getIndividualCode()));
      lDetail.setBranchAmountList(lRequest.getParameterValues("branchAmountList"+lDetail.getIndividualCode()));
      lDetail.setBranchAmountAddList(lRequest.getParameterValues("branchAmountAddList"+lDetail.getIndividualCode()));
    }
  }
  
  public void initDetail2(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    this.setArrivalPlanDate((String) lUrlParam.getParam("arrivalPlanDate"));
    this.setArrivalPlanTime((String) lUrlParam.getParam("arrivalPlanTime"));
    this.setDirectFlg((String) lUrlParam.getParam("directFlg"));
    this.setBranchCode((String) lUrlParam.getParam("branchCode"));
    this.setChargeCode((String) lUrlParam.getParam("chargeCode"));
    this.setCustName((String) lUrlParam.getParam("custName"));
    this.setSalonName((String) lUrlParam.getParam("salonName"));
    this.setPostCode1((String) lUrlParam.getParam("postCode1"));
    this.setPostCode2((String) lUrlParam.getParam("postCode2"));
    this.setAddress1((String) lUrlParam.getParam("address1"));
    this.setAddress2((String) lUrlParam.getParam("address2"));
    this.setAddress3((String) lUrlParam.getParam("address3"));
    this.setTel((String) lUrlParam.getParam("tel"));
    this.setFax((String) lUrlParam.getParam("fax"));
    
    Iterator itemIte = itemColl.iterator();
    while(itemIte.hasNext()){
      SIHacchuDetail lDetail = (SIHacchuDetail)itemIte.next();
      lDetail.setPurchasePrice((String) lUrlParam.getParam("purchasePrice"+lDetail.getIndividualCode()));
      lDetail.setImportCost((String) lUrlParam.getParam("importCost"+lDetail.getIndividualCode()));
      lDetail.setProcessingExpence((String) lUrlParam.getParam("processingExpence"+lDetail.getIndividualCode()));
      lDetail.setDeliveryFee((String) lUrlParam.getParam("deliveryFee"+lDetail.getIndividualCode()));
      lDetail.setComment((String) lUrlParam.getParam("comment"+lDetail.getIndividualCode()));
    }
  }
  
  public void initDeliveryFee(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    Iterator itemIte = itemColl.iterator();
    while(itemIte.hasNext()){
      SIHacchuDetail lDetail = (SIHacchuDetail)itemIte.next();
      lDetail.setDeliveryFee((String) lUrlParam.getParam("deliveryFee"+lDetail.getIndividualCode()));
    }
  }
  //仕入管理明細
  public void initHacchuDetail(SIURLParameter lUrlParam){
    String codeParam = (String) lUrlParam.getParam("codeParam");
    String hacchuCode = "";
    String hacchuIndividualCode = "";
    String hacchuBranchCode = "";
    String[] params = codeParam.split("~");
    if (params.length>=3) {
      hacchuCode = params[0];
      hacchuIndividualCode = params[1];
      hacchuBranchCode = params[2];
    }
    
    this.detail.setHacchuCode(hacchuCode);
    this.detail.setHacchuIndividualCode(hacchuIndividualCode);
    this.detail.setHacchuBranchCode(hacchuBranchCode);
  }
  
  public void clearDetail(){
    this.setArrivalPlanDate("");
    this.setArrivalPlanTime("");
    this.setDirectFlg("");
    this.setBranchCode("");
    this.setChargeCode("");
    this.setCustName("");
    this.setSalonName("");
    this.setPostCode1("");
    this.setPostCode2("");
    this.setAddress1("");
    this.setAddress2("");
    this.setAddress3("");
    this.setTel("");
    this.setFax("");
  }
  
  public boolean validateStockCode(HttpServletRequest lRequest){
    SICustomErrors errors = new SICustomErrors();
    if(SIUtil.isNull(this.getStockCode())) {
      errors.addError(new SICustomError("input.data.check.require","仕入先"));
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    }else{
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    }
    return errors.isEmpty();
  }
  
  public boolean validateStockCodeAdd(HttpServletRequest lRequest,Connection lConnection){
    SICustomErrors errors = new SICustomErrors();
    if(SIUtil.isNull(this.getStockCode())) errors.addError(new SICustomError("input.data.check.require","仕入先"));
    SICheckValid.checkValid(errors, "受注番号", this.getOrderCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    
    if(errors.isEmpty()) {
      StringBuffer lSql = new StringBuffer();
      lSql.append("SELECT * FROM orderdetaillatestvw a,individualtbl b,orderlatestvw c ");
      lSql.append("WHERE a.individualcode=b.individualcode AND a.shippmentdate IS NULL ");
      lSql.append("AND a.ordercode=c.ordercode AND c.status='1' ");
      lSql.append("AND a.ordercode=").append(SIDBUtil.SQL2Str(this.getOrderCode()," "));
      lSql.append("AND b.stockcode=").append(SIDBUtil.SQL2Str(this.getStockCode()));
      SICheckValid.checkExist(errors, lConnection, "受注データ", lSql.toString());
      
      lSql = new StringBuffer();
      lSql.append("SELECT * FROM hacchutbl WHERE status=1 AND enabledflg=1 ");
      lSql.append("AND ordercode=").append(SIDBUtil.SQL2Str(this.getOrderCode()," "));
      lSql.append("AND stockcode=").append(SIDBUtil.SQL2Str(this.getStockCode()));
      SICheckValid.checkDuplicate(errors, lConnection, "対象", lSql.toString());
    }
    
    if(errors.isEmpty()) {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    }else{
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    }
    return errors.isEmpty();
  }
  
  public boolean validateStock(HttpServletRequest lRequest){
    SICustomErrors errors = new SICustomErrors();
    SICheckValid.checkValid(errors, "仕入先コード", this.getStockCodeTxt(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "仕入先名カナ", this.getStockPronNameTxt(), SICheckDataConf.SICHECK_DATA_ZENKAKU_KANA_TYPE);
    
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateWarehouseStore(HttpServletRequest lRequest){
    SICustomErrors errors = new SICustomErrors();
    SICheckValid.checkValid(errors, "発注番号", this.getHacchuCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "在庫コード", this.getIndividualCodeTxt(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "入荷数", this.getAmount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateCmdty(HttpServletRequest lRequest){
    SICustomErrors errors = new SICustomErrors();
    SICheckValid.checkValid(errors, "在庫コード", this.getIndividualCodeTxt(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "商品名", this.getCmdtyNameTxt(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateItem(HttpServletRequest lRequest,int updateType){
    SICustomErrors errors = new SICustomErrors();
    SICheckValid.checkValid(errors, "在庫コード", detail.getIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    if (updateType == INSERTTYPE) {
      if (SICheckValid.checkValid(errors, "発注数", detail.getAmount(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE) && Integer.parseInt(detail.getAmount())==0) {
        errors.addError((new SICustomError("input.data.instock.less", "発注数", "1")));
      }
      SICheckValid.checkValid(errors, "発注数", detail.getAmount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    } else if (updateType == MODIFYTYPE) {
      SICheckValid.checkValid(errors, "発注数", detail.getAmount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "発注数", detail.getAmount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
      if (SIUtil.isNull(detail.getAmount())) detail.setAmount("0");
    }
    
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateItemAll(HttpServletRequest lRequest){
    SICustomErrors errors = new SICustomErrors();
    int count=0;
    for (int i=0;i<individualCodeAll.length;i++) {
      if (SIUtil.isNull(amountAll[i])) continue;
      SICheckValid.checkValid(errors, "在庫コード（"+individualCodeAll[i]+"）", individualCodeAll[i], SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
      if (SICheckValid.checkValid(errors, individualCodeAll[i]+"の発注数",amountAll[i], SICheckDataConf.SICHECK_DATA_DIGIT_TYPE) && Integer.parseInt(amountAll[i])==0) {
        errors.addError((new SICustomError("input.data.instock.less", individualCodeAll[i]+"の発注数", "1")));
      }
      SICheckValid.checkValid(errors, individualCodeAll[i]+"の発注数", amountAll[i], SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
      count++;
    }
    if (count==0) errors.addError((new SICustomError("manager.message.freeword","発注数を1つ以上入力して下さい")));
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateItemlist(HttpServletRequest lRequest) {
    SICustomErrors errors = new SICustomErrors();
    if (this.itemColl==null||this.itemColl.size()<1) {
      errors.addError((new SICustomError("input.data.check.require", "発注登録する商品")));
    }
    
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  public boolean validateRedo(HttpServletRequest lRequest,Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    Iterator itemIte = this.itemColl.iterator();
    String total = "0";
    String totalOfPrice ="0";
    StringBuffer lSqlBuf = new StringBuffer();
    lSqlBuf.append("SELECT SUM(CASE d.hacchubranchcode WHEN '1' THEN d.importcost ELSE 0 END) ");
    lSqlBuf.append("+SUM(CASE d.hacchubranchcode WHEN '1' THEN d.deliveryfee ELSE 0 END) ");
    lSqlBuf.append("+SUM(CASE d.hacchubranchcode WHEN '1' THEN d.processingexpence ELSE 0 END) ");
    lSqlBuf.append("+SUM(d.purchaseprice*d.amount) AS total ");
    lSqlBuf.append("FROM hacchuDetailTbl d,hacchutbl h ");
    lSqlBuf.append("WHERE h.hacchucode=d.hacchucode AND h.layercode=d.layercode ");
    lSqlBuf.append("AND h.enabledflg='1' AND d.shipflg='0' AND h.hacchucode=").append(SIDBUtil.SQL2Str(this.getHacchuCode()));
    try{
      totalOfPrice = SIDBUtil.getFirstData(lConnection, lSqlBuf.toString());
    }catch (Exception e){
      e.printStackTrace();
      totalOfPrice = "0";
    }
    while(itemIte.hasNext()) {
      SIHacchuDetail lDetail = (SIHacchuDetail)itemIte.next();
      if (SICheckValid.checkValid(errors, "送料（"+lDetail.getIndividualCode()+"）", lDetail.getDeliveryFee(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE))
      total = SIUtil.add(total,lDetail.getTotalPrice());
    }
    if (errors.isEmpty() && STOCKTYPE.equals(this.getCmdtyType())) {
      if (SICheckUtil.isGreater(total, "999999")&&SICheckUtil.isLess(totalOfPrice, "1000000")){
        errors.addError(new SICustomError("manager.message.freeword","合計発注金額が100万円を超える送料更新はできません"));
      }else if (SICheckUtil.isGreater(total, "99999")&&SICheckUtil.isLess(totalOfPrice, "100000")){
        errors.addError(new SICustomError("manager.message.freeword","合計発注金額が10万円を超える送料更新はできません"));
      }
    }
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  public boolean validateDetail(HttpServletRequest lRequest, boolean isUpdate) {
    SICustomErrors errors = new SICustomErrors();
    
    if (!isUpdate) {//発注修正（納品先選択）ではチェックしない
      SICheckValid.checkValid(errors, "担当支店", this.getBranchCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "担当者", this.getChargeCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      if (ORDERTYPE.equals(this.getCmdtyType())){//受発注商品
        SICheckValid.checkValid(errors, "配送先名称", this.getCustName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        SICheckValid.checkValid(errors, "配送先名称", this.getCustName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
        SICheckValid.checkValid(errors, "配送先サロン名", this.getSalonName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
        
        SICheckValid.checkValid(errors, "郵便番号(上3桁)", this.getPostCode1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, "郵便番号(下4桁)", this.getPostCode2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        if (this.getPostCode1().toString().trim().length() != 3 || this.getPostCode2().toString().trim().length() != 4) {
          errors.addError(new SICustomError("manager.app.postcode.form"));
        }
        SICheckValid.checkValid(errors, "住所1（都道府県）", this.getAddress1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        SICheckValid.checkValid(errors, "住所2(市区町村・番地)", this.getAddress2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        SICheckValid.checkValid(errors, "住所2(市区町村・番地)", this.getAddress2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
        SICheckValid.checkValid(errors, "住所3(ビル名・階など)", this.getAddress3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
        
        SICheckValid.checkValid(errors, "連絡先電話番号", this.getTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, "連絡先FAX番号", this.getFax(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      }
    }
    Iterator itemIte = this.itemColl.iterator();
    while(itemIte.hasNext()) {
      SIHacchuDetail lDetail = (SIHacchuDetail)itemIte.next();
      SICheckValid.checkValid(errors, "仕入単価（"+lDetail.getIndividualCode()+"）", lDetail.getPurchasePrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "輸入諸費用（"+lDetail.getIndividualCode()+"）", lDetail.getImportCost(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "加工総額（"+lDetail.getIndividualCode()+"）", lDetail.getProcessingExpence(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "送料（"+lDetail.getIndividualCode()+"）", lDetail.getDeliveryFee(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "備考（"+lDetail.getIndividualCode()+"）", lDetail.getComment(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
      if (ORDERTYPE.equals(this.getCmdtyType())) {
        SICheckValid.checkValid(errors, "添付（"+lDetail.getIndividualCode()+"）", lDetail.getPurchasePrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      } else {
        String amount = "0";
        boolean errorFlg = false;
        for (int i=0;i<lDetail.getBranchCodeList().length;i++){
          if (SICheckValid.checkValid(errors, "内訳（"+lDetail.getIndividualCode()+lDetail.getBranchNameListItem(i)+"）", lDetail.getBranchAmountListItem(i), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) {
            if (SIUtil.isNotNull(lDetail.getBranchAmountListItem(i))) amount = SIUtil.add(amount, lDetail.getBranchAmountListItem(i));
          } else {
            errorFlg = true;
          }
          SICheckValid.checkValid(errors, "添付（"+lDetail.getIndividualCode()+lDetail.getBranchNameListItem(i)+"）", lDetail.getBranchAmountAddListItem(i), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
          if (SIUtil.isNull(lDetail.getBranchAmountListItem(i))||(SICheckUtil.isDigit(lDetail.getBranchAmountListItem(i))&&Integer.parseInt(lDetail.getBranchAmountListItem(i))==0)) {
            if (SIUtil.isNotNull(lDetail.getBranchAmountAddListItem(i))&&SICheckUtil.isDigit(lDetail.getBranchAmountAddListItem(i))&&Integer.parseInt(lDetail.getBranchAmountAddListItem(i))>0) {
              errors.addError(new SICustomError("manager.message.freeword","内訳のない添付（"+lDetail.getIndividualCode()+lDetail.getBranchNameListItem(i)+"）には入力できません"));
            }
          }
        }
        if (!errorFlg) {
          SICheckValid.checkValid(errors, "発注数（"+lDetail.getIndividualCode()+"）", "内訳の合計（"+lDetail.getIndividualCode()+"）", lDetail.getAmount(), amount, SICheckDataConf.SICHECK_DATA_VALUE_EQUAL_TYPE);
        }
      }
    }
    
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateModify(HttpServletRequest lRequest,Connection lConnection,String hacchuCode,boolean redo){
    SICustomErrors errors = new SICustomErrors();
    try {
    if (!redo&&SIDBUtil.hasData(lConnection, "SELECT * FROM hacchudetailtbl WHERE shippmentdate IS NOT NULL AND hacchucode="+this.getHacchuCode())) {
      errors.addError(new SICustomError("manager.message.freeword","セッションの異常を検出しました。一度画面を閉じて発注修正をやり直してください。"));
    }else if (hacchuCode == null || !this.getHacchuCode().equals(hacchuCode)) {
      errors.addError(new SICustomError("manager.message.freeword","セッションの異常を検出しました。一度画面を閉じて発注修正をやり直してください。"));
    }
    } catch (Exception e) {
      e.printStackTrace();
      errors.addError(new SICustomError("database.execute.error"));
    }
    if (errors.isEmpty()) lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    else lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateReturn(HttpServletRequest lRequest,Connection lConnection){
    SICustomErrors errors = new SICustomErrors();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    StringBuffer lSql1 = new StringBuffer();
    lSql1.append("SELECT d.individualcode,d.cmdtyname,d.amount+d.amountadd AS hacchuamount,d.branchcode");
    lSql1.append(",s.amount,b.branchname ");
    lSql1.append("FROM hacchudetailtbl d,hacchutbl h,storestocktbl s,branchtbl b ");
    lSql1.append("WHERE h.hacchucode=d.hacchucode AND h.layercode=d.layercode AND h.enabledflg=1 AND h.status=1 ");
    lSql1.append("AND s.individualcode=d.individualcode AND s.branchcode=d.branchcode AND b.branchcode=d.branchcode AND b.branchcode<>'0' ");
    lSql1.append("AND d.hacchucode=").append(SIDBUtil.SQL2Str(this.getHacchuCode()));
    
    StringBuffer lSql2 = new StringBuffer();
    lSql2.append("SELECT * ");
    lSql2.append("FROM hacchudetailtbl d,hacchutbl h ");
    lSql2.append("WHERE h.hacchucode=d.hacchucode AND h.layercode=d.layercode AND h.enabledflg=1 ");
    lSql2.append("AND d.shippmentdate>=current_date ");
    lSql2.append("AND d.hacchucode=").append(SIDBUtil.SQL2Str(this.getHacchuCode()));
    
    StringBuffer lSql3 = new StringBuffer();
    lSql3.append("SELECT * ");
    lSql3.append("FROM hacchutbl ");
    lSql3.append("WHERE enabledflg=1 AND status<>1 ");
    lSql3.append("AND hacchucode=").append(SIDBUtil.SQL2Str(this.getHacchuCode()));
    
    String hacchuAmount = "0";
    String stockAmount = "0";
    String errorMessage = "";
    try{
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSql1.toString());
      while(lResultSet.next()) {
        hacchuAmount = lResultSet.getString("hacchuAmount");
        stockAmount = lResultSet.getString("amount");
        if(SICheckUtil.isGreater(hacchuAmount, stockAmount)){
          errorMessage = lResultSet.getString("individualCode")+"："+lResultSet.getString("cmdtyName")+"（"+lResultSet.getString("branchName")+"）の数量が不足しているため返品できません。";
          errors.addError(new SICustomError("manager.message.freeword",errorMessage));
        }
      }
      
      if (SIDBUtil.hasData(lConnection, lSql2.toString())){
        errors.addError(new SICustomError("manager.message.freeword","当日以降の仕入データは返品処理できません"));
      }
      
      if (SIDBUtil.hasData(lConnection, lSql3.toString())) {
        errors.addError(new SICustomError("manager.message.freeword","キャンセル・返品状態の仕入データは返品処理できません"));
      }
      
    }catch (Exception e) {
      errors.addError(new SICustomError("database.execute.error"));
    }finally{
      SIDBUtil.close(lResultSet, lStatement);
    }
    
    if(!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    }else{
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    }
    return errors.isEmpty();
  }
  
  private String getCondtionStockSQL() {
    SITableConditionManager lConditionMan = new SITableConditionManager();
    
    SITableCondition DD = new SITableCondition("", "a.stockcode", this.getStockCodeTxt(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.stockname", this.getStockNameTxt(), SIConfig.SICONDITION_TYPE_LIKE, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.stockpronname", this.getStockPronNameTxt(), SIConfig.SICONDITION_TYPE_LIKE, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.chargecode", this.getChargeCodeTxt(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    return lConditionMan.getCondtionSQL();
  }
  
  private String getCondtionCmdtySQL() {
    SITableConditionManager lConditionMan = new SITableConditionManager();
    
    SITableCondition DD = new SITableCondition("", "a.individualcode", this.getIndividualCodeTxt(), SIConfig.SICONDITION_TYPE_FRONTLIKE, SIConfig.SICONDITION_TYPE_AND);
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.cmdtyname", this.getCmdtyNameTxt(), SIConfig.SICONDITION_TYPE_LIKE, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.individualcode", this.getCtgryCodeTxt(), SIConfig.SICONDITION_TYPE_FRONTLIKE, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.disableflg", this.getDisableFlgTxt(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    DD = new SITableCondition("", "a.frontdispflg", this.getFrontDispFlgTxt(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    lConditionMan.add(DD);
    
    if (SIUtil.isNotNull(this.getUsedNewFlgTxt())) {
      if (this.getUsedNewFlgTxt().equals("9")) {// その他
        DD = new SITableCondition(" AND a.usednewflg IN ('0','3','5','6') ");
      } else {
        DD = new SITableCondition("", "a.usednewflg", this.getUsedNewFlgTxt(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
      }
      lConditionMan.add(DD);
    }
    
    return lConditionMan.getCondtionSQL();
  }
  
  public void updateItemColl(Connection lConnection,int updateType){
    Collection itemColl2 = new ArrayList();
    boolean foundFlg = false;
    
    SIHacchuDetail tempDetail = new SIHacchuDetail();
    tempDetail.setIndividualCode(detail.getIndividualCode());
    tempDetail.setAmount(detail.getAmount());
    
    if (itemColl != null) {
      Iterator itemIte = itemColl.iterator();
      while(itemIte.hasNext()) {
        SIHacchuDetail item = (SIHacchuDetail)itemIte.next();
        if (item.getIndividualCode().equals(tempDetail.getIndividualCode())) {//リストにあれば加算
          if (updateType==INSERTTYPE) {
            item.setAmount(SIUtil.add(item.getAmount(), tempDetail.getAmount()));
          } else {
            item.setAmount(tempDetail.getAmount());
          }
          foundFlg = true;
        }
        if (updateType==DELETETYPE && foundFlg) {//DELETEの場合は登録しない
          foundFlg = false;
        } else if (updateType==MODIFYTYPE && foundFlg && "0".equals(tempDetail.getAmount())) {//0個でMODIFYの場合もDELETEと同じ
          foundFlg = false;
        } else {
          itemColl2.add(item);
        }
      }
    }
    if (updateType==INSERTTYPE && !foundFlg) {//INSERTの場合、リストになければ追加
      tempDetail.resetItem(lConnection);
      itemColl2.add(tempDetail);
    }
    itemColl = itemColl2;
  }
  
  public void setupItemBranch(Connection lConnection, String stockBranch){
    if (itemColl==null||itemColl.size()<1) return;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    try {
      int index = Integer.parseInt(SIDBUtil.getFirstData(lConnection, "SELECT count(*) FROM branchtbl"));
      String[] codeStr = new String[index];
      String[] nameStr = new String[index];
      String[] amountStr = new String[index];
      String[] amountAddStr = new String[index];
      int count = 0;
      int defaultCount = -1;
      
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery("SELECT branchcode,branchname FROM branchtbl ORDER BY branchcode");
      while (lResultSet.next()) {
        amountStr[count] = "";
        amountAddStr[count] = "";
        codeStr[count] = lResultSet.getString("branchcode");
        nameStr[count] = lResultSet.getString("branchname");
        if (codeStr[count].equals(stockBranch)) defaultCount = count;
        count++;
      }
      
      Iterator itemIte = itemColl.iterator();
      while (itemIte.hasNext()) {
        SIHacchuDetail lDetail = (SIHacchuDetail)itemIte.next();
        lDetail.resetItem(lConnection);
        lDetail.setBranchCodeList(codeStr);
        lDetail.setBranchNameList(nameStr);
        lDetail.setBranchAmountList(amountStr);
        if (defaultCount != -1) {
          String[] amountStr2 = new String[index];
          for (int i=0;i<index;i++){
            if (i == defaultCount) amountStr2[i] = lDetail.getAmount();
            else amountStr2[i] = "";
          }
          lDetail.setBranchAmountList(amountStr2);
        } else {
          lDetail.setBranchAmountAddList(amountAddStr);
        }
      }
    } catch(Exception e) {
      e.printStackTrace();
    }finally{
      SIDBUtil.close(lResultSet, lStatement);
    }
  }
  
  public void setupItemBranch2(Connection lConnection){//発注修正用
    if (itemColl==null||itemColl.size()<1) return;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    try {
      int index = Integer.parseInt(SIDBUtil.getFirstData(lConnection, "SELECT count(*) FROM branchtbl"));
      String[] codeStr = new String[index];
      String[] nameStr = new String[index];
      String[] amountStr = new String[index];
      String[] amountAddStr = new String[index];
      int count = 0;
      
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery("SELECT branchcode,branchname FROM branchtbl ORDER BY branchcode");
      while (lResultSet.next()) {
        amountStr[count] = "";
        amountAddStr[count] = "";
        codeStr[count] = lResultSet.getString("branchcode");
        nameStr[count] = lResultSet.getString("branchname");
        count++;
      }
      
      Iterator itemIte = itemColl.iterator();
      while (itemIte.hasNext()) {
        SIHacchuDetail lDetail = (SIHacchuDetail)itemIte.next();
        if (lDetail.getBranchCodeList()!=null && lDetail.getBranchCodeList().length==codeStr.length) continue;
        lDetail.resetItem(lConnection);
        lDetail.setBranchCodeList(codeStr);
        lDetail.setBranchNameList(nameStr);
        lDetail.setBranchAmountList(amountStr);
        lDetail.setBranchAmountAddList(amountAddStr);
      }
    } catch(Exception e) {
      e.printStackTrace();
    }finally{
      SIDBUtil.close(lResultSet, lStatement);
    }
  }
  
  public void setupDetailColl(){
    this.detailColl = new ArrayList();
    Iterator itemIte = itemColl.iterator();
    int cmdtyCount = 0;
    while (itemIte.hasNext()) {
      SIHacchuDetail lDetail = (SIHacchuDetail)itemIte.next();
      String amountAdd = "0";
      cmdtyCount++;
      if (ORDERTYPE.equals(this.getCmdtyType())) {
        SIHacchuDetail temp = new SIHacchuDetail();
        temp.setHacchuIndividualCode(String.valueOf(cmdtyCount));
        temp.setHacchuBranchCode("1");
        temp.setStockCode(this.getStockCode());
        temp.setStockName(this.getStockName());
        temp.setArrivalPlanDate(this.getArrivalPlanDate());
        temp.setArrivalPlanTime(this.getArrivalPlanTime());
        temp.setIndividualCode(lDetail.getIndividualCode());
        temp.setCmdtyName(lDetail.getCmdtyName());
        temp.setColorName(lDetail.getColorName());
        temp.setPurchasePrice(lDetail.getPurchasePrice());
        temp.setImportCost(lDetail.getImportCost());
        temp.setProcessingExpence(lDetail.getProcessingExpence());
        temp.setDeliveryFee(lDetail.getDeliveryFee());
        temp.setComment(lDetail.getComment());
        temp.setBranchCode("0");
        temp.setBranchName("直送");
        lDetail.setBranchCode("0");
        lDetail.setBranchName("直送");
        temp.setAmount(lDetail.getAmount());
        temp.setAmountAdd(lDetail.getAmountAdd());
        this.detailColl.add(temp);
      } else {
        int branchCount = 0;
        for (int i=0;i<lDetail.getBranchCodeList().length;i++) {
          if (SIUtil.isNotNull(lDetail.getBranchAmountListItem(i))&&!lDetail.getBranchAmountListItem(i).equals("0")) {
            branchCount++;
            SIHacchuDetail temp = new SIHacchuDetail();
            temp.setHacchuIndividualCode(String.valueOf(cmdtyCount));
            temp.setHacchuBranchCode(String.valueOf(branchCount));
            temp.setStockCode(this.getStockCode());
            temp.setStockName(this.getStockName());
            temp.setArrivalPlanDate(this.getArrivalPlanDate());
            temp.setArrivalPlanTime(this.getArrivalPlanTime());
            temp.setIndividualCode(lDetail.getIndividualCode());
            temp.setCmdtyName(lDetail.getCmdtyName());
            temp.setColorName(lDetail.getColorName());
            temp.setPurchasePrice(lDetail.getPurchasePrice());
            temp.setImportCost(lDetail.getImportCost());
            temp.setProcessingExpence(lDetail.getProcessingExpence());
            temp.setDeliveryFee(lDetail.getDeliveryFee());
            temp.setComment(lDetail.getComment());
            temp.setBranchCode(lDetail.getBranchCodeListItem(i));
            temp.setBranchName(lDetail.getBranchNameListItem(i));
            temp.setAmount(lDetail.getBranchAmountListItem(i));
            temp.setAmountAdd(lDetail.getBranchAmountAddListItem(i));
            this.detailColl.add(temp);
            if(SIUtil.isNotNull(lDetail.getBranchAmountAddListItem(i))&&SICheckUtil.isDigit(lDetail.getBranchAmountAddListItem(i))){
              amountAdd = SIUtil.add(amountAdd, lDetail.getBranchAmountAddListItem(i));
            }
          }
        }
        lDetail.setAmountAdd(amountAdd);
      }
    }
  }
  
  public Collection getStockCollection(Connection lConnection){
    Collection stockColl = new ArrayList();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer sql = new StringBuffer();
    sql.append("SELECT a.stockcode,a.stockname,a.stockpronname,b.chargename ");
    sql.append("FROM stockmtbl a,chargetbl b ");
    sql.append("WHERE a.chargecode = b.chargecode ");
    sql.append(this.getCondtionStockSQL());
    sql.append("ORDER BY CASE stockcode WHEN '9999' THEN 0 ELSE 1 END,stockpronname");
    
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(sql.toString());
      
      while (lResultSet.next()) {
        SIStock lStock = new SIStock();
        lStock.setStockCode(lResultSet.getString("stockcode"));
        lStock.setStockName(lResultSet.getString("stockname"));
        lStock.setStockPronName(lResultSet.getString("stockpronname"));
        lStock.setChargeName(lResultSet.getString("chargename"));
        stockColl.add(lStock);
      }
      
    } catch(Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return stockColl;
  }
  
  public Collection getCmdtyCollection(Connection lConnection){
    Collection cmdtyColl = new ArrayList();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer listSql = new StringBuffer();
    StringBuffer countSql = new StringBuffer();
    StringBuffer body = new StringBuffer();
    listSql.append("SELECT a.individualcode,a.cmdtyname,b.colorname,c.ctgryname,d.amount,d.amount+d.balesamount AS realamount,a.purchaseprice2,a.frontdispflg ");
    countSql.append("SELECT count(a.individualcode) ");
    body.append("FROM (SELECT * FROM individualtbl id,cmdtymtbl cm WHERE cm.cmdtycode=id.cmdtycode) a,colortbl b,ctgrymtbl c ");
    body.append(",(SELECT individualcode,sum(CASE branchcode WHEN 19 THEN 0 ELSE amount END) AS amount,sum(CASE branchcode WHEN 19 THEN amount ELSE 0 END) AS balesamount ");
    body.append(" FROM storestocktbl GROUP BY individualcode) d ");
    body.append("WHERE a.colorcode = b.colorcode AND substr(a.individualcode,0,3) = c.ctgrycode ");
    body.append("AND a.individualcode=d.individualcode ");
    body.append("AND a.stockcode=").append(SIDBUtil.SQL2Str(this.getStockCode()," "));
    body.append("AND a.amountflg=").append(SIDBUtil.SQL2Str(this.cmdtyType," "));
    body.append(this.getCondtionCmdtySQL());
    
    listSql.append(body);
    countSql.append(body);
    
    listSql.append("ORDER BY a.individualcode");
    
    try {
      String rowCnt = SIDBUtil.getFirstData(lConnection, countSql.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();
      listSql.append(" LIMIT ").append(lPageSize);
      if(lFromInx>0) listSql.append(" OFFSET ").append(lFromInx);
      lResultSet = lStatement.executeQuery(listSql.toString());
      
      for (int jj = 0; jj < lFromInx; jj++) cmdtyColl.add(null);
      int lIndex = 0;
      
      while (lResultSet.next() && lIndex < lPageSize) {
        SICmdty lCmdty = new SICmdty();
        lCmdty.setIndividualCode(lResultSet.getString("individualcode"));
        lCmdty.setCmdtyName(lResultSet.getString("cmdtyname"));
        lCmdty.setColorName(lResultSet.getString("colorname"));
        lCmdty.setCtgryName(lResultSet.getString("ctgryname"));
        lCmdty.setAmount(lResultSet.getString("amount"));
        lCmdty.setRealAmount(lResultSet.getString("realamount"));
        lCmdty.setPurchasePrice(lResultSet.getString("purchaseprice2"));
        lCmdty.setSalesSituationFlg(lResultSet.getString("frontdispflg"));
        cmdtyColl.add(lCmdty);
        lIndex++;
      }
      for (int jj = lFromInx + lPageSize; jj < lRecordCount; jj++) cmdtyColl.add(null);
      
    } catch(Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return cmdtyColl;
  }
  
  public String getUnitPurchase(String individualCode,String hacchuindividualcode){
    String res = "0";
    Iterator itemIte = this.itemColl.iterator();
    try {
      while (itemIte.hasNext()) {
        SIHacchuDetail lItem = (SIHacchuDetail)itemIte.next();
        if (lItem.getIndividualCode().equals(individualCode) && lItem.getHacchuIndividualCode().equals(hacchuindividualcode)) {
          if (lItem.getAmountAddZero().equals("0")) {
            res = SIUtil.div(lItem.getImportCost(), lItem.getAmount());
            res = SIUtil.add(res, lItem.getPurchasePrice());
          } else {
            res = SIUtil.add(lItem.getImportCost(), SIUtil.multi(lItem.getPurchasePrice(), lItem.getAmount()));
            res = SIUtil.div(res, SIUtil.add(lItem.getAmount(), lItem.getAmountAddZero()));
          }
          break;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return res;
  }
  
  public String getUnitProcessing(String individualCode,String hacchuindividualcode){
    String res = "0";
    Iterator itemIte = this.itemColl.iterator();
    try {
      while (itemIte.hasNext()) {
        SIHacchuDetail lItem = (SIHacchuDetail)itemIte.next();
        if (lItem.getIndividualCode().equals(individualCode) && lItem.getHacchuIndividualCode().equals(hacchuindividualcode)) {
          res = SIUtil.div(lItem.getProcessingExpence(), SIUtil.add(lItem.getAmount(), lItem.getAmountAddZero()));
          break;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return res;
  }
  
  public String getTotalPurchase(String individualCode,String hacchuindividualcode){
    String res = "0";
    Iterator itemIte = this.itemColl.iterator();
    try {
      while (itemIte.hasNext()) {
        SIHacchuDetail lItem = (SIHacchuDetail)itemIte.next();
        if (lItem.getIndividualCode().equals(individualCode) && lItem.getHacchuIndividualCode().equals(hacchuindividualcode)) {
          res = SIUtil.multi(lItem.getPurchasePrice(), lItem.getAmount());
          res = SIUtil.add(res, lItem.getImportCost());
          break;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return res;
  }
  
  public void reset(Connection lConnection){
    if(SIUtil.isNull(this.getHacchuCode())) return;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    boolean firstFlg = true;
    
    StringBuffer sql1 = new StringBuffer();
    sql1.append("SELECT a.*,b.individualcode,b.cmdtyname,d.bgprice ");
    sql1.append(",b.colorname,b.purchaseprice,b.processingexpence,b.deliveryfee,b.importcost,b.comment ");
    sql1.append(",b.shippmentdate,c.totalamount,c.totalamountadd,c.hacchuindividualcode ");
    sql1.append("FROM hacchutbl a,hacchudetailtbl b ");
    sql1.append("LEFT OUTER JOIN individualtbl d ON b.individualcode=d.individualcode ");
    sql1.append(",(SELECT hacchucode,hacchuindividualcode,layercode,sum(amount) AS totalamount,sum(amountadd) AS totalamountadd ");
    sql1.append("FROM hacchudetailtbl WHERE shipflg='0' GROUP BY hacchucode,hacchuindividualcode,layercode) c ");
    sql1.append("WHERE a.hacchucode=b.hacchucode AND b.shipflg='0' AND b.hacchubranchcode='1' AND a.layercode=b.layercode AND a.enabledflg='1' ");
    sql1.append("AND b.hacchucode=c.hacchucode AND b.hacchuindividualcode=c.hacchuindividualcode AND b.layercode=c.layercode ");
    sql1.append("AND b.hacchucode=").append(SIDBUtil.SQL2Str(this.getHacchuCode()," "));
    sql1.append("ORDER BY b.hacchuindividualcode,b.hacchubranchcode");
    
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(sql1.toString());
      
      while(lResultSet.next()){
        if (firstFlg) {
          this.setOrderCode(lResultSet.getString("orderCode"));
          this.setOrderFlg(lResultSet.getString("orderFlg"));
          this.setStockCode(lResultSet.getString("stockCode"));
          this.setStockName(lResultSet.getString("stockName"));
          this.setBranchCode(lResultSet.getString("branchCode"));
          this.setChargeCode(lResultSet.getString("chargeCode"));
          this.setBranchCodeDB(lResultSet.getString("branchCode"));
          this.setChargeCodeDB(lResultSet.getString("chargeCode"));
          this.setArrivalPlanDate(lResultSet.getString("arrivalPlanDate"));
          this.setArrivalPlanTime(lResultSet.getString("arrivalPlanTime"));
          this.setCmdtyType(SIUtil.sub("1", lResultSet.getString("orderFlg")));
          this.setDirectFlg(lResultSet.getString("directFlg"));
          this.setCustName(lResultSet.getString("custName"));
          this.setSalonName(lResultSet.getString("salonName"));
          this.setPostCode1(lResultSet.getString("postCode1"));
          this.setPostCode2(lResultSet.getString("postCode2"));
          this.setAddress1(lResultSet.getString("address1"));
          this.setAddress2(lResultSet.getString("address2"));
          this.setAddress3(lResultSet.getString("address3"));
          this.setTel(lResultSet.getString("tel"));
          this.setFax(lResultSet.getString("fax"));
          this.setHacchuMailFlg(lResultSet.getString("hacchuMailFlg"));
          this.setHacchuUpdateDateTime(SIDBUtil.getDate(lResultSet.getTimestamp("hacchuUpdateDateTime")));
          this.setStoreMailDateTime(SIDBUtil.getDate(lResultSet.getTimestamp("storeMailDateTime")));
          this.setInitDateTime(lResultSet.getString("initDateTime"));
          this.setUpdateDateTime(lResultSet.getString("updateDateTime"));
          this.setStatus(lResultSet.getString("status"));
          this.setLayerCode(lResultSet.getString("layerCode"));
          this.setTaxRate(lResultSet.getString("taxRate"));
        }
        SIHacchuDetail lDetail = new SIHacchuDetail();
        lDetail.setHacchuCode(lResultSet.getString("hacchuCode"));
        lDetail.setHacchuIndividualCode(lResultSet.getString("hacchuIndividualCode"));
        lDetail.setIndividualCode(lResultSet.getString("individualCode"));
        lDetail.setCmdtyName(lResultSet.getString("cmdtyName"));
        lDetail.setColorName(lResultSet.getString("colorName"));
        lDetail.setBgprice(lResultSet.getString("bgprice"));
        lDetail.setPurchasePrice(lResultSet.getString("purchasePrice"));
        lDetail.setImportCost(lResultSet.getString("importCost"));
        lDetail.setProcessingExpence(lResultSet.getString("processingExpence"));
        lDetail.setDeliveryFee(lResultSet.getString("deliveryFee"));
        lDetail.setComment(lResultSet.getString("comment"));
        lDetail.setAmount(lResultSet.getString("totalamount"));
        lDetail.setAmountAdd(lResultSet.getString("totalamountadd"));
        if (ORDERTYPE.equals(this.getCmdtyType())) lDetail.setBranchName("直送");
        lDetail.resetModify(lConnection,this.getCmdtyType());
        this.itemColl.add(lDetail);
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
  }
  
  public void resetHacchuDetail(Connection lConnection){
    if(SIUtil.isNull(this.detail.getHacchuCode())) return;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    StringBuffer sql1 = new StringBuffer();
    sql1.append("SELECT a.*,b.* ");
    sql1.append("FROM hacchutbl a,hacchudetailtbl b ");
    sql1.append("WHERE a.hacchucode=b.hacchucode AND b.shipflg=0 AND a.layercode=b.layercode AND a.enabledflg='1' ");
    sql1.append("AND b.hacchucode=").append(SIDBUtil.SQL2Str(this.detail.getHacchuCode()," "));
    sql1.append("AND b.hacchuindividualcode=").append(SIDBUtil.SQL2Str(this.detail.getHacchuIndividualCode()," "));
    sql1.append("AND b.hacchubranchcode=").append(SIDBUtil.SQL2Str(this.detail.getHacchuBranchCode()," "));
    
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(sql1.toString());
      
      if (lResultSet.next()) {
        this.setOrderCode(lResultSet.getString("orderCode"));
        this.setStockCode(lResultSet.getString("stockCode"));
        this.setStockName(lResultSet.getString("stockName"));
        this.setBranchCode(lResultSet.getString("branchCode"));
        this.setChargeCode(lResultSet.getString("chargeCode"));
        this.setBranchCodeDB(lResultSet.getString("branchCode"));
        this.setChargeCodeDB(lResultSet.getString("chargeCode"));
        this.setArrivalPlanDate(lResultSet.getString("arrivalPlanDate"));
        this.setArrivalPlanTime(lResultSet.getString("arrivalPlanTime"));
        this.setCmdtyType(SIUtil.sub("1", lResultSet.getString("orderFlg")));
        this.setDirectFlg(lResultSet.getString("directFlg"));
        this.setCustName(lResultSet.getString("custName"));
        this.setSalonName(lResultSet.getString("salonName"));
        this.setPostCode1(lResultSet.getString("postCode1"));
        this.setPostCode2(lResultSet.getString("postCode2"));
        this.setAddress1(lResultSet.getString("address1"));
        this.setAddress2(lResultSet.getString("address2"));
        this.setAddress3(lResultSet.getString("address3"));
        this.setTel(lResultSet.getString("tel"));
        this.setFax(lResultSet.getString("fax"));
        
        this.detail.setHacchuCode(lResultSet.getString("hacchuCode"));
        this.detail.setHacchuIndividualCode(lResultSet.getString("hacchuIndividualCode"));
        this.detail.setHacchuBranchCode(lResultSet.getString("hacchuBranchCode"));
        this.detail.setIndividualCode(lResultSet.getString("individualCode"));
        this.detail.setCmdtyName(lResultSet.getString("cmdtyName"));
        this.detail.setColorName(lResultSet.getString("colorName"));
        this.detail.setPurchasePrice(lResultSet.getString("purchasePrice"));
        this.detail.setImportCost(lResultSet.getString("importCost"));
        this.detail.setProcessingExpence(lResultSet.getString("processingExpence"));
        this.detail.setDeliveryFee(lResultSet.getString("deliveryFee"));
        this.detail.setBranchName(lResultSet.getString("branchName"));
        this.detail.setAmount(lResultSet.getString("amount"));
        this.detail.setAmountAdd(lResultSet.getString("amountadd"));
        if (ORDERTYPE.equals(this.getCmdtyType())) this.detail.setBranchName("直送");
        this.detail.resetModify(lConnection,this.getCmdtyType());
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
  }
  
  public boolean isRedo(Connection lConnection) {
    if (SIUtil.isNull(this.getHacchuCode())) return false;
    if (!"1".equals(this.getStatus())) return false;
    boolean res = false;
    StringBuffer lSqlStr = new StringBuffer();
    lSqlStr.append("SELECT list1.hacchucode FROM ");
    lSqlStr.append("(SELECT h.hacchucode,min(d.shippmentdate) AS shippmentdate FROM hacchudetailtbl d,hacchutbl h WHERE ");
    lSqlStr.append("d.hacchucode=h.hacchucode AND d.layercode=h.layercode AND h.enabledflg=1 AND d.shippmentdate IS NOT NULL GROUP BY h.hacchucode) list1,");
    lSqlStr.append("(SELECT (substring(max(season),0,5)||'-'||substring(max(season),5,2)||'-01')::date + '1 months'::interval AS inventorydate FROM inventorytbl) list2 ");
    lSqlStr.append("WHERE list1.shippmentdate >= list2.inventorydate ");
    lSqlStr.append("AND list1.hacchucode=").append(SIDBUtil.SQL2Str(this.getHacchuCode()));
    try {
      res = SIDBUtil.hasData(lConnection, lSqlStr.toString());
    }catch (Exception e){
      e.printStackTrace();
      res = false;
    }
    return res;
  }
  
  public String getAmount() {
    return amount;
  }
  
  public void setAmount(String amount) {
    if (SIUtil.isNull(amount)) amount = "0";
    this.amount = amount;
  }
}