/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.beans.front;

import java.sql.Connection;
import java.sql.Date;// 7.2.0 ST1030 追加
import java.sql.ResultSet;// 7.2.0 ST1030 追加
import java.sql.SQLException;// 7.2.0 ST1030 追加
import java.sql.Statement;// 7.2.0 ST1030 追加
import java.text.DateFormat;// 7.2.0 ST1030 追加
import java.text.SimpleDateFormat;// 7.2.0 ST1030 追加
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;

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

import jp.co.sint.basic.SICartDetail;
import jp.co.sint.basic.SICasherBasic;
import jp.co.sint.basic.SICustAddress;
import jp.co.sint.basic.SILogin;// 7.2.0 ST1030 追加
import jp.co.sint.basic.SIMallShop;
import jp.co.sint.basic.SIOrderDelivery;
import jp.co.sint.basic.SIOrderDetail;
import jp.co.sint.basic.SIOrderDetailPK;
import jp.co.sint.basic.SIPointMan;
import jp.co.sint.basic.SIReserveCartManager;
import jp.co.sint.basic.SITax;
import jp.co.sint.basic.SIUserInfo;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;// 7.2.0 ST1030 追加
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.database.SIDBUtil;// 7.2.0 ST1030 追加
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;// 7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @version $Id: UICasher.java,v 1.0 2003/11/20 Exp $
 * @author Jinwang Chen <br>
 * Description:
 * <p>
 * History
 * </p>
 * <p>
 * Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason
 * </p>
 * ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * Jinwang Chen 2003/11/20 14:04:06 Original
 */
public class UICasher extends SICasherBasic {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  protected HashMap deliveryDateTimeMap = new HashMap();
  
  protected HashMap deliveryTypeMap = new HashMap();
  
  protected HashMap branchMap = new HashMap(); // PI-NES0501 追加
  
  protected HashMap chargeMap = new HashMap(); // PI-NES0501 追加
  
  // 7.3.0 PI-NES0501 追加 ここから
  private String branchCode = "";
  
  private String chargeCode = "";
  // 7.3.0 PI-NES0501 追加 ここまで
  
  private String contactMsg = "";
  
  // メッセージテンプレートタイトル
  private String msgTitleTxt = "";
  
  // メッセージテンプレート内容1
  private String msgContent1Txt = "";
  
  // メッセージテンプレート内容2
  private String msgContent2Txt = "";
  
  // メッセージテンプレート内容3
  private String msgContent3Txt = "";
  
  // カード番号1
  private String cardNo1 = "";
  
  // カード番号2
  private String cardNo2 = "";
  
  // カード番号3
  private String cardNo3 = "";
  
  // カード番号4
  private String cardNo4 = "";
  
  // カード有効期限の月
  private String cardExpiredMonth = "";
  
  // カード有効期限の年
  private String cardExpiredYear = "";
  
  // 名義人
  private String custNameOfCard = "";
  
  // セキュリティコード
  private String securityCode = "";
  
  private String pageNumberTxt_Order = "1";
  
  private String pageNumberTxt_Cust = "1";
  
  private String pageNumberTxt_Cmdty = "1";
  
  // 7.2.0 ST0300 追加 ここから
  // コンビニ決済用 お客様名.姓
  private String familyName = "";
  
  // コンビニ決済用 お客様名.名
  private String firstName = "";
  // 7.2.0 ST0300 追加 ここまで
  
  // 7.1.1 ST0154 追加 ここから
  // 最後チェックのフラグ
  private boolean checked = false;
  // 7.1.1 ST0154 追加 ここまで
  
  // ポイント使用フラグ
  private String pointEnableFlg = "";
  
  private String orderRoute = "";
  
  private String cashPrice = "0";
  
  private String reAuthFlg = "1";
  
  private String reUseFlg = "0";
  
  //EDBTG005-00 kamata add start  
  private String pointFlg = "";
  
  public String getPointFlg() {
    if (pointFlg == null) pointFlg = ""; 
    return pointFlg;
  }
  public void setPointFlg(String pointFlg) {
    if (pointFlg == null) pointFlg = ""; 
    this.pointFlg = pointFlg;
  }
  //EDBTG005-00 kamata add end
  
  /**
   * @return pointEnableFlg を戻します。
   */
  public String getPointEnableFlg() {
    return pointEnableFlg;
  }
  
  /**
   * @param pointEnableFlg pointEnableFlg を設定。
   */
  public void setPointEnableFlg(String pointEnableFlg) {
    this.pointEnableFlg = pointEnableFlg;
  }
  
  public UICasher() {}
  
  public void setDeliveryDateTime(String lName, String lValue) {
    if (SIUtil.isNull(lName)) return;
    if (SIUtil.isNull(lValue)) lValue = "";
    else lValue = SIUtil.changeTo(lValue.trim(), this.encode);
    deliveryDateTimeMap.put(lName, lValue);
  }
  
  public void setDeliveryType(String lName, String lValue) {
    if (SIUtil.isNull(lName)) return;
    if (SIUtil.isNull(lValue)) lValue = "";
    else lValue = SIUtil.changeTo(lValue.trim(), this.encode);
    deliveryTypeMap.put(lName, lValue);
  }
  
  public void setBranch(String lName, String lValue) {
    if (SIUtil.isNull(lName)) return;
    if (SIUtil.isNull(lValue)) lValue = "";
    else lValue = SIUtil.changeTo(lValue.trim(), this.encode);
    branchMap.put(lName, lValue);
  }
  
  public void setCharge(String lName, String lValue) {
    if (SIUtil.isNull(lName)) return;
    if (SIUtil.isNull(lValue)) lValue = "";
    else lValue = SIUtil.changeTo(lValue.trim(), this.encode);
    chargeMap.put(lName, lValue);
  }
  
  public void setContactMsg(String lContactMsg) {
    if (SIUtil.isNull(lContactMsg)) lContactMsg = "";
    this.contactMsg = SIUtil.changeTo(lContactMsg.trim(), this.encode);
  }
  
  // 7.2.0 ST1030 追加
  public void setContactMsgNoEncode(String lContactMsg) {
    if (SIUtil.isNull(lContactMsg)) lContactMsg = "";
    this.contactMsg = lContactMsg.trim();
  }
  
  // setter of メッセージタイトル
  public void setMsgTitleTxt(String lMsgTitleTxt) {
    if (SIUtil.isNull(lMsgTitleTxt)) lMsgTitleTxt = "";
    this.msgTitleTxt = SIUtil.changeTo(lMsgTitleTxt.trim(), this.encode);
  }
  
