package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SICmdtyComposition;
import jp.co.sint.basic.SIEstimate;
import jp.co.sint.basic.SIEstimateDelivery;
import jp.co.sint.basic.SIKeepDetail;
import jp.co.sint.basic.SILogin;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SIModifyRec;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIFatalException;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id: SIEstimateDetail.java,v 1.0 Exp $
 * @author Tsuyoshi Yagi <br>
 * Description: 見積Bean
 * <p>
 * History
 * </p>
 * <p>
 * Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason
 * </p>
 * ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * Tsuyoshi Yagi 2005/12/08 Original
 */
public class UIRegUpdateEstimate extends SIBasic {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // 見積番号
  private String estimateNum = "";
  
  // 見積ヘッダ情報
  private SIEstimate estimate = new SIEstimate();
  
  // 見積配送先情報
  private SIEstimateDelivery estimateDelivery = new SIEstimateDelivery();
  
  // 見積明細格納用ハッシュマップ
  private LinkedHashMap hash = new LinkedHashMap();
  
  // 見積ヘッダ情報
  private String backURL = "";
  
  // 個別商品カウント
  private String cmdtyCnt1 = "";
  
  // 小物商品カウント
  private String cmdtyCnt2 = "";
  
  // 個別所品送料
  private String deliveryFee1 = "";
  
  // 小物商品送料
  private String deliveryFee2 = "";
  
  // 受注番号
  private String orderCode = "";
  
  // 送料合計
  private String totalDeliveryFee = "0";
  
  private String[] variableCodes;
  
  private String[] variablePrice;
  
  private String[] variablePurchase;
  
  /**
   * @return totalDeliveryFee を戻します。
   */
  public String getTotalDeliveryFee() {
    if (SIUtil.isNull(totalDeliveryFee)) return "0";
    return totalDeliveryFee;
  }
  
  /**
   * @param totalDeliveryFee totalDeliveryFee を設定。
   */
  public void setTotalDeliveryFee(String totalDeliveryFee) {
    this.totalDeliveryFee = totalDeliveryFee;
  }
  
  /*
   * getter of estimate.
   */
  public SIEstimate getEstimate() {
    return estimate;
  }
  
  /*
   * getter of estimateDelivery.
   */
  public SIEstimateDelivery getEstimateDelivery() {
    return estimateDelivery;
  }
  
  /*
   * getter of hash.
   */
  public LinkedHashMap getHash() {
    return hash;
  }
  
  /*
   * getter of backURL.
   */
  public String getBackURL() {
    return backURL;
  }
  
  /*
   * setter of backURL
   */
  public void setBackURL(String backURL) {
    this.backURL = backURL;
  }
  
  /*
   * getter of cmndtyCnt1.
   */
  public String getCmdtyCnt1() {
    return cmdtyCnt1;
  }
  
  /*
   * setter of cmndtyCnt1
   */
  public void setCmdtyCnt1(String cmndtyCnt1) {
    this.cmdtyCnt1 = cmndtyCnt1;
  }
  
  /*
   * getter of cmndtyCnt2.
   */
  public String getCmdtyCnt2() {
    return cmdtyCnt2;
  }
  
  /*
   * setter of cmndtyCnt2
   */
  public void setCmdtyCnt2(String cmndtyCnt2) {
    this.cmdtyCnt2 = cmndtyCnt2;
  }
  
  /*
   * getter of deliveryFee1.
   */
  public String getDeliveryFee1() {
    return deliveryFee1;
  }
  
  /*
   * setter of deliveryFee1
   */
  public void setDeliveryFee1(String deliveryFee1) {
    this.deliveryFee1 = deliveryFee1;
  }
  
  /*
   * getter of deliveryFee2.
   */
  public String getDeliveryFee2() {
    return deliveryFee2;
  }
  
  /*
   * setter of deliveryFee2
   */
  public void setDeliveryFee2(String deliveryFee2) {
    this.deliveryFee2 = deliveryFee2;
  }
  
  /*
   * setter of estimate
   */
  public void setEstimate(SIEstimate estimate) {
    this.estimate = estimate;
  }
  
  /*
   * setter of estimateDelivery
   */
  public void setEstimateDelivery(SIEstimateDelivery estimateDelivery) {
    this.estimateDelivery = estimateDelivery;
  }
  
  /*
   * getter of estimateNum.
   */
  public String getEstimateNum() {
    return estimateNum;
  }
  
  /*
   * setter of estimateNum
   */
  public void setEstimateNum(String estimateNum) {
    this.estimateNum = estimateNum;
  }
  
  /*
   * setter of hash
   */
  public void setHash(LinkedHashMap hash) {
    this.hash = hash;
  }
  
  /*
   * getter of orderCode.
   */
  public String getOrderCode() {
    return orderCode;
  }