  // setter of メッセージ内容1
  public void setMsgContent1Txt(String lMsgContent1Txt) {
    if (SIUtil.isNull(lMsgContent1Txt)) lMsgContent1Txt = "";
    this.msgContent1Txt = SIUtil.changeTo(lMsgContent1Txt.trim(), this.encode);
  }
  
  // setter of メッセージ内容2
  public void setMsgContent2Txt(String lMsgContent2Txt) {
    if (SIUtil.isNull(lMsgContent2Txt)) lMsgContent2Txt = "";
    this.msgContent2Txt = SIUtil.changeTo(lMsgContent2Txt.trim(), this.encode);
  }
  
  // setter of メッセージ内容3
  public void setMsgContent3Txt(String lMsgContent3Txt) {
    if (SIUtil.isNull(lMsgContent3Txt)) lMsgContent3Txt = "";
    this.msgContent3Txt = SIUtil.changeTo(lMsgContent3Txt.trim(), this.encode);
  }
  
  // setter of カード番号１
  public void setCardNo1(String lCardNo1) {
    if (SIUtil.isNull(lCardNo1)) lCardNo1 = "";
    this.cardNo1 = SIUtil.changeTo(lCardNo1.trim(), this.encode);
  }
  
  // setter of カード番号2
  public void setCardNo2(String lCardNo2) {
    if (SIUtil.isNull(lCardNo2)) lCardNo2 = "";
    this.cardNo2 = SIUtil.changeTo(lCardNo2.trim(), this.encode);
  }
  
  // setter of カード番号3
  public void setCardNo3(String lCardNo3) {
    if (SIUtil.isNull(lCardNo3)) lCardNo3 = "";
    this.cardNo3 = SIUtil.changeTo(lCardNo3.trim(), this.encode);
  }
  
  // setter of カード番号4
  public void setCardNo4(String lCardNo4) {
    if (SIUtil.isNull(lCardNo4)) lCardNo4 = "";
    this.cardNo4 = SIUtil.changeTo(lCardNo4.trim(), this.encode);
  }
  
  // setter of カード有効期限の月
  public void setCardExpiredMonth(String lCardExpiredMonth) {
    if (SIUtil.isNull(lCardExpiredMonth)) lCardExpiredMonth = "";
    this.cardExpiredMonth = SIUtil.changeTo(lCardExpiredMonth.trim(), this.encode);
  }
  
  // setter of カード有効期限の年
  public void setCardExpiredYear(String lCardExpiredYear) {
    if (SIUtil.isNull(lCardExpiredYear)) lCardExpiredYear = "";
    this.cardExpiredYear = SIUtil.changeTo(lCardExpiredYear.trim(), this.encode);
  }
  
  // setter of カード名義人
  public void setCustNameOfCard(String lCustNameOfCard) {
    if (SIUtil.isNull(lCustNameOfCard)) lCustNameOfCard = "";
    this.custNameOfCard = SIUtil.changeTo(lCustNameOfCard.trim(), this.encode);
  }
  
  // setter of セキュリティコード
  public void setSecurityCode(String lSecurityCode) {
    if (SIUtil.isNull(lSecurityCode)) lSecurityCode = "";
    this.securityCode = SIUtil.changeTo(lSecurityCode.trim(), this.encode);
  }
  
  public void setPageNumberTxt_Order(String string) {
    if (SIUtil.isNull(string)) string = "1";
    pageNumberTxt_Order = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  public void setPageNumberTxt_Cust(String string) {
    if (SIUtil.isNull(string)) string = "1";
    pageNumberTxt_Cust = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  public void setPageNumberTxt_Cmdty(String string) {
    if (SIUtil.isNull(string)) string = "1";
    pageNumberTxt_Cmdty = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  // 7.2.0 ST0300 追加 ここから
  // コンビニ決済用 お客様名.姓
  public void setFamilyName(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.familyName = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  // コンビニ決済用 お客様名.名
  public void setFirstName(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.firstName = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  // 7.2.0 ST0300 追加 ここまで
  
  // 7.1.1 ST0154 追加 ここから
  // settter of checked
  public void setChecked(boolean lChecked) {
    this.checked = lChecked;
  }
  
  // 7.1.1 ST0154 追加 ここまで
  
  public String getDeliveryDates(int num) {
    String lValue = (String) deliveryDateTimeMap.get(SIConfig.SIPREFIX_CASHER_DELIVERY_DATE_TIME + Integer.toString(num));
    return lValue;
  }
  
  public String getDeliveryDateTime(String lName) {
    String lValue = (String) deliveryDateTimeMap.get(lName);
    if (SIUtil.isNull(lValue)) return "";
    else return lValue;
  }
  
  public String getDeliveryDateTime(int lSeq) {
    if (SIUtil.isNotNull(getDeliveryTime(lSeq))) {
      return getDeliveryDate(lSeq) + " " + getDeliveryTime(lSeq) + " 時ごろ";
    } else {
      return getDeliveryDate(lSeq);
    }
  }
  
  public String getBranch(String lName) {
    String lValue = (String) branchMap.get(lName);
    if (SIUtil.isNull(lValue)) return "";
    else return lValue;
  }
  
  public String getCharge(String lName) {
    String lValue = (String) chargeMap.get(lName);
    if (SIUtil.isNull(lValue)) return "";
    else return lValue;
  }
  
  public String getDeliveryDate(int lSeq) {
    String lRes = "";
    if (SIUtil.isNotNull(getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_YEAR + lSeq))
        && SIUtil.isNotNull(getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_MONTH + lSeq))
        && SIUtil.isNotNull(getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_DAY + lSeq))) {
      lRes = getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_YEAR + lSeq) + "/" + getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_MONTH + lSeq) + "/"
          + getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_DAY + lSeq);
    }
    return lRes;
  }
  
  public String getDeliveryTime(int lSeq) {
    String lRes = "";
    if (SIUtil.isNotNull(getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_TIME + lSeq))) {
      lRes = getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_TIME + lSeq);
    }
    log.debug("getDeliveryTime:lName=" + (SIConfig.SIPREFIX_CASHER_DELIVERY_TIME + lSeq) + ",value=" + lRes);
    return lRes;
  }
  
  // public String getCasherShopCode(){
  // if (SIUtil.isNull(getShopCode())) return SIConfig.SIMALL.getMallShopCode();
  // else return getShopCode();
  // }
  
  public String getContactMsg() {
    return this.contactMsg;
  }
  
  public String getDeliveryType(String lName) {
    String lValue = (String) deliveryTypeMap.get(lName);
    if (SIUtil.isNull(lValue)) return "";
    else return lValue;
  }
  
  // getter of メッセージタイトル
  public String getMsgTitleTxt() {
    return this.msgTitleTxt;
  }
  
  // getter of メッセージ内容1
  public String getMsgContent1Txt() {
    return this.msgContent1Txt;
  }
  
  // getter of メッセージ内容2
  public String getMsgContent2Txt() {
    return this.msgContent2Txt;
  }
  
  // getter of メッセージ内容3
  public String getMsgContent3Txt() {
    return this.msgContent3Txt;
  }
  
  // getter of カード番号1
  public String getCardNo1() {
    return this.cardNo1;
  }
  
  // getter of カード番号2
  public String getCardNo2() {
    return this.cardNo2;
  }
  
  // getter of カード番号3
  public String getCardNo3() {
    return this.cardNo3;
  }
  
  // getter of カード番号4
  public String getCardNo4() {
    return this.cardNo4;
  }
  
  public String getCardNo() {
    return getCardNo1() + getCardNo2() + getCardNo3() + getCardNo4();
  }
  
  // getter of カード有効期限の月
  public String getCardExpiredMonth() {
    return this.cardExpiredMonth;
  }
  
  // getter of カード有効期限の年
  public String getCardExpiredYear() {
    return this.cardExpiredYear;
  }
  
  // getter of カード名義人
  public String getCustNameOfCard() {
    return this.custNameOfCard;
  }
  
  // getter of セキュリティコード
  public String getSecurityCode() {
    return this.securityCode;
  }
  
  public String getPageNumberTxt_Order() {
    return this.pageNumberTxt_Order;
  }
  
  public String getPageNumberTxt_Cust() {
    return this.pageNumberTxt_Cust;
  }
  
  public String getPageNumberTxt_Cmdty() {
    return this.pageNumberTxt_Cmdty;
  }
  
  public String getCardExpired() {
    if (SIUtil.isNotNull(getCardExpiredMonth()) || SIUtil.isNotNull(getCardExpiredYear())) {
      return getCardExpiredMonth() + "/" + getCardExpiredYear();
    } else {
      return "";
    }
  }
  
  // 7.3.0 PI-NES0501 追加 ここから
  
  // getter of 支店コード
  public String getBranchCode() {
    return branchCode;
  }
  
  // getter of 担当者コード
  public String getChargeCode() {
    return chargeCode;
  }
  
  // setter of 支店コード
  public void setBranchCode(String lBranchCode) {
    if (SIUtil.isNull(lBranchCode)) lBranchCode = "";
    this.branchCode = SIUtil.changeTo(lBranchCode.trim(), this.encode);
  }
  
  // setter of 担当者コード
  public void setChargeCode(String lChargeCode) {
    if (SIUtil.isNull(lChargeCode)) lChargeCode = "";
    this.chargeCode = SIUtil.changeTo(lChargeCode.trim(), this.encode);
  }
  
  // 7.3.0 PI-NES0501 追加 ここまで
  // 7.2.0 ST0300 追加 ここから
  // コンビニ決済用 お客様名.姓
  public String getFamilyName() {
    return this.familyName;
  }
  
  // コンビニ決済用 お客様名.名
  public String getFirstName() {
    return this.firstName;
  }
  
  // 7.2.0 ST0300 追加 ここまで
  
  //getter of cashPrice
  public String getCashPrice() {
    return this.cashPrice;
  }
  //setter of cashPrice
  public void setCashPrice(String cashPrice) {
    if (SIUtil.isNull(cashPrice)) cashPrice = "0";
    this.cashPrice = SIUtil.changeTo(cashPrice.trim(), this.encode);
  }
  
  // 7.1.1 ST0154 追加 ここから
  public boolean getChecked() {
    return this.checked;
  }
  
  public static void reset(HttpServletRequest lRequest) {
    HttpSession session = lRequest.getSession(true);// セッションの取得
    UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
    if (lCasher == null) return;
    else {
      lCasher.setChecked(false);
      session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
    }
  }
  
  // 7.1.1 ST0154 追加 ここまで
  
  public void init(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam) {// 7.1.1 ST0236 修正
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);// 7.1.1 ST0236 修正
    
    // 7.1.1 ST0236 修正 ここから
    // 管理コード（またはショップコード）の設定
    this.setShopCode((String) lUrlParam.getParam("shc"));
    // ポイント残高の設定値の取得
    setSumByPointWithEncode((String) lUrlParam.getParam("sumByPoint"));// 7.2.0 ST1030 修正
    setMaxPoint((String) lUrlParam.getParam("maxPoint"));
    
    // 7.2.0 ST1030 追加 ここから
    setSumOfG((String) lUrlParam.getParam("sumOfDiscount"));
    // 7.2.0 ST1030 追加 ここまで
    
    if (SIUtil.isNotNull((String) lUrlParam.getParam("discountDeliveryFee"))) {
      setDiscountDeliveryFee((String) lUrlParam.getParam("discountDeliveryFee"));// 送料調整額
    }
    if (SIUtil.isNotNull((String) lUrlParam.getParam("discountFee"))) {
      setDiscountFee((String) lUrlParam.getParam("discountFee"));// 手数料調整額
    }
    
    this.setDeliveryCheck(lRequest.getParameterValues("deliveryCheck"));
    this.setDeliveryKomonoCheck(SIUtil.isNotNull((String) lUrlParam.getParam("deliveryKomonoCheck")));
    
    String ddf = "0";
    LinkedHashMap detailMap=(LinkedHashMap)lRequest.getSession().getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);//受注明細レコード
    if (detailMap!=null && this.getDeliveryCheck() != null) {
      Iterator lDetailIta=detailMap.values().iterator();
      SIOrderDetail lOrderDetail=new SIOrderDetail();
      while (lDetailIta.hasNext()){
        lOrderDetail = (SIOrderDetail)lDetailIta.next();
        for (int i=0; i < this.getDeliveryCheck().length; i++){
          if (this.getDeliveryCheck()[i].equals(lOrderDetail.getIndividualCode())){
            ddf = SIUtil.add(ddf,lOrderDetail.getDeliveryFee());
          }
        }
      }
      if(!ddf.equals("0")){
        this.setDiscountDeliveryFee("-" + ddf);
      }
    }
    
    // 支払方法関連の再設定
    this.setPayMethodName((String) lUrlParam.getParam("payMethodName"));
    // 支払方法の設定BackUp
    this.setPayMethodNameBack((String) lUrlParam.getParam("payMethodNameBack"));
    // 金額の計算
    this.calcSum(lRequest, lConnection, lUrlParam);
    // 7.1.1 ST0236 修正 ここまで
    
    if(this.isDeliveryKomonoCheck()&&!this.getKomonoDeliveryFee().equals("0")){
      this.setDiscountDeliveryFee("-" + SIUtil.add(ddf, this.getKomonoDeliveryFee()));
      this.calcSum(lRequest, lConnection, lUrlParam);
    }
    
    // 連絡事項
    this.setContactMsg((String) lUrlParam.getParam("contactMsg"));
    
    // 配送希望日時のデータの取得
    Enumeration lEnum = lRequest.getParameterNames();
    String lName = "";
    
    // 7.3.0 PI-NES0501 追加 ここから
    this.setBranchCode((String) lUrlParam.getParam("orderbranch"));
    this.setChargeCode((String) lUrlParam.getParam("ordercharge"));
    // 7.3.0 PI-NES0501 追加 ここまで
    
    while (lEnum.hasMoreElements()) {
      lName = (String) lEnum.nextElement();
      if (lName.startsWith(SIConfig.SIPREFIX_CASHER_DELIVERY_DATE_TIME)) {
        this.setDeliveryDateTime(lName, (String) lUrlParam.getParam(lName));// 7.1.1 ST0236 修正
      }
      if (lName.startsWith("branch")) {
        this.setBranch(lName, (String) lUrlParam.getParam(lName));
      }
      if (lName.startsWith("charge")) {
        this.setCharge(lName, (String) lUrlParam.getParam(lName));
      }
    }
    
    // 7.1.1 ST0236 修正 ここから
    // 決済の情報の設定
    // 7.2.0 ST0331 修正 ここから
    if (!"****".equals((String) lUrlParam.getParam("cardNo1"))) setCardNo1((String) lUrlParam.getParam("cardNo1"));
    if (!"****".equals((String) lUrlParam.getParam("cardNo2"))) setCardNo2((String) lUrlParam.getParam("cardNo2"));
    if (!"****".equals((String) lUrlParam.getParam("cardNo3"))) setCardNo3((String) lUrlParam.getParam("cardNo3"));
    // 7.2.0 ST0331 修正 ここまで
    setCardNo4((String) lUrlParam.getParam("cardNo4"));
    
    setCardExpiredMonth((String) lUrlParam.getParam("cardExpiredMonth"));
    setCardExpiredYear((String) lUrlParam.getParam("cardExpiredYear"));
    setCustNameOfCard((String) lUrlParam.getParam("custNameOfCard"));
    setSecurityCode((String) lUrlParam.getParam("securityCode"));
    if(lUrlParam.getParam("reAuthFlg")!=null) {
      setReAuthFlg((String) lUrlParam.getParam("reAuthFlg"));
    }
    setReUseFlg((String) lUrlParam.getParam("reUseFlg"));
    
    // 7.2.0 ST0300 追加 ここから
    // 選択された「コンビニの種類」のセット
    setCvsTypeCode((String) lUrlParam.getParam("cvsType"));
    setFamilyName((String) lUrlParam.getParam("familyName"));
    setFirstName((String) lUrlParam.getParam("firstName"));
    // 7.2.0 ST0300 追加 ここまで
    if (SIUtil.isNotNull((String) lUrlParam.getParam("pointEnableFlg"))) {
      setPointEnableFlg((String) lUrlParam.getParam("pointEnableFlg"));
    }
    this.setPageNumberTxt_Order((String) lUrlParam.getParam("pageNumberTxt_order"));
    this.setPageNumberTxt_Cust((String) lUrlParam.getParam("pageNumberTxt_cust"));
    this.setPageNumberTxt_Cmdty((String) lUrlParam.getParam("pageNumberTxt_cmdty"));
    // 7.1.1 ST0236 修正 ここまで
    
    this.setOrderRoute((String) lUrlParam.getParam("orderRoute"));
    this.setCashPrice((String)lUrlParam.getParam("cashPrice"));
    this.setOrderCode((String)lUrlParam.getParam("orderCode"));
    
    // EDBTG005-00 kamata add start
    this.setPointFlg((String)lUrlParam.getParam("pointFlg"));
    if ("0".equals(this.getPointFlg())){
        // 「ポイントを利用しない」を選択している場合、初期化する
        this.setSumOfE("");
    }
    // EDBTG005-00 kamata add end
  }
  
  public void readData(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam, String lOrderCode, String lSumOfDiscount) {
    readData(lRequest, lConnection, lUrlParam, lOrderCode, lSumOfDiscount, "", "");
  }
  
  // 7.2.0 ST1030 追加 ここから
  public void readData(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam, String lOrderCode, String lSumOfDiscount, String exSumOfB1, String exSumOfB2) {
    
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);
    
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest); // ログイン情報
    HttpSession session = lRequest.getSession(true); // セッションの取得
    
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    // 該当受注の検索
    StringBuffer lSqlBuf = new StringBuffer();
    lSqlBuf.append("SELECT bb.SHOPCODE, aa.SUMBYPOINT, aa.PAYMETHODNAME, aa.CONTACTMSG, aa.CVSTYPECODE, aa.POINTENABLEFLG, aa.DISCOUNTFEE, aa.DISCOUNTDELIVERYFEE");
    lSqlBuf.append(" ,aa.setDiscount ");// EDBTG003-00 elecs-tani add
    lSqlBuf.append(" FROM ").append(SIConfig.SIVIEW_ORDER_LATEST_NAME).append(" aa ");
    lSqlBuf.append(" INNER JOIN ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(" bb ");
    lSqlBuf.append(" ON aa.ORDERCODE = bb.ORDERCODE AND bb.DELIVERYCODE = '1' AND bb.DETAILCODE = '1' ");
    lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(lOrderCode));
    
    try {
      log.debug("readData:lSql=" + lSqlBuf.toString());
      
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      if (lResultSet.next()) {
        // 管理コード（またはショップコード）の設定
        if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_INDIVIDUAL) {
          this.setShopCode(lResultSet.getString("SHOPCODE"));
        }
        
        // ポイント使用額の取得
        setSumByPoint(lResultSet.getString("SUMBYPOINT"));
        
        // ポイントフラグ取得
        setPointEnableFlg(lResultSet.getString("POINTENABLEFLG"));
        
        // ポイント残高の取得
        SIUserInfo userInfoID = (SIUserInfo) session.getAttribute(SIConfig.SISESSION_USERINFO_NAME);
        if (userInfoID == null) userInfoID = new SIUserInfo();
        
        if (getPointEnableFlg().equals("2")) {
          setMaxPoint(userInfoID.getMaxPoint());// 見積から受注する場合
        } else {
          setMaxPoint(SIUtil.add_LL(userInfoID.getMaxPoint(), this.getSumByPoint()));
        }
        if (SIUtil.isNotNull(lResultSet.getString("DISCOUNTDELIVERYFEE"))) {
          setDiscountDeliveryFee(lResultSet.getString("DISCOUNTDELIVERYFEE"));// 送料調整額
        }
        if (SIUtil.isNotNull(lResultSet.getString("DISCOUNTFEE"))) {
          setDiscountFee(lResultSet.getString("DISCOUNTFEE"));// 手数料調整額
        }
        // 支払方法関連の再設定
        this.setPayMethodNameNoEncode(lResultSet.getString("PAYMETHODNAME"));
        // 支払方法の設定BackUp
        this.setPayMethodNameBackNoEncode(lResultSet.getString("PAYMETHODNAME"));
        
        // コンビニコードのセット
        this.setCvsTypeCode(lResultSet.getString("CVSTYPECODE"));
        
        // 値引金額のセット
        this.setSumOfG(lSumOfDiscount);
        
        // 金額の計算
        this.calcSum(lRequest, lConnection, lUrlParam, exSumOfB1, exSumOfB2);
        
        // 連絡事項
        this.setContactMsgNoEncode(lResultSet.getString("CONTACTMSG"));
      }
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    
    // 配送希望日時のデータの取得
    lSqlBuf = new StringBuffer();
    lSqlBuf.append("SELECT aa.DELIVERYDATE, aa.DELIVERYTIMEFROM || '-' || DELIVERYTIMETO AS DELIVERYTIME ");
    lSqlBuf.append(" FROM ").append(SIConfig.SIVIEW_ORDER_DELIVERY_LATEST_NAME).append(" aa ");
    if (lLogin.isShop()) {
      lSqlBuf.append(" INNER JOIN ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(" bb ");
      lSqlBuf.append(" ON aa.ORDERCODE = bb.ORDERCODE AND aa.DELIVERYCODE = bb.DELIVERYCODE AND bb.DETAILCODE = '1' ");
      lSqlBuf.append(" AND bb.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
    }
    lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(lOrderCode));
    lSqlBuf.append(" ORDER BY aa.MALLSHOPCODE, aa.DELIVERYTYPECODE, aa.ADDRESSCODE");
    
    try {
      log.debug("readData:lSql=" + lSqlBuf.toString());
      
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      int cnt = 0;
      while (lResultSet.next()) {
        cnt++;
        
        if (lResultSet.getDate("DELIVERYDATE") != null) {
          Date lDeliveryDate = lResultSet.getDate("DELIVERYDATE");
          DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
          String[] ymd = df.format(lDeliveryDate).split("/");
          
          this.setDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_YEAR + Integer.toString(cnt), ymd[0]);
          this.setDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_MONTH + Integer.toString(cnt), ymd[1]);
          this.setDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_DAY + Integer.toString(cnt), ymd[2]);
        }
        this.setDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_TIME + Integer.toString(cnt), lResultSet.getString("DELIVERYTIME"));
      }
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
  }
  
  // 7.2.0 ST1030 追加 ここまで
  
  /**
   * <b>initDeliveryType</b> レジ（配送先・ギフト設定）の画面から、この画面まで遷移するときに、選択される配送業者を取得
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection DBへの接続クラクション
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void initDeliveryType(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam) {// 7.1.1 ST0236 修正
    this.init(lRequest, lConnection, lUrlParam);
    HttpSession session = lRequest.getSession(true);// セッションの取得
    HashMap detailMap = (HashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    if (detailMap == null) detailMap = new HashMap();
    HashMap deliveryMap = (HashMap) session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);
    if (deliveryMap == null) deliveryMap = new HashMap();
    String lTaxRate = SITax.getTaxRate(lConnection);
    
    // ログインユーザーの情報の取得
    SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(lRequest);
    
    SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
    SIOrderDetail lOrderDetail = new SIOrderDetail();
    SIOrderDetailPK lPk = new SIOrderDetailPK();
    SICustAddress lAddress = new SICustAddress();
    
    Enumeration lNameEnum = lRequest.getParameterNames();
    String lName = "";
    String lNewDeliveryTypeName = "";
    
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);// 7.1.1 ST0236 修正
    
    while (lNameEnum.hasMoreElements()) {
      lName = (String) lNameEnum.nextElement();
      
      if (lName.startsWith(SIConfig.SIPREFIX_ORDER_COUNTER_DELIVERY_NAME)) {
        lPk = new SIOrderDetailPK();
        lPk.setFieldNameTxt(lName);
        // 配送業者のデータの設定
        setDeliveryType(lName, (String) lUrlParam.getParam(lName));// 7.1.1 ST0236 修正
        // 最新のデータの取得
        lNewDeliveryTypeName = this.getDeliveryType(lName);
        // 詳細のデータの取得
        lOrderDetail = (SIOrderDetail) detailMap.get(lPk.getOrderDetailCode());// 受注明細の取得
        if (lOrderDetail == null) continue;// 7.1.1 ST0156 追加
        // 受注配送先コードに基づいて、配送種別名称の取得
        lOrderDelivery = (SIOrderDelivery) deliveryMap.get(lOrderDetail.getDeliveryCode());
        
        // 変わるかどうか
        if (lOrderDelivery.getDeliveryTypeName().equals(lNewDeliveryTypeName)) {// 変わらない
          log.debug("initDeliveryType(not changed):lNewDeliveryTypeName=" + lNewDeliveryTypeName);
        } else {// 変わった、再設定
          log.debug("initDeliveryType(changed):lNewDeliveryTypeName=" + lNewDeliveryTypeName);
          lPk.setDeliveryTypeName(lNewDeliveryTypeName);// 新規受注配送先コードの作成
          if (deliveryMap.get(lPk.getOrderDeliveryCode()) == null) {// これは、新規配送先レコードです
            lOrderDelivery = new SIOrderDelivery();
            lAddress = new SICustAddress(lUserInfo.getCustCode(), lPk.getAddressCode());
            lAddress.reset(lConnection);
            SICartDetail.copy(lAddress, lOrderDelivery);
            lOrderDelivery.setDeliveryCode(lPk.getOrderDeliveryCode());
            lOrderDelivery.setDeliveryTypeName(lNewDeliveryTypeName);
            lOrderDelivery.setTaxRate(lTaxRate);
            lOrderDelivery.setShopCode(lOrderDetail.getShopCode());
            SIMallShop lMallShop = new SIMallShop(lOrderDetail.getShopCode());
            lMallShop.reset(lConnection);
            lOrderDelivery.setDeliveryTaxFlg(lMallShop.getDeliveryTaxFlg());
            // 7.2.0 ST1030 追加 ここから
            lOrderDelivery.setDeliveryTypeCode(lOrderDetail.getDeliveryTypeCode());
            // 7.2.0 ST1030 追加 ここまで
            deliveryMap.put(lPk.getOrderDeliveryCode(), lOrderDelivery);
          }
          lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
          lOrderDetail.setDeliveryCode(lPk.getOrderDeliveryCode());
          detailMap.put(lPk.getOrderDetailCode(), lOrderDetail);
        }
      }
    }
    
    // 保存
    session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME, deliveryMap);
    session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
    jp.co.sint.beans.front.UICasher.reset(lRequest);// 7.1.1 ST0154 追加
    
    setEncode(SIConfig.SIENCODE_NONE);
    // ポイント残高の設定
    setMaxPoint(SIPointMan.getMaxPoint(lConnection, lUserInfo.getCustCode(), getCasherShopCode()));
    // 顧客情報から支払方法を設定しない
    //setPayMethodName(lUserInfo.getPayMethodName());
    setTaxRate(lTaxRate);
    this.calcSum(lRequest, lConnection, lUrlParam);// 7.1.1 ST0236 修正
  }
  
  /**
   * <b>validate</b> レジ（配送先・ギフト設定）の画面から、この画面まで遷移するときに、選択される配送業者を取得
   * 
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  // 7.2.0 ST1030 修正 ここから
  public boolean validate(HttpServletRequest lRequest, Connection lConnection, boolean payMethodValidate) {// 7.1.2 ST0154 修正
    return validate(lRequest, lConnection, false, "0", payMethodValidate);
  }
  
  public boolean validate(HttpServletRequest lRequest, Connection lConnection, boolean updMode, String lOrgPoints, boolean payMethodValidate) {
    // 7.2.0 ST1030 修正 ここまで
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    Iterator lNameIta = deliveryDateTimeMap.keySet().iterator();
    String lName = "";
    String lDate = "";
    SIDateTime lDateTime = new SIDateTime();
    boolean hasError = false;
    // 7.1.1 ST0154 追加 ここから
    SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(lRequest);
    setMaxPoint(SIUtil.add_LL(SIPointMan.getMaxPoint(lConnection, lUserInfo.getCustCode(), getCasherShopCode()), lOrgPoints));// 7.2.0 ST1030 修正
    // 7.1.1 ST0154 追加 ここから
    
    // 1.支払方法のチェック
    SICheckValid.checkValid(errors, "支払方法", this.getPayMethodName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    // 6.連絡事項
    SICheckValid.checkValid(errors, "連絡事項", this.getContactMsg(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 1000);
    
    // 8.受注経路の必須チェック
    SICheckValid.checkValid(errors, "受注経路", this.getOrderRoute(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    // 代引きの時は自宅のみしか配送できない。 7.3.0 PI-NES0501 削除
    /*
     * if(this.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CASH)){ SIOrderDelivery lOrderDelivery=new SIOrderDelivery(); Collection
     * lDeliveryColl=SICartDetail.getDeliveryCollection(lRequest,this.getShopCode()); Iterator lDeliveryIta = lDeliveryColl.iterator(); while (lDeliveryIta.hasNext()){
     * lOrderDelivery=(SIOrderDelivery)lDeliveryIta.next(); if(!lOrderDelivery.getAddressCode().equals("0")){ errors.addError(new
     * SICustomError("manager.app.paymethod.cash",this.getPayMethodName())); //7.2.0 ST1030 追加 ここから this.setPayMethodNameNoEncode(this.getPayMethodNameBack()); //7.2.0 ST1030 追加
     * ここまで break; } } }
     */
    
    // 2.配送希望日のチェック
    while (lNameIta.hasNext()) {
      lName = (String) lNameIta.next();
      if (lName.startsWith(SIConfig.SIPREFIX_CASHER_DELIVERY_YEAR)) {
        lDate = getDate(lName);
        if (hasError == false && SICheckValid.checkValid(errors, "配送希望日時", lDate, SICheckDataConf.SICHECK_DATA_DATE_TYPE) == false) {// 7.2.0 ST1077 修正
          hasError = true;
        }
        
        // 7.2.0 ST1030 修正（修正時には過去日付でもOK）
        if (hasError == false && !updMode
            && SICheckValid.checkValid(errors, "配送希望日", "今日", lDate, lDateTime.getFullDate(), SICheckDataConf.SICHECK_DATA_DATE_GREATER_TYPE) == false) {// 7.2.0 ST1077 修正
          hasError = true;
        }
      }
    }
    
    // 3.ポイント使用額のチェック
    if (!SICheckValid.checkValid(errors, "ポイント使用額", this.getSumByPoint(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) {
      this.setSumByPoint("0");
    }
    // 値引金額のチェック
    if (!SICheckValid.checkValid(errors, "値引金額", this.getSumOfG(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)) {
      this.setSumOfG("0");
    }
    
    if (errors.isEmpty()) {
      // 7.2.0 ST1030 修正ここから
      // 代引きの時は購入金額が３０万円超はできない。
      if (this.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CASH) && this.getPayMethodName().startsWith(SIFlagConf.SIFLAG_PAYMENTFLG_CASH_NAME)) {
        if (SIUtil.isNotNull(this.getSumOfF())) {
          if (Long.parseLong(this.getSumOfF()) > 300000) {
            errors.addError(new SICustomError("manager.app.paymethod.cash.check"));
          }
        }
      }
      // 4.ポイント残高（使用可能なポイントの最大数）を超えるチェック
      if (!this.getSumOfE().equals(this.getMaxPoint()) && !this.getPointEnableFlg().equals("2")) {
        SICheckValid.checkValid(errors, "ポイント使用額", "ポイント残高", this.getSumOfE(), this.getMaxPoint(), SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
      }
      // 値引金額の妥当性チェック（商品合計金額＋送料合計金額−ポイント使用額−値引金額 >= 0）
      //if (!this.getSumOfG().equals("0") && !this.getSumOfG().equals(SIUtil.sub_LL(this.getSumOfD(), this.getSumOfE()))) {
      if (!this.getSumOfG().equals("0") && !this.getSumOfG().equals(SIUtil.sub_LL(SIUtil.sub_LL(this.getSumOfD(), this.getSumOfE()), this.getSumOfH()))) {
        //SICheckValid.checkValid(errors, "値引金額", "小計金額−ポイント使用額", this.getSumOfG(), SIUtil.sub_LL(this.getSumOfD(), this.getSumOfE()), SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
        SICheckValid.checkValid(errors, "値引金額", "小計金額−ポイント使用額", this.getSumOfG(), SIUtil.sub_LL(SIUtil.sub_LL(this.getSumOfD(), this.getSumOfE()), this.getSumOfH()), SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
      }
      // 7.2.0 ST1030 修正ここまで
      
      // 5.カード情報
      if (getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD) && "0".equals(this.getReAuthFlg()) && payMethodValidate) {//
        SICheckValid.checkValid(errors, "カード番号", this.getCardNo(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, "有効期限の月", this.getCardExpiredMonth(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, "有効期限の年", this.getCardExpiredYear(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        /*
        SICheckValid.checkValid(errors, "名義人", this.getCustNameOfCard(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        if (SICheckUtil.isAlphaDigit2(this.getCustNameOfCard())==false){
          errors.addError(new SICustomError("manager.message.freeword","「名義人」は、半角英数で入力してください。"));
        }
        */
        SICheckValid.checkValid(errors, "セキュリティコード", this.getSecurityCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      }
      // 7.2.0 ST0300 追加 ここから
      else if (getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS) && payMethodValidate) {
        SICheckValid.checkValid(errors, "お客様名　姓", this.getFamilyName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ZENKAKU_ONLY_TYPE);
        SICheckValid.checkValid(errors, "お客様名　姓", this.getFamilyName(), SICheckDataConf.SICHECK_DATA_WORD_LEN_WITHIN_TYPE, 10);
        
        SICheckValid.checkValid(errors, "お客様名　名", this.getFirstName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ZENKAKU_ONLY_TYPE);
        SICheckValid.checkValid(errors, "お客様名　名", this.getFirstName(), SICheckDataConf.SICHECK_DATA_WORD_LEN_WITHIN_TYPE, 10);
      }
      // 7.2.0 ST0300 追加 ここまで
      
      // 7.送料合計のチェック
      SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
      Collection lDeliveryColl = SICartDetail.getDeliveryCollection(lRequest, this.getShopCode());
      Iterator lDeliveryIta = lDeliveryColl.iterator();
      while (lDeliveryIta.hasNext()) {
        lOrderDelivery = (SIOrderDelivery) lDeliveryIta.next();
        if (Long.parseLong(lOrderDelivery.getDeliveryFee()) > SIConfig.SIFEE_MAX_VALUE) {
          errors.addError(new SICustomError("input.data.check.deliveryFee"));
          break;
        }
      }
      
      // 送料調整額チェック
      if (SIUtil.isNotNull(getDiscountDeliveryFee()) && SIUtil.isNotNull(this.getSumOfB())) {
        if (SICheckValid.checkValid(errors, "送料調整額", getDiscountDeliveryFee(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
            && SICheckValid.checkValid(errors, "送料調整額", getDiscountDeliveryFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
          if (Integer.parseInt(getDiscountDeliveryFee()) + Integer.parseInt(this.getSumOfB()) < 0) {// 総送料がマイナスにならないため
            errors.addError(new SICustomError("input.data.discountDeliveryFee.negative"));
          }
        } else {
          setDiscountDeliveryFee("0");
        }
      } else {
        setDiscountDeliveryFee("0");
      }
      // 手数料調整額チェック
      if (SIUtil.isNotNull(getDiscountFee())) {
        if (SICheckValid.checkValid(errors, "手数料調整額", getDiscountFee(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
            && SICheckValid.checkValid(errors, "手数料調整額", getDiscountFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
          if (SIUtil.isNotNull(getFeeIncTax()) && (Integer.parseInt(getDiscountFee()) + Integer.parseInt(getFeeIncTax()) < 0)) {// 総手数料がマイナスにならないため
            errors.addError(new SICustomError("input.data.discountFee.negative"));
          }
        } else {
          setDiscountFee("0");
        }
      } else {
        setDiscountFee("0");
      }
      SILogin manLogin = SIHTMLUtil.getLogin(lRequest);
      if (this.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD)&&"0".equals(manLogin.getMngOrderCard())) {
        try {
          String total = SIDBUtil.getFirstData(lConnection, "SELECT ordertotal FROM orderpaymentvw WHERE ordercode="+SIDBUtil.SQL2Str(getOrderCode()));
          if (SIUtil.isNotNull(total) && !total.equals(getSumOfF())) {
            errors.addError(new SICustomError("manager.message.freeword","合計金額が変わるカード決済受注の修正は出来ません"));
          }
        } catch(Exception e) {
          e.printStackTrace();
        }
      }
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  /**
   * 支払区分チェック
   * 
   * @param lRequest
   * @return
   */
  public boolean validatePayment(HttpServletRequest lRequest) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    SICustomError err;
    
    // 代引きの時は自宅のみしか配送できない。 7.3.0 PI-NES0501 削除
    /*
     * if(this.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CASH)){ SIOrderDelivery lOrderDelivery=new SIOrderDelivery(); Collection
     * lDeliveryColl=SICartDetail.getDeliveryCollection(lRequest,this.getShopCode()); Iterator lDeliveryIta = lDeliveryColl.iterator(); while (lDeliveryIta.hasNext()){
     * lOrderDelivery=(SIOrderDelivery)lDeliveryIta.next(); if(!lOrderDelivery.getAddressCode().equals("0")){ errors.addError(new
     * SICustomError("manager.app.paymethod.cash",this.getPayMethodName())); //7.2.0 ST1030 追加 ここから this.setPayMethodNameNoEncode(this.getPayMethodNameBack()); //7.2.0 ST1030 追加
     * ここまで break; } } }
     */

    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateRedo(HttpServletRequest lRequest) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    SICustomError err;
    Iterator lNameIta = deliveryDateTimeMap.keySet().iterator();
    
    // 7.2.0 ST1030 修正ここから
    // ポイント使用額のチェック
    SICheckValid.checkValid(errors, "ポイント使用額", this.getSumByPoint(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    // 値引金額のチェック
    SICheckValid.checkValid(errors, "値引金額", this.getSumOfG(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE);
    
    // ポイント残高（使用可能なポイントの最大数）を超えるチェック
    if (errors.isEmpty() && !this.getSumOfE().equals(this.getMaxPoint()) && !this.getPointEnableFlg().equals("2")) {
      SICheckValid.checkValid(errors, "ポイント使用額", "ポイント残高", this.getSumOfE(), this.getMaxPoint(), SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
    }
    // 値引金額の妥当性チェック（商品合計金額＋送料合計金額−ポイント使用額−値引金額 >= 0）
    if (!this.getSumOfG().equals("0") && !this.getSumOfG().equals(SIUtil.sub_LL(this.getSumOfD(), this.getSumOfE()))) {
      SICheckValid.checkValid(errors, "値引金額", "小計金額−ポイント使用額", this.getSumOfG(), SIUtil.sub_LL(this.getSumOfD(), this.getSumOfE()), SICheckDataConf.SICHECK_DATA_VALUE_LESS_TYPE);
    }
    // 7.2.0 ST1030 修正ここまで
    // 送料調整額チェック
    if (SIUtil.isNotNull(getDiscountDeliveryFee()) && SIUtil.isNotNull(this.getSumOfB())) {
      if (SICheckValid.checkValid(errors, "送料調整額", getDiscountDeliveryFee(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
          && SICheckValid.checkValid(errors, "送料調整額", getDiscountDeliveryFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
        if (Integer.parseInt(getDiscountDeliveryFee()) + Integer.parseInt(this.getSumOfB()) < 0) {// 総送料がマイナスにならないため
          errors.addError(new SICustomError("input.data.discountDeliveryFee.negative"));
        }
      } else {
        setDiscountDeliveryFee("0");
      }
    } else {
      setDiscountDeliveryFee("0");
    }
    // 手数料調整額チェック
    if (SIUtil.isNotNull(getDiscountFee())) {
      if (SICheckValid.checkValid(errors, "手数料調整額", getDiscountFee(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE)
          && SICheckValid.checkValid(errors, "手数料調整額", getDiscountFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8)) {
        if (SIUtil.isNotNull(getFeeIncTax()) && (Integer.parseInt(getDiscountFee()) + Integer.parseInt(getFeeIncTax()) < 0)) {// 総手数料がマイナスにならないため
          errors.addError(new SICustomError("input.data.discountFee.negative"));
        }
      } else {
        setDiscountFee("0");
      }
    } else {
      setDiscountFee("0");
    }
    
    if (SIUtil.isNotNull(getCashPrice())) {
      if (!SICheckValid.checkValid(errors, "お預かり金額", getCashPrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) {
        setCashPrice("");
      }
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateDigit(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    SICustomError err;
    Iterator lNameIta = deliveryDateTimeMap.keySet().iterator();
    
    String sumOfA = (String) lUrlParam.getParam("sumOfA");// 7.1.1 ST0236 修正
    
    // 合計金額のチェック
    if (!SICheckUtil.isNumberBetween(sumOfA, 0, 999999999)) errors.addError(new SICustomError("input.data.check.digit"));// 7.2.0 ST0260 修正
    SIReserveCartManager.validate(lRequest, errors);// 予約チェック
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateDigit2(HttpServletRequest lRequest, UIOrderCounter orderCounter) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    SICustomError err;
    Iterator lNameIta = deliveryDateTimeMap.keySet().iterator();
    
    String sumOfA = orderCounter.getSumOfF();
    
    // 合計金額のチェック
    if (!SICheckUtil.isNumberBetween(sumOfA, 0, 999999999)) errors.addError(new SICustomError("input.data.check.digit"));// 7.2.0 ST0260 修正
    SIReserveCartManager.validate(lRequest, errors);// 予約チェック
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  private String getDate(String lDateName) {
    String lYear = "";
    String lMonth = "";
    String lDay = "";
    String lSeq = "";
    if (lDateName.startsWith(SIConfig.SIPREFIX_CASHER_DELIVERY_DATE_TIME)) {
      if (lDateName.startsWith(SIConfig.SIPREFIX_CASHER_DELIVERY_YEAR)) {
        lSeq = lDateName.substring(SIConfig.SIPREFIX_CASHER_DELIVERY_YEAR.length());
      } else if (lDateName.startsWith(SIConfig.SIPREFIX_CASHER_DELIVERY_MONTH)) {
        lSeq = lDateName.substring(SIConfig.SIPREFIX_CASHER_DELIVERY_MONTH.length());
      } else if (lDateName.startsWith(SIConfig.SIPREFIX_CASHER_DELIVERY_DAY)) {
        lSeq = lDateName.substring(SIConfig.SIPREFIX_CASHER_DELIVERY_DAY.length());
      }
      lYear = getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_YEAR + lSeq);
      lMonth = getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_MONTH + lSeq);
      lDay = getDeliveryDateTime(SIConfig.SIPREFIX_CASHER_DELIVERY_DAY + lSeq);
      
      log.debug("getDate:lDateName=" + lDateName + ",lYear=" + lYear + ",lMonth=" + lMonth + ",lDay=" + lDay);
      
      if (SIUtil.isNotNull(lYear) || SIUtil.isNotNull(lMonth) || SIUtil.isNotNull(lDay)) { return lYear + "/" + lMonth + "/" + lDay; }
    }
    return "";
  }
  
  /**
   * @return orderRoute を戻します。
   */
  public String getOrderRoute() {
    return orderRoute;
  }
  
  /**
   * @param orderRoute orderRoute を設定。
   */
  public void setOrderRoute(String orderRoute) {
    this.orderRoute = orderRoute;
  }
  
  public String getReAuthFlg() {
    return reAuthFlg;
  }
  
  public void setReAuthFlg(String reAuthFlg) {
    if (SIUtil.isNull(reAuthFlg)) reAuthFlg = "0";
    this.reAuthFlg = reAuthFlg;
  }
  
  public String getReUseFlg() {
    return reUseFlg;
  }
  
  public void setReUseFlg(String reUseFlg) {
    if (SIUtil.isNull(reUseFlg)) reUseFlg = "0";
    this.reUseFlg = reUseFlg;
  }
}