  /*
   * setter of orderCode
   */
  public void setOrderCode(String orderCode) {
    this.orderCode = orderCode;
  }
  
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam, Connection conn) throws SIDBAccessException {
    super.init(lRequest, lUrlParam);
    
    backURL = (String) lUrlParam.getParam("backURLTxt");
    cmdtyCnt1 = (String) lUrlParam.getParam("cmdtyCnt1");
    cmdtyCnt2 = (String) lUrlParam.getParam("cmdtyCnt2");
    deliveryFee1 = (String) lUrlParam.getParam("deliveryFee1");
    deliveryFee2 = (String) lUrlParam.getParam("deliveryFee2");
    estimate.setEstimataCode((String) lUrlParam.getParam("estimateCodeTxt"));
    estimate.setKeepNumber((String) lUrlParam.getParam("keepNumberTxt"));
    estimate.setCustCode((String) lUrlParam.getParam("custCode"));
    estimate.setCustName((String) lUrlParam.getParam("custName"));
    estimate.setCustPronName((String) lUrlParam.getParam("custPronName"));
    estimate.setBusinessForm((String) lUrlParam.getParam("job"));
    estimate.setStoreTel((String) lUrlParam.getParam("storeTel"));
    estimate.setTel((String) lUrlParam.getParam("tel"));
    estimate.setFax((String) lUrlParam.getParam("fax"));
    estimate.setEmail((String) lUrlParam.getParam("email"));
    estimate.setFee((String) lUrlParam.getParam("fee"));
    estimate.setPostCode1((String) lUrlParam.getParam("postCode1"));
    estimate.setPostCode2((String) lUrlParam.getParam("postCode2"));
    estimate.setEstimateAddrressee((String) lUrlParam.getParam("addressee"));
    estimate.setCompanyName((String) lUrlParam.getParam("companyName"));
    estimate.setAddress1((String) lUrlParam.getParam("address1"));
    estimate.setAddress2((String) lUrlParam.getParam("address2"));
    estimate.setAddress3((String) lUrlParam.getParam("address3"));
    estimate.setOrderRoute((String) lUrlParam.getParam("orderRouteFlg"));
    estimate.setPayMethodName((String) lUrlParam.getParam("payMethodName"));
    estimate.setContactMsg((String) lUrlParam.getParam("contactMsg"));
    estimate.setBrarnchCode((String) lUrlParam.getParam("belongBranchCodeTxt"));
    estimate.setChargeCode((String) lUrlParam.getParam("chargeCodeTxt"));
    estimate.setSumOfDiscount((String) lUrlParam.getParam("sumOfDiscount"));
    estimate.setStatus((String) lUrlParam.getParam("status"));
    estimate.setInitDateTime((String) lUrlParam.getParam("initDateTime"));
    estimate.setSumOfA((String) lUrlParam.getParam("sumOfA"));
    estimate.setSumOfB((String) lUrlParam.getParam("sumOfB"));
    estimate.setSumOfC((String) lUrlParam.getParam("sumOfC"));
    estimate.setSumOfE((String) lUrlParam.getParam("sumOfE"));
    estimate.setSumOfF((String) lUrlParam.getParam("sumOfF"));
    estimate.setSumByPoint((String) lUrlParam.getParam("sumByPoint"));
    estimate.setMaxPoint((String) lUrlParam.getParam("maxPoint"));
    estimate.setDiscountDeliveryFee((String) lUrlParam.getParam("discountDeliveryFee"));
    estimate.setDiscountFee((String) lUrlParam.getParam("discountFee"));
    estimate.setMemberLevelCode((String) lUrlParam.getParam("memberLevelCode"));
    estimate.setSumOfSetDiscount((String) lUrlParam.getParam("sumOfSetDiscount")); // EDBTG003-00 elecs-tani add
    
    estimateDelivery.setPostCode1((String) lUrlParam.getParam("deliveryPostCode1"));
    estimateDelivery.setPostCode2((String) lUrlParam.getParam("deliveryPostCode2"));
    estimateDelivery.setCompanyName((String) lUrlParam.getParam("deliveryCompanyName"));
    estimateDelivery.setDeliveryAddressee((String) lUrlParam.getParam("deliveryAddressee"));
    estimateDelivery.setAddress1((String) lUrlParam.getParam("deliveryAddress1"));
    estimateDelivery.setAddress2((String) lUrlParam.getParam("deliveryAddress2"));
    estimateDelivery.setAddress3((String) lUrlParam.getParam("deliveryAddress3"));
    estimateDelivery.setTel((String) lUrlParam.getParam("deliveryTel"));
    estimateDelivery.setAddressCode((String) lUrlParam.getParam("addressCode"));
    
    variableCodes = lRequest.getParameterValues("variableCode");
    if(variableCodes!=null && variableCodes.length>0){
      variablePrice = new String[variableCodes.length];
      variablePurchase = new String[variableCodes.length];
      for(int i=0;i<variableCodes.length;i++){
        variablePrice[i] = (String) lUrlParam.getParam("variablePrice_"+variableCodes[i]);
        variablePurchase[i] = (String) lUrlParam.getParam("variablePurchase_"+variableCodes[i]);
      }
    }
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    sqlStatement.append("SELECT cmdtycode,individualcode,cmdtytype,cmdtytype,price,cost,deliverytype,size,sum(amount) AS amount ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" , setcode, setdetailcode, setdetailflg ");
    // EDBTG003-00 mng-paku add end
    sqlStatement.append("FROM keepdetailtbl ");
    sqlStatement.append("WHERE keepnumber=").append(SIDBUtil.SQL2Str(estimate.getKeepNumber()," "));
    sqlStatement.append("GROUP BY cmdtycode,individualcode,cmdtytype,price,cost,deliverytype,size ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" , setcode, setdetailcode, setdetailflg ");
    // EDBTG003-00 mng-paku add end
    sqlStatement.append("ORDER BY cmdtycode,individualcode");
    
    this.setTotalDeliveryFee((String) lUrlParam.getParam("totalDeliveryFee"));// 調整額のため、マイナスチェック
    
    // 実行
    try {
      statement = conn.createStatement();
      log.debug("SQL=" + sqlStatement.toString());
      resultSet = statement.executeQuery(sqlStatement.toString());
      
      // 商品レコードのセットの作成
      while (resultSet.next()) {
        
        // EDBTG003-00 nagayoshi mod start
//        String deliveryFee = (String) lUrlParam.getParam("deliveryFee_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"));
//        hash.put("deliveryFee_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), deliveryFee);
        String suffix = "_" + resultSet.getString("setcode") + "_" + resultSet.getString("setdetailcode");
        if (SIUtil.isNull(resultSet.getString("setdetailflg")) || SIConfig.SET_DETAIL_FLG_NORMAL.equals(resultSet.getString("setdetailflg"))) {
          suffix = "__";
        }
        String deliveryFee = (String) lUrlParam.getParam("deliveryFee_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode") + suffix);
        hash.put("deliveryFee_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode") + suffix, deliveryFee);
        // EDBTG003-00 nagayoshi mod end
        // EDBTG003-00 ohsugi mod start
//        String deliveryDate = (String) lUrlParam.getParam("deliveryDate_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"));
//        hash.put("deliveryDate_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), deliveryDate);
        String keyDeliveryDate = "deliveryDate_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode") + suffix;
        String deliveryDate = (String) lUrlParam.getParam(keyDeliveryDate);
        hash.put(keyDeliveryDate, deliveryDate);
//        String deliveryTime = (String) lUrlParam.getParam("deliveryTime_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"));
//        hash.put("deliveryTime_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), deliveryTime);
        String keyDeliveryTime = "deliveryTime_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode") + suffix;
        String deliveryTime = (String) lUrlParam.getParam(keyDeliveryTime);
        hash.put(keyDeliveryTime, deliveryTime);
        // EDBTG003-00 ohsugi mod end
        if("1".equals(resultSet.getString("deliveryType"))){
          if("1".equals(lRequest.getParameter("deliveryDate_flg"))){
            // EDBTG003-00 ohsugi mod start
//            hash.put("deliveryDate_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), lRequest.getParameter("deliveryDate_komono"));
            hash.put(keyDeliveryDate, lRequest.getParameter("deliveryDate_komono"));
            // EDBTG003-00 ohsugi mod end
          }
          if("1".equals(lRequest.getParameter("deliveryTime_flg"))){
            // EDBTG003-00 ohsugi mod start
//            hash.put("deliveryTime_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), lRequest.getParameter("deliveryTime_komono"));
            hash.put(keyDeliveryTime, lRequest.getParameter("deliveryTime_komono"));
            // EDBTG003-00 ohsugi mod end
          }
        }else if("0".equals(resultSet.getString("deliveryType"))){
          if("0".equals(lRequest.getParameter("deliveryDate_flg"))){
            // EDBTG003-00 ohsugi mod start
//            hash.put("deliveryDate_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), lRequest.getParameter("deliveryDate_kobetsu"));
            hash.put(keyDeliveryDate, lRequest.getParameter("deliveryDate_kobetsu"));
            // EDBTG003-00 ohsugi mod end
          }
          if("0".equals(lRequest.getParameter("deliveryTime_flg"))){
            // EDBTG003-00 ohsugi mod start
//            hash.put("deliveryTime_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), lRequest.getParameter("deliveryTime_kobetsu"));
            hash.put(keyDeliveryTime, lRequest.getParameter("deliveryTime_kobetsu"));
            // EDBTG003-00 ohsugi mod end
          }
        }
      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(statement, resultSet);
    }
    
    StringBuffer sqlStatement2 = new StringBuffer();
    String paymentFlg = "";
    sqlStatement2.append("SELECT paymentflg FROM paymethodmtbl ");
    sqlStatement2.append("WHERE paymethodname=").append(SIDBUtil.SQL2Str(estimate.getPayMethodName()));
    
    // 実行
    try {
      paymentFlg = SIDBUtil.getFirstData(conn, sqlStatement2.toString());
      estimate.setPaymentFlg(paymentFlg);
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement2.toString());
      throw new SIDBAccessException(ex);
    }
    
  }

  public void initFree(HttpServletRequest lRequest, SIURLParameter lUrlParam, Connection conn) throws SIDBAccessException {
    initFree(lRequest, lUrlParam, conn, null);
  }
  public void initFree(HttpServletRequest lRequest, SIURLParameter lUrlParam, Connection conn, Collection keepColl) throws SIDBAccessException {
    super.init(lRequest, lUrlParam);
    
    backURL = (String) lUrlParam.getParam("backURLTxt");
    cmdtyCnt1 = (String) lUrlParam.getParam("cmdtyCnt1");
    cmdtyCnt2 = (String) lUrlParam.getParam("cmdtyCnt2");
    deliveryFee1 = (String) lUrlParam.getParam("deliveryFee1");
    deliveryFee2 = (String) lUrlParam.getParam("deliveryFee2");
    estimate.setEstimataCode((String) lUrlParam.getParam("estimateCodeTxt"));
    estimate.setKeepNumber((String) lUrlParam.getParam("keepNumberTxt"));
    estimate.setCustCode((String) lUrlParam.getParam("custCode"));
    estimate.setCustName((String) lUrlParam.getParam("custName"));
    estimate.setCustPronName((String) lUrlParam.getParam("custPronName"));
    estimate.setBusinessForm((String) lUrlParam.getParam("job"));
    estimate.setStoreTel((String) lUrlParam.getParam("storeTel"));
    estimate.setTel((String) lUrlParam.getParam("tel"));
    estimate.setFax((String) lUrlParam.getParam("fax"));
    estimate.setEmail((String) lUrlParam.getParam("email"));
    estimate.setFee((String) lUrlParam.getParam("fee"));
    estimate.setPostCode1((String) lUrlParam.getParam("postCode1"));
    estimate.setPostCode2((String) lUrlParam.getParam("postCode2"));
    estimate.setEstimateAddrressee((String) lUrlParam.getParam("addressee"));
    estimate.setCompanyName((String) lUrlParam.getParam("companyName"));
    estimate.setAddress1((String) lUrlParam.getParam("address1"));
    estimate.setAddress2((String) lUrlParam.getParam("address2"));
    estimate.setAddress3((String) lUrlParam.getParam("address3"));
    estimate.setOrderRoute((String) lUrlParam.getParam("orderRouteFlg"));
    estimate.setPayMethodName((String) lUrlParam.getParam("payMethodName"));
    estimate.setContactMsg((String) lUrlParam.getParam("contactMsg"));
    estimate.setBrarnchCode((String) lUrlParam.getParam("belongBranchCodeTxt"));
    estimate.setChargeCode((String) lUrlParam.getParam("chargeCodeTxt"));
    estimate.setSumOfDiscount((String) lUrlParam.getParam("sumOfDiscount"));
    estimate.setStatus((String) lUrlParam.getParam("status"));
    estimate.setInitDateTime((String) lUrlParam.getParam("initDateTime"));
    estimate.setSumOfA((String) lUrlParam.getParam("sumOfA"));
    estimate.setSumOfB((String) lUrlParam.getParam("sumOfB"));
    estimate.setSumOfC((String) lUrlParam.getParam("sumOfC"));
    estimate.setSumOfE((String) lUrlParam.getParam("sumOfE"));
    estimate.setSumOfF((String) lUrlParam.getParam("sumOfF"));
    estimate.setSumByPoint((String) lUrlParam.getParam("sumByPoint"));
    estimate.setMaxPoint((String) lUrlParam.getParam("maxPoint"));
    estimate.setDiscountDeliveryFee((String) lUrlParam.getParam("discountDeliveryFee"));
    estimate.setDiscountFee((String) lUrlParam.getParam("discountFee"));
    estimate.setMemberLevelCode((String) lUrlParam.getParam("memberLevelCode"));
    estimate.setSumOfSetDiscount((String) lUrlParam.getParam("sumOfSetDiscount")); // EDBTG003-00 elecs-tani add
    
    estimateDelivery.setPostCode1((String) lUrlParam.getParam("deliveryPostCode1"));
    estimateDelivery.setPostCode2((String) lUrlParam.getParam("deliveryPostCode2"));
    estimateDelivery.setCompanyName((String) lUrlParam.getParam("deliveryCompanyName"));
    estimateDelivery.setDeliveryAddressee((String) lUrlParam.getParam("deliveryAddressee"));
    estimateDelivery.setAddress1((String) lUrlParam.getParam("deliveryAddress1"));
    estimateDelivery.setAddress2((String) lUrlParam.getParam("deliveryAddress2"));
    estimateDelivery.setAddress3((String) lUrlParam.getParam("deliveryAddress3"));
    estimateDelivery.setTel((String) lUrlParam.getParam("deliveryTel"));
    estimateDelivery.setAddressCode((String) lUrlParam.getParam("addressCode"));
    
    variableCodes = lRequest.getParameterValues("variableCode");
    if(variableCodes!=null && variableCodes.length>0){
      variablePrice = new String[variableCodes.length];
      for(int i=0;i<variableCodes.length;i++){
        variablePrice[i] = (String) lUrlParam.getParam("variablePrice_"+variableCodes[i]);
      }
    }
    
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    // EDBTG003-00 mng-paku mod start
//    sqlStatement.append("SELECT cmdtycode,individualcode FROM freeestimatedetailtbl ");
    sqlStatement.append("SELECT cmdtycode, individualcode, detailcode, setdetailflg, setcode, setdetailcode, setdetailflg FROM freeestimatedetailtbl ");
    // EDBTG003-00 mng-paku mod end
    sqlStatement.append("WHERE estimatecode=").append(SIDBUtil.SQL2Str(estimate.getEstimataCode()," "));
    sqlStatement.append("ORDER BY cmdtycode,individualcode ");
    
    this.setTotalDeliveryFee((String) lUrlParam.getParam("totalDeliveryFee"));// 調整額のため、マイナスチェック
    
    // 実行
    try {
      if (keepColl == null || keepColl.size() == 0) {
        statement = conn.createStatement();
        log.debug("SQL=" + sqlStatement.toString());
        resultSet = statement.executeQuery(sqlStatement.toString());
        // 商品レコードのセットの作成
        while (resultSet.next()) {
          // EDBTG003-00 nagayoshi mod start
//          String deliveryFee = (String) lUrlParam.getParam("deliveryFee_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"));
//          hash.put("deliveryFee_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), deliveryFee);
          String suffix = "_" + resultSet.getString("setcode") + "_" + resultSet.getString("setdetailcode");
          if (SIUtil.isNull(resultSet.getString("setdetailflg")) || SIConfig.SET_DETAIL_FLG_NORMAL.equals(resultSet.getString("setdetailflg"))) {
            suffix = "__";
          }
          String deliveryFee = (String) lUrlParam.getParam("deliveryFee_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode") + suffix);
          hash.put("deliveryFee_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode") + suffix, deliveryFee);
          // EDBTG003-00 nagayoshi mod end
          // EDBTG003-00 mng-paku mod start
//          String deliveryDate = (String) lUrlParam.getParam("deliveryDate_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"));
//          hash.put("deliveryDate_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode"), deliveryDate);
          String keyDeliveryDate = "deliveryDate_" + resultSet.getString("cmdtycode") + "_" + resultSet.getString("individualCode") + suffix;
          String deliveryDate = (String) lUrlParam.getParam(keyDeliveryDate);
          hash.put(keyDeliveryDate, deliveryDate);
          // EDBTG003-00 mng-paku mod end
        }
      }else{
        // EDBTG003-00 mng-paku mod start
//        Iterator ite = keepColl.iterator();
//        while (ite.hasNext()) {
//          SIKeepDetail detail = (SIKeepDetail)ite.next();
//          String deliveryFee = (String) lUrlParam.getParam("deliveryFee_" + detail.getCmdtyCode() + "_" + detail.getIndividualCode());
//          hash.put("deliveryFee_" + detail.getCmdtyCode() + "_" + detail.getIndividualCode(), deliveryFee);
//          String deliveryDate = (String) lUrlParam.getParam("deliveryDate_" + detail.getCmdtyCode() + "_" + detail.getIndividualCode());
//          hash.put("deliveryDate_" + detail.getCmdtyCode() + "_" + detail.getIndividualCode(), deliveryDate);
//        }
        this.initDelivery(lRequest, lUrlParam, conn, keepColl);
        // EDBTG003-00 mng-paku mod end
      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(statement, resultSet);
    }
    
    StringBuffer sqlStatement2 = new StringBuffer();
    String paymentFlg = "";
    sqlStatement2.append("SELECT paymentflg FROM paymethodmtbl ");
    sqlStatement2.append("WHERE paymethodname=").append(SIDBUtil.SQL2Str(estimate.getPayMethodName()));
    
    // 実行
    try {
      paymentFlg = SIDBUtil.getFirstData(conn, sqlStatement2.toString());
      estimate.setPaymentFlg(paymentFlg);
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement2.toString());
      throw new SIDBAccessException(ex);
    }
    
  }
  // EDBTG003-00 mng-paku add start
  /**
   * deliveryDate, deliveryFeeを設定
   * @param lRequest
   * @param lUrlParam
   * @param conn
   * @param keepColl
   * @throws SIDBAccessException
   */
  public void initDelivery(HttpServletRequest lRequest, SIURLParameter lUrlParam, Connection conn, Collection keepColl) throws SIDBAccessException {
    if (keepColl != null && keepColl.size() != 0) {
      Iterator ite = keepColl.iterator();
      while (ite.hasNext()) {
        SIKeepDetail detail = (SIKeepDetail) ite.next();
        String deliveryFee = (String) lUrlParam.getParam("deliveryFee_" + detail.getCmdtyCode() + "_" + detail.getIndividualCode() + "_" + detail.getSetCode() + "_" + detail.getSetDetailCode());
        hash.put("deliveryFee_" + detail.getCmdtyCode() + "_" + detail.getIndividualCode() + "_" + detail.getSetCode() + "_" + detail.getSetDetailCode(), deliveryFee);
        String keyDeliveryDate = "deliveryDate_" + detail.getCmdtyCode() + "_" + detail.getIndividualCode() + "_" + detail.getSetCode() + "_" + detail.getSetDetailCode();
        String deliveryDate = (String) lUrlParam.getParam(keyDeliveryDate);
        hash.put(keyDeliveryDate, deliveryDate);
      }
    }
  }
  // EDBTG003-00 mng-paku add end
  
  /**
   * <b>validate</b> 入力したデータをチェックして、同時にSQLの条件文を作成します。
   * 
   * @param lRequest クライアントからのリクエスト
   */
  public boolean validate(HttpServletRequest lRequest) {
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "顧客コード", estimate.getCustCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "顧客コード", estimate.getCustCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
    SICheckValid.checkValid(errors, "顧客コード", estimate.getCustCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    if (!estimate.getCustName().equals("")) {
      SICheckValid.checkValid(errors, "顧客名", estimate.getCustName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 40);
    }
    if (!estimate.getCustPronName().equals("")) {
      SICheckValid.checkValid(errors, "顧客名カナ", estimate.getCustPronName(), SICheckDataConf.SICHECK_DATA_ZENKAKU_KANA_TYPE);
      SICheckValid.checkValid(errors, "顧客名カナ", estimate.getCustPronName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    }
    if (!estimate.getStoreTel().equals("")) {
      SICheckValid.checkValid(errors, "店舗TEL", estimate.getStoreTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "店舗TEL", estimate.getStoreTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    }
    if (!estimate.getTel().equals("")) {
      SICheckValid.checkValid(errors, "自宅TEL", estimate.getTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "自宅TEL", estimate.getTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    }
    if (!estimate.getFax().equals("")) {
      SICheckValid.checkValid(errors, "FAX", estimate.getFax(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "FAX", estimate.getFax(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    }
    if (!estimate.getEmail().equals("")) {
      SICheckValid.checkValid(errors, "E-mail", estimate.getEmail(), SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
      SICheckValid.checkValid(errors, "E-mail", estimate.getEmail(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    }
    if (!estimate.getPostCode1().equals("")) {
      SICheckValid.checkValid(errors, "郵便番号１", estimate.getPostCode1(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "郵便番号１", estimate.getPostCode1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    }
    if (!estimate.getPostCode2().equals("")) {
      SICheckValid.checkValid(errors, "郵便番号２", estimate.getPostCode2(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "郵便番号２", estimate.getPostCode2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
    }
    if (!estimate.getEstimateAddrressee().equals("")) {
      SICheckValid.checkValid(errors, "宛名", estimate.getEstimateAddrressee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    }
    if (!estimate.getCompanyName().equals("")) {
      SICheckValid.checkValid(errors, "会社名", estimate.getCompanyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    if (!estimate.getAddress2().equals("")) {
      SICheckValid.checkValid(errors, "住所２", estimate.getAddress2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    if (!estimate.getAddress3().equals("")) {
      SICheckValid.checkValid(errors, "住所３", estimate.getAddress3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    if (!estimateDelivery.getPostCode1().equals("")) {
      SICheckValid.checkValid(errors, "配送先：郵便番号１", estimateDelivery.getPostCode1(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "配送先：郵便番号１", estimateDelivery.getPostCode1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    }
    if (!estimateDelivery.getPostCode2().equals("")) {
      SICheckValid.checkValid(errors, "配送先：郵便番号２", estimateDelivery.getPostCode2(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "配送先：郵便番号２", estimateDelivery.getPostCode2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
    }
    if (!estimateDelivery.getCompanyName().equals("")) {
      SICheckValid.checkValid(errors, "配送先：会社名", estimateDelivery.getCompanyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    if (!estimateDelivery.getDeliveryAddressee().equals("")) {
      SICheckValid.checkValid(errors, "配送先：宛名", estimateDelivery.getDeliveryAddressee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    }
    if (!estimateDelivery.getAddress2().equals("")) {
      SICheckValid.checkValid(errors, "配送先：住所２", estimateDelivery.getAddress2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    if (!estimateDelivery.getAddress3().equals("")) {
      SICheckValid.checkValid(errors, "配送先：住所３", estimateDelivery.getAddress3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    if (!estimateDelivery.getTel().equals("")) {
      SICheckValid.checkValid(errors, "配送先：TEL", estimateDelivery.getTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "配送先：TEL", estimateDelivery.getTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    }
    
    // ポイント残高（使用可能なポイントの最大数）を超えるチェック
    if (SIUtil.isNotNull(estimate.getMaxPoint()) && SIUtil.isNotNull(estimate.getSumByPoint())) {
      if (SICheckValid.checkValid(errors, "ポイント使用額", estimate.getSumByPoint(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) {
        if (estimate.getSumByPoint().equals(estimate.getMaxPoint()) || estimate.getSumByPoint().equals("0")) {} else {
          SICheckValid.checkValid(errors, "ポイント使用額", "ポイント残高", estimate.getSumByPoint(), estimate.getMaxPoint(), SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
        }
        // ポイント使用額が合計金額を超えるチェック
        if (!estimate.getSumByPoint().equals(SIUtil.sub_LL(estimate.getSumOfC(), estimate.getSumOfDiscount()))) {
          SICheckValid.checkValid(errors, "ポイント使用額と値引金額", "お支払い合計額", estimate.getSumByPoint(), SIUtil.sub_LL(estimate.getSumOfC(), estimate.getSumOfDiscount()),
              SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
        }
      } else {
        estimate.setSumByPoint("0");
      }
    }
    
    if (SIUtil.isNotNull(estimate.getFee())) {
      if (SICheckValid.checkValid(errors, "手数料", estimate.getFee(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)
          && SICheckValid.checkValid(errors, "手数料", estimate.getFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {} else {
        estimate.setFee("0");
      }
    } else {
      estimate.setFee("0");
    }
    if (SIUtil.isNotNull(estimate.getSumOfDiscount())) {
      if (SICheckValid.checkValid(errors, "値引金額", estimate.getSumOfDiscount(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
          && SICheckValid.checkValid(errors, "値引金額", estimate.getSumOfDiscount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {} else {
        estimate.setSumOfDiscount("0");
      }
    } else {
      estimate.setSumOfDiscount("0");
    }
    
    // 送料調整額チェック
    if (SIUtil.isNotNull(estimate.getDiscountDeliveryFee())) {
      if (SICheckValid.checkValid(errors, "送料調整額", estimate.getDiscountDeliveryFee(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
          && SICheckValid.checkValid(errors, "送料調整額", estimate.getDiscountDeliveryFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
        if (Integer.parseInt(estimate.getDiscountDeliveryFee()) + Integer.parseInt(this.getDeliveryFee1()) + Integer.parseInt(this.getDeliveryFee2()) < 0) {// 総送料がマイナスにならないため
          errors.addError(new SICustomError("input.data.discountDeliveryFee.negative"));
        }
      } else {
        estimate.setDiscountDeliveryFee("0");
      }
    } else {
      estimate.setDiscountDeliveryFee("0");
    }
    // 手数料調整額チェック
    if (SIUtil.isNotNull(estimate.getDiscountFee())) {
      if (SICheckValid.checkValid(errors, "手数料調整額", estimate.getDiscountFee(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
          && SICheckValid.checkValid(errors, "手数料調整額", estimate.getDiscountFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
        if (SIUtil.isNotNull(estimate.getFeeIncTax()) && (Integer.parseInt(estimate.getDiscountFee()) + Integer.parseInt(estimate.getFeeIncTax()) < 0)) {// 総手数料がマイナスにならないため
          errors.addError(new SICustomError("input.data.discountFee.negative"));
        }
      } else {
        estimate.setDiscountFee("0");
      }
    } else {
      estimate.setDiscountFee("0");
    }
    
    Set keymap = hash.keySet();
    Iterator ite = keymap.iterator();
    while (ite.hasNext()) {
      String key = (String) ite.next();
      if (key.startsWith("deliveryFee")) {
        String deliveryFee = (String) hash.get(key);
        if (!SICheckValid.checkValid(errors, "送料", deliveryFee, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE)) {
          hash.put(key, "0");
        }
        if (!SICheckValid.checkValid(errors, "送料", deliveryFee, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) {
          hash.put(key, "0");
        }
        
        if (!SICheckValid.checkValid(errors, "送料", deliveryFee, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
          hash.put(key, "0");
        }
      }
    }
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
    
  }
  
  public boolean validateVariablePrice(Connection lConnection, HttpServletRequest lRequest){
    if(variableCodes==null || variableCodes.length<1) return true;
    boolean res = true;
    
    SICustomErrors errors = (SICustomErrors) lRequest.getAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    if (errors==null) errors = new SICustomErrors();
    
    if (variableCodes!=null || variableCodes.length>0) {
      for (int i=0;i<variableCodes.length;i++){
        if(SICheckValid.checkValid(errors, "商品価格"+variableCodes[i], variablePrice[i], SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)
          && SICheckValid.checkValid(errors, "商品原価"+variableCodes[i], variablePurchase[i], SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)){
          SIModifyRec lRec = new SIModifyRec("keepDetailTbl");
          lRec.addCondition("keepnumber",estimate.getKeepNumber());
          lRec.addCondition("individualcode",variableCodes[i]);
          lRec.add("price", variablePrice[i]);
          lRec.add("purchaseprice", variablePurchase[i]);
          lRec.add("cost", variablePurchase[i]);
          try{
            lRec.execute(lConnection);
          }catch(Exception e){
            errors.addError(new SICustomError("database.execute.error"));
          }
        }
      }
      if(errors.isEmpty()){
        try{lConnection.commit();}catch(SQLException sqle){}
      }else{
        try{lConnection.rollback();}catch(SQLException sqle){}
      }
    }else{
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
      res=false;
    }
    return res;
  }
  
  public boolean validateVariablePriceFree(Connection lConnection, HttpServletRequest lRequest){
    if(variableCodes==null||variableCodes.length<1) return true;
    boolean res = true;
    
    Collection newColl = new ArrayList();
    Collection keepColl = (Collection) lRequest.getSession().getAttribute(SIConfig.SISESSION_MAN_ESTIMATE_FREEKEEP_LIST);
    if (keepColl==null) {
      try{
        keepColl = UIRegNewKeep.getFreeEstimateList(lConnection,estimate.getEstimataCode(),estimate.getMemberLevelCode());
      }catch(Exception e){
        return res;
      }
    }
    
    SICustomErrors errors = (SICustomErrors) lRequest.getAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    if (errors==null) errors = new SICustomErrors();
    
    if (variableCodes!=null&&variableCodes.length>0) {
      for(int i=0;i<variableCodes.length;i++){
        SICheckValid.checkValid(errors, "商品価格"+variableCodes[i], variablePrice[i], SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      }
      if(errors.isEmpty()){
        Iterator ite = keepColl.iterator();
        while (ite.hasNext()) {
          SIKeepDetail detail = (SIKeepDetail)ite.next();
          for(int j=0;j<variableCodes.length;j++){
            if(variableCodes[j].equals(detail.getIndividualCode())){
              detail.setOrgPrice(variablePrice[j]);
              detail.setPrice(variablePrice[j]);
            }
          }
          newColl.add(detail);
        }
        lRequest.getSession().setAttribute(SIConfig.SISESSION_MAN_ESTIMATE_FREEKEEP_LIST,newColl);
      }else{
        lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
        res=false;
      }
    }
    return res;
  }
  
  public void initialize(Connection conn, String estimateCode, SILogin manLogin) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    try {
      StringBuffer estimateSql = new StringBuffer();
      estimateSql.append("SELECT * FROM estimatetbl ");
      estimateSql.append("WHERE estimatecode=").append(SIDBUtil.SQL2Str(estimateCode));
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(estimateSql.toString());
      lResultSet.next();
      estimate.setEstimataCode(estimateCode);
      estimate.setKeepNumber(lResultSet.getString("keepnumber"));
      estimate.setCustCode(lResultSet.getString("custcode"));
      if (lResultSet.getString("custname") != null) {
        estimate.setCustName(lResultSet.getString("custname"));
      }
      estimate.setCustPronName(lResultSet.getString("custpronname"));
      estimate.setEmail(lResultSet.getString("email"));
      estimate.setEstimateAddrressee(lResultSet.getString("estimateaddressee"));
      if (lResultSet.getString("postcode1") != null) {
        estimate.setPostCode1(lResultSet.getString("postcode1"));
      }
      if (lResultSet.getString("postcode2") != null) {
        estimate.setPostCode2(lResultSet.getString("postcode2"));
      }
      if (lResultSet.getString("address1") != null) {
        estimate.setAddress1(lResultSet.getString("address1"));
      }
      if (lResultSet.getString("address2") != null) {
        estimate.setAddress2(lResultSet.getString("address2"));
      }
      if (lResultSet.getString("address3") != null) {
        estimate.setAddress3(lResultSet.getString("address3"));
      }
      if (lResultSet.getString("companyname") != null) {
        estimate.setCompanyName(lResultSet.getString("companyname"));
      }
      if (lResultSet.getString("tel") != null) {
        estimate.setTel(lResultSet.getString("tel"));
      }
      
      estimate.setFax(lResultSet.getString("fax"));
      estimate.setPayMethodName(lResultSet.getString("paymethodname"));
      estimate.setInitDateTime(lResultSet.getString("initdatetime"));
      estimate.setUpdateDateTime(lResultSet.getString("updatedatetime"));
      estimate.setPaymentFlg(lResultSet.getString("paymentflg"));
      estimate.setFee(lResultSet.getString("fee"));
      estimate.setTaxRate(lResultSet.getString("taxrate"));
      estimate.setSumOfDiscount(lResultSet.getString("sumofdiscount"));
      estimate.setSendMailFlg(lResultSet.getString("sendmailflg"));
      estimate.setStatus(lResultSet.getString("status"));
      estimate.setFeeTaxFlg(lResultSet.getString("feetaxflg"));
      estimate.setContactMsg(lResultSet.getString("contactmsg"));
      estimate.setMemo(lResultSet.getString("memo"));
      estimate.setPointEnableFlg(lResultSet.getString("pointenableflg"));
      estimate.setUpdateMallShopCode(lResultSet.getString("updatemallshopcode"));
      estimate.setUpdateUserCode(lResultSet.getString("updateusercode"));
      estimate.setBusinessForm(lResultSet.getString("businessform"));
      estimate.setOrderRoute(lResultSet.getString("orderroute"));
      estimate.setBrarnchCode(lResultSet.getString("branchcode"));
      estimate.setChargeCode(lResultSet.getString("chargecode"));
      if (lResultSet.getString("storetel") != null) {
        estimate.setStoreTel(lResultSet.getString("storetel"));
      }
      estimate.setSumByPoint(lResultSet.getString("usepoint"));
      if (SIUtil.isNotNull(estimate.getCustCode())) {
        UICustPointListCond lcustPoint = new UICustPointListCond();
        estimate.setMaxPoint(lcustPoint.getCustPoint(conn, manLogin, estimate.getCustCode()));
      } else {
        estimate.setMaxPoint("0");
      }
      if (SIUtil.isNotNull(estimate.getDiscountFee())) {
        estimate.setDiscountFee(lResultSet.getString("discountfee"));
      } else {
        estimate.setDiscountFee("0");
      }
      if (SIUtil.isNotNull(estimate.getDiscountDeliveryFee())) {
        estimate.setDiscountDeliveryFee(lResultSet.getString("discountdeliveryFee"));
      } else {
        estimate.setDiscountDeliveryFee("0");
      }
      estimate.setMemberLevelCode(lResultSet.getString("memberLevelCode"));
      estimate.setSumOfSetDiscount(lResultSet.getString("setDiscount")); // EDBTG003-00 elecs-tani add
      SIDBUtil.close(lStatement, lResultSet);
      
      StringBuffer deliverySql = new StringBuffer();
      deliverySql.append("SELECT * FROM estimatedeliverytbl ");
      deliverySql.append("WHERE estimatecode=").append(SIDBUtil.SQL2Str(estimateCode," "));
      deliverySql.append("AND deliverycode='1'");
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(deliverySql.toString());
      lResultSet.next();
      estimateDelivery.setEstimataCode(estimateCode);
      estimateDelivery.setDeliveryCode(lResultSet.getString("deliverycode"));
      estimateDelivery.setDeliveryName(lResultSet.getString("deliveryname"));
      estimateDelivery.setDeliveryAddressee(lResultSet.getString("deliveryaddressee"));
      estimateDelivery.setEmail(lResultSet.getString("email"));
      if (lResultSet.getString("postcode1") != null) {
        estimateDelivery.setPostCode1(lResultSet.getString("postcode1"));
      }
      if (lResultSet.getString("postcode2") != null) {
        estimateDelivery.setPostCode2(lResultSet.getString("postcode2"));
      }
      if (lResultSet.getString("address1") != null) {
        estimateDelivery.setAddress1(lResultSet.getString("address1"));
      }
      if (lResultSet.getString("address2") != null) {
        estimateDelivery.setAddress2(lResultSet.getString("address2"));
      }
      if (lResultSet.getString("address3") != null) {
        estimateDelivery.setAddress3(lResultSet.getString("address3"));
      }
      if (lResultSet.getString("companyname") != null) {
        estimateDelivery.setCompanyName(lResultSet.getString("companyname"));
      }
      if (lResultSet.getString("tel") != null) {
        estimateDelivery.setTel(lResultSet.getString("tel"));
      }
      estimateDelivery.setFax(lResultSet.getString("fax"));
      estimateDelivery.setDeliveryFee(lResultSet.getString("deliveryfee"));
      estimateDelivery.setDeliveryTaxFlg(lResultSet.getString("deliverytaxflg"));
      estimateDelivery.setTaxRate(lResultSet.getString("taxrate"));
      estimateDelivery.setDeliveryTypeName(lResultSet.getString("deliverytypename"));
      estimateDelivery.setCustCode(lResultSet.getString("custcode"));
      estimateDelivery.setAddressCode(lResultSet.getString("addresscode"));
      estimateDelivery.setMallshopCode(lResultSet.getString("mallshopcode"));
      estimateDelivery.setDeliveryTypeCode(lResultSet.getString("deliverytypecode"));
      SIDBUtil.close(lStatement, lResultSet);
      
      StringBuffer detailSql = new StringBuffer();
      // EDBTG003-00 mng-paku mod start
//      detailSql.append("SELECT cmdtycode,individualcode,deliveryfee,deliverydate,deliverytime ");
      detailSql.append("SELECT cmdtycode,individualcode,deliveryfee,deliverydate,deliverytime,setcode,setdetailcode ");
      detailSql.append("FROM estimatedetailtbl ");
      detailSql.append("WHERE estimatecode=").append(SIDBUtil.SQL2Str(estimateCode));
      // EDBTG003-00 mng-paku mod end
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(detailSql.toString());
      while (lResultSet.next()) {
        String deliveryFee = lResultSet.getString("deliveryfee");
        // EDBTG003-00 nagayoshi mod start
//        hash.put("deliveryFee_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode"), deliveryFee);
        String suffix = "_" + lResultSet.getString("setcode") + "_" + lResultSet.getString("setdetailcode");
        if (SIUtil.isNull(lResultSet.getString("setcode"))) {
          suffix = "__";
        }
        hash.put("deliveryFee_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode") + suffix, deliveryFee);
        // EDBTG003-00 nagayoshi mod end
        // EDBTG003-00 mng-paku mod start
        String deliveryDate = lResultSet.getString("deliverydate");
//        hash.put("deliveryDate_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode"), deliveryDate);
        hash.put("deliveryDate_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode") + suffix, deliveryDate);
        String deliveryTime = lResultSet.getString("deliverytime");
//        hash.put("deliveryTime_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode"), deliveryTime);
        hash.put("deliveryTime_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode") + suffix, deliveryTime);
        // EDBTG003-00 mng-paku mod end
      }
      
    } catch (Exception e) {
      throw new SIDBAccessException(e);
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    
  }
  
  public void initializeFree(Connection conn, String estimateCode, SILogin manLogin) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    try {
      StringBuffer estimateSql = new StringBuffer();
      estimateSql.append("SELECT * FROM freeestimatetbl ");
      estimateSql.append("WHERE estimatecode=").append(SIDBUtil.SQL2Str(estimateCode));
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(estimateSql.toString());
      lResultSet.next();
      estimate.setEstimataCode(estimateCode);
      estimate.setCustCode(lResultSet.getString("custcode"));
      if (lResultSet.getString("custname") != null) {
        estimate.setCustName(lResultSet.getString("custname"));
      }
      estimate.setCustPronName(lResultSet.getString("custpronname"));
      estimate.setEmail(lResultSet.getString("email"));
      estimate.setEstimateAddrressee(lResultSet.getString("estimateaddressee"));
      if (lResultSet.getString("postcode1") != null) {
        estimate.setPostCode1(lResultSet.getString("postcode1"));
      }
      if (lResultSet.getString("postcode2") != null) {
        estimate.setPostCode2(lResultSet.getString("postcode2"));
      }
      if (lResultSet.getString("address1") != null) {
        estimate.setAddress1(lResultSet.getString("address1"));
      }
      if (lResultSet.getString("address2") != null) {
        estimate.setAddress2(lResultSet.getString("address2"));
      }
      if (lResultSet.getString("address3") != null) {
        estimate.setAddress3(lResultSet.getString("address3"));
      }
      if (lResultSet.getString("companyname") != null) {
        estimate.setCompanyName(lResultSet.getString("companyname"));
      }
      if (lResultSet.getString("tel") != null) {
        estimate.setTel(lResultSet.getString("tel"));
      }
      
      estimate.setFax(lResultSet.getString("fax"));
      estimate.setPayMethodName(lResultSet.getString("paymethodname"));
      estimate.setInitDateTime(lResultSet.getString("initdatetime"));
      estimate.setUpdateDateTime(lResultSet.getString("updatedatetime"));
      estimate.setPaymentFlg(lResultSet.getString("paymentflg"));
      estimate.setFee(lResultSet.getString("fee"));
      estimate.setTaxRate(lResultSet.getString("taxrate"));
      estimate.setSumOfDiscount(lResultSet.getString("sumofdiscount"));
      estimate.setFeeTaxFlg(lResultSet.getString("feetaxflg"));
      estimate.setContactMsg(lResultSet.getString("contactmsg"));
      estimate.setMemo(lResultSet.getString("memo"));
      estimate.setPointEnableFlg(lResultSet.getString("pointenableflg"));
      estimate.setUpdateMallShopCode(lResultSet.getString("updatemallshopcode"));
      estimate.setUpdateUserCode(lResultSet.getString("updateusercode"));
      estimate.setBusinessForm(lResultSet.getString("businessform"));
      estimate.setOrderRoute(lResultSet.getString("orderroute"));
      estimate.setBrarnchCode(lResultSet.getString("branchcode"));
      estimate.setChargeCode(lResultSet.getString("chargecode"));
      if (lResultSet.getString("storetel") != null) {
        estimate.setStoreTel(lResultSet.getString("storetel"));
      }
      estimate.setSumByPoint(lResultSet.getString("usepoint"));
      if (SIUtil.isNotNull(estimate.getCustCode())) {
        UICustPointListCond lcustPoint = new UICustPointListCond();
        estimate.setMaxPoint(lcustPoint.getCustPoint(conn, manLogin, estimate.getCustCode()));
      } else {
        estimate.setMaxPoint("0");
      }
      if (SIUtil.isNotNull(estimate.getDiscountFee())) {
        estimate.setDiscountFee(lResultSet.getString("discountfee"));
      } else {
        estimate.setDiscountFee("0");
      }
      if (SIUtil.isNotNull(estimate.getDiscountDeliveryFee())) {
        estimate.setDiscountDeliveryFee(lResultSet.getString("discountdeliveryFee"));
      } else {
        estimate.setDiscountDeliveryFee("0");
      }
      estimate.setMemberLevelCode(lResultSet.getString("memberLevelCode"));
      estimate.setSumOfSetDiscount(lResultSet.getString("setdiscount")); // EDBTG003-00 elecs-tani add 
      SIDBUtil.close(lStatement, lResultSet);
      
      StringBuffer deliverySql = new StringBuffer();
      deliverySql.append("SELECT * FROM freeestimatedeliverytbl ");
      deliverySql.append("WHERE estimatecode=").append(SIDBUtil.SQL2Str(estimateCode," "));
      deliverySql.append("AND deliverycode='1'");
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(deliverySql.toString());
      lResultSet.next();
      estimateDelivery.setEstimataCode(estimateCode);
      estimateDelivery.setDeliveryCode(lResultSet.getString("deliverycode"));
      estimateDelivery.setDeliveryName(lResultSet.getString("deliveryname"));
      estimateDelivery.setDeliveryAddressee(lResultSet.getString("deliveryaddressee"));
      estimateDelivery.setEmail(lResultSet.getString("email"));
      if (lResultSet.getString("postcode1") != null) {
        estimateDelivery.setPostCode1(lResultSet.getString("postcode1"));
      }
      if (lResultSet.getString("postcode2") != null) {
        estimateDelivery.setPostCode2(lResultSet.getString("postcode2"));
      }
      if (lResultSet.getString("address1") != null) {
        estimateDelivery.setAddress1(lResultSet.getString("address1"));
      }
      if (lResultSet.getString("address2") != null) {
        estimateDelivery.setAddress2(lResultSet.getString("address2"));
      }
      if (lResultSet.getString("address3") != null) {
        estimateDelivery.setAddress3(lResultSet.getString("address3"));
      }
      if (lResultSet.getString("companyname") != null) {
        estimateDelivery.setCompanyName(lResultSet.getString("companyname"));
      }
      if (lResultSet.getString("tel") != null) {
        estimateDelivery.setTel(lResultSet.getString("tel"));
      }
      estimateDelivery.setFax(lResultSet.getString("fax"));
      estimateDelivery.setDeliveryFee(lResultSet.getString("deliveryfee"));
      estimateDelivery.setDeliveryTaxFlg(lResultSet.getString("deliverytaxflg"));
      estimateDelivery.setTaxRate(lResultSet.getString("taxrate"));
      estimateDelivery.setDeliveryTypeName(lResultSet.getString("deliverytypename"));
      estimateDelivery.setCustCode(lResultSet.getString("custcode"));
      estimateDelivery.setAddressCode(lResultSet.getString("addresscode"));
      estimateDelivery.setMallshopCode(lResultSet.getString("mallshopcode"));
      estimateDelivery.setDeliveryTypeCode(lResultSet.getString("deliverytypecode"));
      SIDBUtil.close(lStatement, lResultSet);
      
      StringBuffer detailSql = new StringBuffer();
      detailSql.append("SELECT cmdtycode,individualcode,deliveryfee,deliverydate ");
      // EDBTG003-00 mng-paku add start
      detailSql.append(" , setcode, setdetailcode ");
      // EDBTG003-00 mng-paku add end
      detailSql.append("FROM freeestimatedetailtbl ");
      detailSql.append("WHERE estimatecode=").append(SIDBUtil.SQL2Str(estimateCode));
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(detailSql.toString());
      while (lResultSet.next()) {
        String deliveryFee = lResultSet.getString("deliveryfee");
        // EDBTG003-00 nagayoshi mod start
//        hash.put("deliveryFee_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode"), deliveryFee);
        String suffix = "_" + lResultSet.getString("setcode") + "_" + lResultSet.getString("setdetailcode");
        if (SIUtil.isNull(lResultSet.getString("setcode"))) {
          suffix = "__";
        }
        hash.put("deliveryFee_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode") + suffix, deliveryFee);
        // EDBTG003-00 nagayoshi mod end
        String deliveryDate = lResultSet.getString("deliverydate");
        // EDBTG003-00 mng-paku mod start
//        hash.put("deliveryDate_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode"), deliveryDate);
        String keyDeliveryDate = "deliveryDate_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode") + suffix;
        hash.put(keyDeliveryDate, deliveryDate);
        // EDBTG003-00 mng-paku mod end
      }
      
    } catch (Exception e) {
      throw new SIDBAccessException(e);
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
  }
  
  public void initializeOrder(Connection conn, String orderCode, SILogin manLogin) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer estimateSql = new StringBuffer();
    try {
      estimateSql.append("SELECT * FROM orderlatestvw ");
      estimateSql.append("WHERE ordercode=").append(SIDBUtil.SQL2Str(orderCode));
      
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(estimateSql.toString());
      lResultSet.next();
      
      estimate.setEstimataCode("");
      estimate.setKeepNumber(orderCode);
      estimate.setCustCode(lResultSet.getString("custcode"));
      estimate.setCustName(lResultSet.getString("custname"));
      estimate.setCustPronName(lResultSet.getString("custpronname"));
      estimate.setEmail(lResultSet.getString("email"));
      estimate.setEstimateAddrressee(lResultSet.getString("orderaddressee"));
      if (lResultSet.getString("postcode1") != null) estimate.setPostCode1(lResultSet.getString("postcode1"));
      if (lResultSet.getString("postcode2") != null) estimate.setPostCode2(lResultSet.getString("postcode2"));
      if (lResultSet.getString("address1") != null) estimate.setAddress1(lResultSet.getString("address1"));
      if (lResultSet.getString("address2") != null) estimate.setAddress2(lResultSet.getString("address2"));
      if (lResultSet.getString("address3") != null) estimate.setAddress3(lResultSet.getString("address3"));
      if (lResultSet.getString("companyname") != null) estimate.setCompanyName(lResultSet.getString("companyname"));
      if (lResultSet.getString("tel") != null) estimate.setTel(lResultSet.getString("tel"));
      if (lResultSet.getString("storetel") != null) estimate.setStoreTel(lResultSet.getString("storetel"));
      estimate.setFax(lResultSet.getString("fax"));
      estimate.setPayMethodName(lResultSet.getString("paymethodname"));
      estimate.setInitDateTime(lResultSet.getString("initdatetime"));
      estimate.setUpdateDateTime(lResultSet.getString("updatedatetime"));
      estimate.setPaymentFlg(lResultSet.getString("paymentflg"));
      estimate.setFee(lResultSet.getString("fee"));
      estimate.setTaxRate(lResultSet.getString("taxrate"));
      estimate.setSumOfDiscount(lResultSet.getString("sumofdiscount"));
      estimate.setSumOfSetDiscount(lResultSet.getString("setdiscount"));// EDBTG003-00 elecs-tani add
      estimate.setSendMailFlg(lResultSet.getString("sendmailflg"));
      estimate.setStatus(lResultSet.getString("status"));
      estimate.setFeeTaxFlg(lResultSet.getString("feetaxflg"));
      estimate.setContactMsg(lResultSet.getString("contactmsg"));
      estimate.setMemo(lResultSet.getString("memo"));
      estimate.setPointEnableFlg(lResultSet.getString("pointenableflg"));
      estimate.setUpdateMallShopCode(lResultSet.getString("updatemallshopcode"));
      estimate.setUpdateUserCode(lResultSet.getString("updateusercode"));
      estimate.setBusinessForm(lResultSet.getString("job"));
      estimate.setOrderRoute(lResultSet.getString("orderroute"));
      estimate.setBrarnchCode(lResultSet.getString("branchcode"));
      estimate.setChargeCode(lResultSet.getString("chargecode"));
      estimate.setSumByPoint(lResultSet.getString("sumbypoint"));
      UICustPointListCond lcustPoint = new UICustPointListCond();
      estimate.setMaxPoint(lcustPoint.getCustPoint(conn, manLogin, estimate.getCustCode()));
      estimate.setDiscountFee(lResultSet.getString("discountfee"));
      estimate.setDiscountDeliveryFee(lResultSet.getString("discountdeliveryFee"));
      
      StringBuffer deliverySql = new StringBuffer();
      deliverySql.append("SELECT * FROM orderdeliverylatestvw ");
      deliverySql.append("WHERE ordercode=").append(SIDBUtil.SQL2Str(orderCode, " "));
      deliverySql.append("AND deliverycode='1'");
      SIDBUtil.close(lStatement, lResultSet);
      
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(deliverySql.toString());
      lResultSet.next();
      
      estimateDelivery.setEstimataCode("");
      estimateDelivery.setDeliveryCode(lResultSet.getString("deliverycode"));
      estimateDelivery.setDeliveryName(lResultSet.getString("deliveryname"));
      estimateDelivery.setDeliveryAddressee(lResultSet.getString("deliveryaddressee"));
      estimateDelivery.setEmail(lResultSet.getString("email"));
      if (lResultSet.getString("postcode1") != null) estimateDelivery.setPostCode1(lResultSet.getString("postcode1"));
      if (lResultSet.getString("postcode2") != null) estimateDelivery.setPostCode2(lResultSet.getString("postcode2"));
      if (lResultSet.getString("address1") != null) estimateDelivery.setAddress1(lResultSet.getString("address1"));
      if (lResultSet.getString("address2") != null) estimateDelivery.setAddress2(lResultSet.getString("address2"));
      if (lResultSet.getString("address3") != null) estimateDelivery.setAddress3(lResultSet.getString("address3"));
      if (lResultSet.getString("companyname") != null) estimateDelivery.setCompanyName(lResultSet.getString("companyname"));
      if (lResultSet.getString("tel") != null) estimateDelivery.setTel(lResultSet.getString("tel"));
      estimateDelivery.setFax(lResultSet.getString("fax"));
      estimateDelivery.setDeliveryFee(lResultSet.getString("deliveryfee"));
      estimateDelivery.setDeliveryTaxFlg(lResultSet.getString("deliverytaxflg"));
      estimateDelivery.setTaxRate(lResultSet.getString("taxrate"));
      estimateDelivery.setDeliveryTypeName(lResultSet.getString("deliverytypename"));
      estimateDelivery.setCustCode(lResultSet.getString("custcode"));
      estimateDelivery.setAddressCode(lResultSet.getString("addresscode"));
      estimateDelivery.setMallshopCode(lResultSet.getString("mallshopcode"));
      estimateDelivery.setDeliveryTypeCode(lResultSet.getString("deliverytypecode"));
      
      StringBuffer detailSql = new StringBuffer();
      // EDBTG003-00 mng-paku mod start
//      detailSql.append("SELECT cmdtycode,individualcode,deliveryfee,deliverydate FROM orderdetaillatestvw ");
      detailSql.append("SELECT cmdtycode, individualcode, deliveryfee, deliverydate, setcode, setdetailcode FROM orderdetaillatestvw ");
      // EDBTG003-00 mng-paku mod end
      detailSql.append("WHERE ordercode=").append(SIDBUtil.SQL2Str(orderCode));
      SIDBUtil.close(lStatement, lResultSet);
      
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(detailSql.toString());
      while (lResultSet.next()) {
        //受注修正時に単体送料が変更されないため、見積書出力時に計算を任せる
        //String deliveryFee = lResultSet.getString("deliveryfee");
        //hash.put("deliveryFee_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode"), deliveryFee);
        String deliveryDate = lResultSet.getString("deliverydate");
        // EDBTG003-00 mng-paku mod start
//        hash.put("deliveryDate_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode"), deliveryDate);
        String suffix = "_" + lResultSet.getString("setcode") + "_" + lResultSet.getString("setdetailcode");
        if (SIUtil.isNull(lResultSet.getString("setcode"))) {
          suffix = "__";
        }
        String keyDeliveryDate = "deliveryDate_" + lResultSet.getString("cmdtycode") + "_" + lResultSet.getString("individualCode") + suffix;
        hash.put(keyDeliveryDate, deliveryDate);
        // EDBTG003-00 mng-paku mod end
      }
    } catch (Exception e) {
      throw new SIDBAccessException(e);
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    
  }
  
  /**
   * <b>validate</b> 入力したデータをチェックして、同時にSQLの条件文を作成します。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @param mode false:キープ直接受注 true:見積り受注
   */
  public boolean orderValidate(HttpServletRequest lRequest, Connection lConnection) {
    return orderValidate(lRequest, lConnection, true);
  }
  public boolean orderValidate(HttpServletRequest lRequest, Connection lConnection, boolean mode) {
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "顧客コード", estimate.getCustCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "顧客コード", estimate.getCustCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
    SICheckValid.checkValid(errors, "顧客コード", estimate.getCustCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (SIUtil.isNotNull(estimate.getCustCode())) {
      StringBuffer lSqlBuf = new StringBuffer("SELECT CustCode FROM CustTbl WHERE CustCode=").append(SIDBUtil.SQL2Str(estimate.getCustCode(), " "));
      lSqlBuf.append("AND delflg=" + SIConfig.SIDEL_FLG_NORMAL);
      SICheckValid.checkExist(errors, lConnection, "顧客コード", lSqlBuf.toString());
    }
    SICheckValid.checkValid(errors, "顧客名", estimate.getCustName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 40);
    SICheckValid.checkValid(errors, "顧客名", estimate.getCustName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "顧客名カナ", estimate.getCustPronName(), SICheckDataConf.SICHECK_DATA_ZENKAKU_KANA_TYPE);
    SICheckValid.checkValid(errors, "顧客名カナ", estimate.getCustPronName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "顧客名カナ", estimate.getCustPronName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "連絡先TEL1", estimate.getStoreTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "連絡先TEL1", estimate.getStoreTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    SICheckValid.checkValid(errors, "連絡先TEL1", estimate.getStoreTel(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "連絡先TEL2", estimate.getTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "連絡先TEL2", estimate.getTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    
    SICheckValid.checkValid(errors, "FAX", estimate.getFax(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "FAX", estimate.getFax(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    
    SICheckValid.checkValid(errors, "E-mail", estimate.getEmail(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "E-mail", estimate.getEmail(), SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors, "E-mail", estimate.getEmail(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    if (SIUtil.isNotNull(estimate.getCustCode()) && SIUtil.isNotNull(estimate.getEmail())) {
      // 重複メールの存在をチェックします
      String lSqlStatement = "SELECT Email FROM custtbl WHERE custcode=" + SIDBUtil.SQL2Str(estimate.getCustCode(), " ");
      lSqlStatement = lSqlStatement + "AND Email=" + SIDBUtil.SQL2Str(estimate.getEmail());
      SICheckValid.checkEmail(errors, lConnection, lSqlStatement);
    }
    
    SICheckValid.checkValid(errors, "郵便番号１", estimate.getPostCode1(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "郵便番号１", estimate.getPostCode1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    SICheckValid.checkValid(errors, "郵便番号１", estimate.getPostCode1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "郵便番号２", estimate.getPostCode2(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "郵便番号２", estimate.getPostCode2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
    SICheckValid.checkValid(errors, "郵便番号２", estimate.getPostCode2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (estimate.getPostCode1().toString().trim().length() != 3 || estimate.getPostCode2().toString().trim().length() != 4) {
      errors.addError(new SICustomError("manager.app.postcode.form"));
    }
    
    SICheckValid.checkValid(errors, "宛名", estimate.getEstimateAddrressee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "宛名", estimate.getEstimateAddrressee(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "会社名", estimate.getCompanyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "住所１", estimate.getAddress1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "住所２", estimate.getAddress2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    SICheckValid.checkValid(errors, "住所２", estimate.getAddress2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "住所３", estimate.getAddress3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "配送先：郵便番号１", estimateDelivery.getPostCode1(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "配送先：郵便番号１", estimateDelivery.getPostCode1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    SICheckValid.checkValid(errors, "配送先：郵便番号１", estimateDelivery.getPostCode1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "配送先：郵便番号２", estimateDelivery.getPostCode2(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "配送先：郵便番号２", estimateDelivery.getPostCode2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
    SICheckValid.checkValid(errors, "配送先：郵便番号２", estimateDelivery.getPostCode2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "配送先：連絡先TEL", estimateDelivery.getTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "配送先：連絡先TEL", estimateDelivery.getTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    SICheckValid.checkValid(errors, "配送先：連絡先TEL", estimateDelivery.getTel(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    if (estimateDelivery.getPostCode1().toString().trim().length() != 3 || estimateDelivery.getPostCode2().toString().trim().length() != 4) {
      errors.addError(new SICustomError("manager.app.postcode.form"));
    }
    
    SICheckValid.checkValid(errors, "配送先：会社名", estimateDelivery.getCompanyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "配送先：宛名", estimateDelivery.getDeliveryAddressee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "配送先：宛名", estimateDelivery.getDeliveryAddressee(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "配送先：住所１", estimateDelivery.getAddress1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "配送先：住所２", estimateDelivery.getAddress2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    SICheckValid.checkValid(errors, "配送先：住所２", estimateDelivery.getAddress2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "配送先：住所３", estimateDelivery.getAddress3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "配送先：TEL", estimateDelivery.getTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "配送先：TEL", estimateDelivery.getTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    
    // ポイント残高（使用可能なポイントの最大数）を超えるチェック
    if (SIUtil.isNotNull(estimate.getMaxPoint()) && SIUtil.isNotNull(estimate.getSumByPoint())) {
      if (SICheckValid.checkValid(errors, "ポイント使用額", estimate.getSumByPoint(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) {
        if (estimate.getSumByPoint().equals(estimate.getMaxPoint()) || estimate.getSumByPoint().equals("0")) {} else {
          SICheckValid.checkValid(errors, "ポイント使用額", "ポイント残高", estimate.getSumByPoint(), estimate.getMaxPoint(), SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
        }
        // ポイント使用額が合計金額を超えるチェック
        if (!estimate.getSumByPoint().equals(SIUtil.sub_LL(estimate.getSumOfC(), estimate.getSumOfDiscount()))) {
          SICheckValid.checkValid(errors, "ポイント使用額と値引金額", "お支払い合計額", estimate.getSumByPoint(), SIUtil.sub_LL(estimate.getSumOfC(), estimate.getSumOfDiscount()),
              SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
        }
      } else {
        estimate.setSumByPoint("0");
      }
    }
    
    if (SIUtil.isNotNull(estimate.getFee())) {
      if (SICheckValid.checkValid(errors, "手数料", estimate.getFee(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)
          && SICheckValid.checkValid(errors, "手数料", estimate.getFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {} else {
        estimate.setFee("0");
      }
    } else {
      estimate.setFee("0");
    }
    
    if (SIUtil.isNotNull(estimate.getSumOfDiscount())) {
      if (SICheckValid.checkValid(errors, "値引金額", estimate.getSumOfDiscount(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
          && SICheckValid.checkValid(errors, "値引金額", estimate.getSumOfDiscount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {} else {
        estimate.setSumOfDiscount("0");
      }
    } else {
      estimate.setSumOfDiscount("0");
    }
    
    // 送料調整額チェック
    if (SIUtil.isNotNull(estimate.getDiscountDeliveryFee())) {
      if (SICheckValid.checkValid(errors, "送料調整額", estimate.getDiscountDeliveryFee(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
          && SICheckValid.checkValid(errors, "送料調整額", estimate.getDiscountDeliveryFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
        if (Integer.parseInt(estimate.getDiscountDeliveryFee()) + Integer.parseInt(this.getDeliveryFee1()) + Integer.parseInt(this.getDeliveryFee2()) < 0) {// 総送料がマイナスにならないため
          errors.addError(new SICustomError("input.data.discountDeliveryFee.negative"));
        }
      } else {
        estimate.setDiscountDeliveryFee("0");
      }
    } else {
      estimate.setDiscountDeliveryFee("0");
    }
    
    // 手数料調整額チェック
    if (SIUtil.isNotNull(estimate.getDiscountFee())) {
      if (SICheckValid.checkValid(errors, "手数料調整額", estimate.getDiscountFee(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
          && SICheckValid.checkValid(errors, "手数料調整額", estimate.getDiscountFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
        if (SIUtil.isNotNull(estimate.getFeeIncTax()) && (Integer.parseInt(estimate.getDiscountFee()) + Integer.parseInt(estimate.getFeeIncTax()) < 0)) {// 総手数料がマイナスにならないため
          errors.addError(new SICustomError("input.data.discountFee.negative"));
        }
      } else {
        estimate.setDiscountFee("0");
      }
    } else {
      estimate.setDiscountFee("0");
    }
    
    SICheckValid.checkValid(errors, "支払方法", estimate.getPayMethodName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    /*if (SICheckValid.checkValid(errors, "支払方法", estimate.getPayMethodName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE)
        && "代金引換".equals(estimate.getPayMethodName())){
      StringBuffer checkSql = new StringBuffer();
      checkSql.append("SELECT * FROM keepdetailtbl WHERE keepnumber=").append(SIDBUtil.SQL2Str(estimate.getKeepNumber()," "));
      checkSql.append("AND branchcode!=999");
      try{
        if (!SIDBUtil.hasData(lConnection, checkSql.toString())) errors.addError(new SICustomError("manager.app.sell.nocashback"));
      }catch(Exception e){e.printStackTrace();}
    }*/
    
    Set keymap = hash.keySet();
    Iterator ite = keymap.iterator();
    while (ite.hasNext()) {
      String key = (String) ite.next();
      if (key.startsWith("deliveryFee")) {
        String deliveryFee = (String) hash.get(key);
        if (!SICheckValid.checkValid(errors, "送料", deliveryFee, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE)) {
          hash.put(key, "0");
        }
        if (!SICheckValid.checkValid(errors, "送料", deliveryFee, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) {
          hash.put(key, "0");
        }
        if (!SICheckValid.checkValid(errors, "送料", deliveryFee, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
          hash.put(key, "0");
        }
      }
    }
    
    // 代引きの時は購入金額が３０万円超はできない。
    if (estimate.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CASH) && estimate.getPayMethodName().startsWith(SIFlagConf.SIFLAG_PAYMENTFLG_CASH_NAME)) {
      if (SIUtil.isNotNull(estimate.getSumOfF())) {
        if (Long.parseLong(estimate.getSumOfF()) > 300000) {
          errors.addError(new SICustomError("manager.app.paymethod.cash.check"));
        }
      }
    }
    
    try {
      Collection detailColl = UIRegNewKeep.getEstimateList(lConnection, estimate.getKeepNumber(), estimate.getMemberLevelCode());
      Iterator ite2 = detailColl.iterator();
      
      String hairCosmeFlg = SIDBUtil.getFirstData(lConnection, "SELECT haircosmeflg FROM custtbl WHERE custcode="+SIDBUtil.SQL2Str(estimate.getCustCode()));
      
      while (ite2.hasNext()) {
        SIKeepDetail detail = (SIKeepDetail) ite2.next();
        StringBuffer lSql = new StringBuffer();
        lSql.append("SELECT m.makercode FROM makertbl m,cmdtymtbl c ");
        lSql.append("WHERE m.makercode=c.makercode AND m.contractflg='1' ");
        lSql.append("AND c.cmdtycode=").append(SIDBUtil.SQL2Str(detail.getCmdtyCode()));
        String maker = SIDBUtil.getFirstData(lConnection, lSql.toString());
        if (!"1".equals(hairCosmeFlg)&&(detail.getIndividualCode().substring(0, 1).equals("V")||detail.getIndividualCode().substring(0, 1).equals("H")||detail.getIndividualCode().substring(0, 1).equals("L"))){
          errors.addError(new SICustomError("manager.message.freeword","化粧品購買/販売特約が未契約のため受注できません。"));
          break;
        }
        if (SIUtil.isNotNull(maker)) {
          lSql = new StringBuffer();
          lSql.append("SELECT makercode FROM custmakertbl ");
          lSql.append("WHERE custcode=").append(SIDBUtil.SQL2Str(estimate.getCustCode()));
          lSql.append(" AND makercode=").append(SIDBUtil.SQL2Str(maker));
          if (!SIDBUtil.hasData(lConnection, lSql.toString())) {
            errors.addError(new SICustomError("manager.message.freeword","未契約ブランドの商品が存在するため受注できません。"));
            break;
          }
        }
        // 商品が購入制限対象の場合、購入回数チェック
        if (SIDBUtil.hasData(lConnection, "SELECT * FROM saleslimittbl WHERE total>0 AND individualcode="+SIDBUtil.SQL2Str(detail.getIndividualCode()))){
          StringBuffer sql = new StringBuffer();
          sql.append("SELECT d.individualcode FROM orderlatestvw h,orderdetaillatestvw d,saleslimittbl l ");
          sql.append("WHERE h.ordercode=d.ordercode AND d.individualcode=l.individualcode AND h.status=1 ");
          sql.append("AND h.custcode=").append(SIDBUtil.SQL2Str(estimate.getCustCode(), " "));
          sql.append("AND d.individualcode=").append(SIDBUtil.SQL2Str(detail.getIndividualCode(), " "));
          sql.append("GROUP BY d.individualcode,l.total HAVING count(DISTINCT h.ordercode)>=l.total ");
          if (SIDBUtil.hasData(lConnection, sql.toString())) {
            errors.addError(new SICustomError("manager.message.freeword",detail.getCmdtyName()+"は購入回数制限のため購入できません。"));
            break;
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      errors.addError(new SICustomError("database.execute.error"));
    }
    
    if (!mode) SICheckValid.checkValid(errors, "受注経路", estimate.getOrderRoute(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (mode&&!isEstimateRegist(lConnection)) errors.addError(new SICustomError("manager.message.error.estimateorder"));
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  public boolean isEstimateRegist(Connection lConnection) {
    boolean lRes = true;
    StringBuffer keepSql = new StringBuffer();
    StringBuffer estimateSql = new StringBuffer();
    
    // EDBTG003-00 mng-paku mod start
    // EDBTG003-00 [不具合管理票-No29] 2013/03/19 nagayoshi mod start
    keepSql.append("SELECT individualcode,sum(amount),sum(amount*price) ");
//    keepSql.append("SELECT individualcode,amount,amount*price ");
    // EDBTG003-00 [不具合管理票-No29] 2013/03/19 nagayoshi mod end
    // EDBTG003-00 mng-paku mod end
    keepSql.append("FROM keepdetailtbl ");
    keepSql.append("WHERE keepnumber=").append(SIDBUtil.SQL2Str(estimate.getKeepNumber()," "));
    // EDBTG003-00 mng-paku mod start
//    keepSql.append("GROUP BY individualcode ");
    // EDBTG003-00 [不具合管理票-No29] 2013/03/19 nagayoshi add start
    keepSql.append("GROUP BY individualcode, setdetailflg, setcode, setdetailcode ");
    // EDBTG003-00 [不具合管理票-No29] 2013/03/19 nagayoshi add end
//    keepSql.append("ORDER BY individualcode");
    // EDBTG003-00 [不具合管理票-No29] 2013/03/19 nagayoshi mod start
    keepSql.append("ORDER BY individualcode, setdetailflg, setcode, setdetailcode");
    // EDBTG003-00 [不具合管理票-No29] 2013/03/19 nagayoshi mod end
    // EDBTG003-00 mng-paku mod end
    
    estimateSql.append("SELECT individualcode,amount,amount*orgprice ");
    estimateSql.append("FROM estimatedetailtbl ");
    estimateSql.append("WHERE estimatecode=").append(SIDBUtil.SQL2Str(estimate.getEstimataCode()," "));
    // EDBTG003-00 mng-paku mod start
//    estimateSql.append("ORDER BY individualcode");
    // EDBTG003-00 [不具合管理票-No29] 2013/03/19 nagayoshi mod start
//    estimateSql.append("ORDER BY individualcode, setcode, setdetailcode");
    estimateSql.append("ORDER BY individualcode, setdetailflg, setcode, setdetailcode");
    // EDBTG003-00 [不具合管理票-No29] 2013/03/19 nagayoshi mod end
    // EDBTG003-00 mng-paku mod end
    
    try {
      Statement lStatement = lConnection.createStatement();
      ResultSet lResultSet = lStatement.executeQuery(keepSql.toString());
      Statement lStatement2 = lConnection.createStatement();
      ResultSet lResultSet2 = lStatement2.executeQuery(estimateSql.toString());
      while (lResultSet.next()) {
        if (!lResultSet2.next()) lRes = false;
        lRes = lRes && (lResultSet.getString(1).equals(lResultSet2.getString(1)));
        lRes = lRes && (lResultSet.getString(2).equals(lResultSet2.getString(2)));
        lRes = lRes && (lResultSet.getString(3).equals(lResultSet2.getString(3)));
      }
      if (lResultSet2.next()) lRes = false;
      SIDBUtil.close(lStatement, lResultSet);
      SIDBUtil.close(lStatement2, lResultSet2);
    } catch (Exception e) {
      e.printStackTrace();
      lRes = false;
    }
    return lRes;
  }
  
  //EDBTG003-00 elecs-matsushima add start
  public Collection initializeFreeSet(Connection conn, String estimateCode) throws SIDBAccessException{
    Statement lStatement = null;
    ResultSet lResultSet = null;
    Collection setDataColl = new ArrayList();
    
    StringBuffer estimateSql = new StringBuffer();
    estimateSql.append("SELECT a.*, b.shopcode, b.cmdtyname FROM freeestimatesetcmdtytbl a, cmdtyunittbl b ");
    estimateSql.append("WHERE a.estimatecode = ").append(SIDBUtil.SQL2Str(estimateCode," "));
    estimateSql.append("  AND a.setcmdtycode = b.cmdtycode ");
    estimateSql.append("  AND a.setindividualcode = b.individualcode ");
    estimateSql.append("  AND b.shopcode = '0' ");
    estimateSql.append("  AND a.setcode in ( SELECT SETCODE FROM freeestimatedetailtbl WHERE estimatecode = ").append(SIDBUtil.SQL2Str(estimateCode,") "));
    estimateSql.append("  ORDER BY a.setcode ");
    
    try {
      lStatement = conn.createStatement();
      lResultSet = lStatement.executeQuery(estimateSql.toString());
      
      while (lResultSet.next()) {
        HashMap setMap = new HashMap();
        
        SICmdtyComposition resComposition = new SICmdtyComposition();
        resComposition.setShopCode(lResultSet.getString("shopcode"));
        resComposition.setCmdtyCode(lResultSet.getString("setcmdtycode"));
        resComposition.setIndividualCode(lResultSet.getString("setindividualcode"));
        resComposition.setAmount(lResultSet.getString("setamount"));
        resComposition.setSetDiscount(lResultSet.getString("setdiscount"));
        resComposition.setSetCmdtyName(lResultSet.getString("cmdtyname"));
        
        setMap.put(lResultSet.getString("setcode"), resComposition);
        
        setDataColl.add(setMap);
      }
    } catch (Exception e) {
      throw new SIDBAccessException(e);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    
    return setDataColl;
  }
  //EDBTG003-00 elecs-matsushima add end
}
