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

import java.sql.*;
import java.util.*;

import javax.servlet.http.*;

import org.apache.log4j.Category;
import jp.co.sint.database.*;
import jp.co.sint.tools.*;
import jp.co.sint.config.*;
import jp.co.sint.basic.*;
import jp.co.sint.tools.SIURLParameter;// 7.1.1 ST0236 追加

/**
 * @version $Id : UIRegShop.java,v 1.0 2003/08/06 Exp $
 * @author : Jinwang Chen <br>
 * Description : ショップ管理の編集画面に対する管理 beans
 * <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/08/06 Original
 */

public class UIRegCust extends SICust {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // 戻るURL
  private String backURL = "";
  // 次へ進むURL
  private String nid = "";
  
  // 編集用BEAN
  private UIPurchaseHistoryMemo memoBean = new UIPurchaseHistoryMemo();
  
  private String firstMemo;
  
  private String firstMemoStatus;
  
  private String custCodeBefore;
  
  private String custNameBefore;
  
  private String catalogRequest = "";
  
  private String directMailRequest = "";
  
  public UIRegCust() {
    backURL = "";
    nid = "";
    firstMemo = "";
    firstMemoStatus = "";
    custCodeBefore = "";
    custNameBefore = "";
    memoBean = new UIPurchaseHistoryMemo();
  }
  
  public void setBackUrl(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.backURL = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  public void setNextUrlTxt(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.nid = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  public void setFirstMemo(String firstMemo) {
    if (SIUtil.isNull(firstMemo)) firstMemo = "";
    this.firstMemo = SIUtil.changeTo(firstMemo.trim(), encode);
  }
  
  public void setFirstMemoStatus(String firstMemoStatus) {
    if (SIUtil.isNull(firstMemoStatus)) firstMemoStatus = "";
    this.firstMemoStatus = SIUtil.changeTo(firstMemoStatus.trim(), encode);
  }
  
  public void setCustCodeBefore(String custCodeBefore) {
    if (SIUtil.isNull(custCodeBefore)) custCodeBefore = "";
    this.custCodeBefore = SIUtil.changeTo(custCodeBefore.trim(), encode);
  }
  
  public void setCustNameBefore(String custNameBefore) {
    if (SIUtil.isNull(custNameBefore)) custNameBefore = "";
    this.custNameBefore = SIUtil.changeTo(custNameBefore.trim(), encode);
  }
  
  public void setCatalogRequest(String catalogRequest) {
    if (SIUtil.isNull(catalogRequest)) catalogRequest = "";
    this.catalogRequest = SIUtil.changeTo(catalogRequest.trim(), encode);
  }
  
  public void setDirectMailRequest(String directMailRequest) {
    if (SIUtil.isNull(directMailRequest)) directMailRequest = "";
    this.directMailRequest = SIUtil.changeTo(directMailRequest.trim(), encode);
  }
  
  public String getBackURL() {
    return backURL;
  }
  
  public String getNextUrlTxt() {
    return nid;
  }
  
  public String getFirstMemo() {
    return firstMemo;
  }
  
  public String getFirstMemoStatus() {
    return firstMemoStatus;
  }
  
  public String getCustCodeBefore() {
    return custCodeBefore;
  }
  
  public String getCustNameBefore() {
    return custNameBefore;
  }
  
  public String getCatalogRequest(){
    return catalogRequest;
  }
  
  public String getDirectMailRequest(){
    return directMailRequest;
  }
  
  /**
   * init 入力したデータから、このbeansを設定します。
   * 
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam) {// 7.1.1 ST0236 修正
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    // 7.1.1 ST0236 修正 ここから
    super.init(lRequest, lUrlParam);
    String lAct = (String) lUrlParam.getParam("actionNameTxt");
    if (lAct == null) lAct = "";
    if (!lAct.equals(SIConfig.SIACTION_NEW)) {
      this.setCustCode((String) lUrlParam.getParam("custCode"));
      this.setMemberLevelCode((String) lUrlParam.getParam("memberLevelCode"));
      this.setCustCompanyFlg((String) lUrlParam.getParam("custCompanyFlg"));
      this.setCustName((String) lUrlParam.getParam("custName"));
      this.setCustPronName((String) lUrlParam.getParam("custPronName"));
      this.setEmail((String) lUrlParam.getParam("email"));
      this.setEmailCon((String) lUrlParam.getParam("emailCon"));
      this.setPassword((String) lUrlParam.getParam("password"));
      this.setPasswordCon((String) lUrlParam.getParam("passwordCon"));
      this.setPWQuestion((String) lUrlParam.getParam("pWQuestion"));
      this.setPWAnswer((String) lUrlParam.getParam("pWAnswer"));
      this.setPostCode1((String) lUrlParam.getParam("postCode1"));
      this.setPostCode2((String) lUrlParam.getParam("postCode2"));
      this.setAddress1((String) lUrlParam.getParam("address1"));
      this.setAddress2((String) lUrlParam.getParam("address2"));
      this.setAddress3((String) lUrlParam.getParam("address3"));
      this.setCompanyName((String) lUrlParam.getParam("companyName"));
      // 7.3.0 PI-NES5051 追加
      this.setCorporationName((String) lUrlParam.getParam("corporationName"));
      this.setStoreTel((String) lUrlParam.getParam("storeTel"));
      this.setTel((String) lUrlParam.getParam("tel"));
      this.setFax((String) lUrlParam.getParam("fax"));
      this.setPayMethodCode((String) lUrlParam.getParam("payMethodCode"));
      // 7.1.1 ST0027 削除 this.setBirthDate(lRequest.getParameter("birthDateYear"),(String)lUrlParam.getParam("birthDateMonth"),(String)lUrlParam.getParam("birthDateDay"));//7.0.1追加
      this.setBirthDateYear((String) lUrlParam.getParam("birthDateYear"));
      this.setBirthDateMonth((String) lUrlParam.getParam("birthDateMonth"));
      this.setBirthDateDay((String) lUrlParam.getParam("birthDateDay"));
      this.setSex((String) lUrlParam.getParam("sex"));
      this.setJob((String) lUrlParam.getParam("job"));
      this.setHobby(lRequest.getParameterValues("hobby"));
      this.setMaker(lRequest.getParameterValues("maker"));
      this.setHowToKnow((String) lUrlParam.getParam("howToKnow"));
      this.setNewMailFlg((String) lUrlParam.getParam("newMailFlg"));
      this.setOtherMenu((String) lUrlParam.getParam("otherMenu"));
      // 7.2.0 ST0330 追加 ここから
      this.setCurrentPassword((String) lUrlParam.getParam("current_password"));
      // 7.2.0 ST0330 追加 ここまで
      // 7.3.0 ST2027 追加 ここから
      if (lUrlParam.getParam("intDelFlg") != null) {
        this.setDelFlg(Integer.parseInt((String) lUrlParam.getParam("intDelFlg")));
      } else {
        this.setDelFlg(0);
      }
      // 7.3.0 ST2027 追加 ここまで
      this.setEMailOld((String) lUrlParam.getParam("emailold")); // 7.3.0 ST2026 追加
      // 7.3.0 ST2028 追加 ここから
      if (lUrlParam.getParam("intLoginErrCount") != null && lUrlParam.getParam("intLoginErrCount") != "") {
        this.setLoginErrCount((String) lUrlParam.getParam("intLoginErrCount"));
      } else {
        this.setLoginErrCount(new String("0"));
      }
      // 7.3.0 ST2028 追加 ここまで
      if (lUrlParam.getParam("registRoute") != null) {
        this.setRegistRoute((String) lUrlParam.getParam("registRoute"));
      } else if (SIURLMap.isSmartPhone(lRequest)) {
        this.setRegistRoute("8");
      } else {
        this.setRegistRoute("0");
      }
      this.setCharge((String) lUrlParam.getParam("charge"));
      this.setSalonUrl((String)lUrlParam.getParam("salonUrl"));
      this.setReceivableFlg((String) lUrlParam.getParam("receivableFlg"));
      this.setIntroductionMailFlg((String) lUrlParam.getParam("introductionMailFlg"));
      this.setMemberLevelFixedFlg((String) lUrlParam.getParam("memberLevelFixedFlg"));
      this.setNoDeliveryFlg((String) lUrlParam.getParam("noDeliveryFlg"));
      this.setNoPointFlg((String) lUrlParam.getParam("noPointFlg"));
      this.setHairCosmeFlg((String) lUrlParam.getParam("hairCosmeFlg"));
      this.setMailStatus((String) lUrlParam.getParam("mailStatus"));
      this.setOtherReason((String) lUrlParam.getParam("otherReason"));
      this.setCatalogRequest((String) lUrlParam.getParam("catalogRequest"));
      String catalogRequest = "0";
      if (SIUtil.isNotNull((String) lUrlParam.getParam("catalogType1")) && SICheckUtil.isDigit((String) lUrlParam.getParam("catalogType1"))) {
        catalogRequest = SIUtil.add(catalogRequest, (String) lUrlParam.getParam("catalogType1"));
      }
      if (SIUtil.isNotNull((String) lUrlParam.getParam("catalogType2")) && SICheckUtil.isDigit((String) lUrlParam.getParam("catalogType2"))) {
        catalogRequest = SIUtil.add(catalogRequest, (String) lUrlParam.getParam("catalogType2"));
      }
      if (!"0".equals(catalogRequest)) this.setCatalogRequest(catalogRequest);
    }
    // 7.1.1 ST0236 修正 ここまで
    setFirstMemo((String)lUrlParam.getParam("firstMemo"));
    setFirstMemoStatus((String)lUrlParam.getParam("firstMemoStatus"));
    setCustCodeBefore((String)lUrlParam.getParam("custCodeBefore"));
    
    this.setNoRequestFlg((String) lUrlParam.getParam("noRequestFlg"));
    this.setOpeningFlg((String) lUrlParam.getParam("openingFlg"));
    this.setOpeningArea((String) lUrlParam.getParam("openingArea"));
    this.setOpeningPlanDateMonth((String) lUrlParam.getParam("openingPlanDateMonth"));
    this.setOpeningPlanDateYear((String) lUrlParam.getParam("openingPlanDateYear"));
    this.setSupportMenu(lRequest.getParameterValues("supportMenu"));
    this.setDirectMailRequest((String) lUrlParam.getParam("directMailRequest"));
    this.setCompanyPronName((String) lUrlParam.getParam("companyPronName"));
    this.setCorporationPronName((String) lUrlParam.getParam("corporationPronName"));
    
    if (getActionNameTxt().equals(SIConfig.SIACTION_ZIPDIC) && SIConfig.SIZIP != null) {// 郵便番号から県名と市区町村名を検索
      String lEncode = this.getEncode();// 既存のコードの保存
      this.setEncode(SIConfig.SIENCODE_NONE);
      String lResult = SIConfig.SIZIP.getPrefectureName(getPostCode1(), getPostCode2());// 県名の検索
      if (SIUtil.isNotNull(lResult)) this.setAddress1(lResult);// 県名の設定
      else this.setAddress1("");
      lResult = SIConfig.SIZIP.getAddressName(getPostCode1(), getPostCode2());// 市区町村名の検索
      if (SIUtil.isNotNull(lResult)) this.setAddress2(lResult);// 市区町村名の設定
      else this.setAddress2("");
      this.setEncode(lEncode);// 既存のコードの回復
    }
  }
  
  public void initNew(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);
    this.setEmail((String) lUrlParam.getParam("email"));
    this.setEmailCon((String) lUrlParam.getParam("emailCon"));
    this.setPassword((String) lUrlParam.getParam("password"));
    this.setPasswordCon((String) lUrlParam.getParam("passwordCon"));
    this.setPWQuestion((String) lUrlParam.getParam("pWQuestion"));
    this.setPWAnswer((String) lUrlParam.getParam("pWAnswer"));
  }
  
  // 7.1.1 ST0236 修正 ここから
  public void initUrl(SIURLParameter lUrlParam) {
    this.setBackUrl((String) lUrlParam.getParam("backURL"));
    this.setNextUrlTxt((String) lUrlParam.getParam("nid"));
  }
  
  // 7.1.1 ST0236 修正 ここまで
  
  /**
   * validate 入力したデータをチェックします。 不正なデータがある場合、エラーをオブジェクトに格納します。 そのオブジェクトは、エラーメッセージとして画面に表示されます。
   * 
   * @param HttpServletRequest
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest) {
    return validate(lRequest, null);
  }
  
  /**
   * validate 入力したデータをチェックします。 不正なデータがある場合、エラーをオブジェクトに格納します。 そのオブジェクトは、エラーメッセージとして画面に表示されます。
   * 
   * @param HttpServletRequest ，Connection
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest, Connection lConnection) {
    return validate(lRequest, lConnection, false, true);// 7.1.1 ST0162 修正
  }
  
  public boolean validate(HttpServletRequest lRequest, Connection lConnection, boolean lCsvCheck) {
    // 7.1.1 ST0162 修正 ここから
    return validate(lRequest, lConnection, false, false);
  }
  
  /**
   * validate フロントと管理側のチェックをそれぞれに分けるために、新しいメソッドをつくる。
   * 
   * @param HttpServletRequest ，Connection
   * @param lCsvCheck csv取込フラグ
   * @param lFrontFlg フロントフラグ
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest, Connection lConnection, boolean lCsvCheck, boolean lFrontFlg) {
    String lCustName = "顧客名";
    String lCustPronName = "顧客名カナ";
    if (lFrontFlg) {
      lCustName = "お客様名（個人名）";
      lCustPronName = "お客様名カナ";
    }
    // 7.1.1 ST0162 修正 ここまで
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    SICustomErrors errors2 = new SICustomErrors();
    StringBuffer lSqlBuf = new StringBuffer();
    
    if (lCsvCheck && !getEditModeTxt().equals(SIConfig.SIEDIT_MODE_INSERT)) {
      SICheckValid.checkValid(errors, "顧客コード", this.getCustCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "顧客コード", this.getCustCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
      if (SIUtil.isNotNull(this.getCustCode())) {
        lSqlBuf = new StringBuffer("SELECT CustCode FROM CustTbl WHERE CustCode=").append(SIDBUtil.SQL2Str(getCustCode()));
        SICheckValid.checkExist(errors, lConnection, "顧客コード", lSqlBuf.toString());
      }
    }
    
    SICheckValid.checkValid(errors, "個人・法人区分", this.getCustCompanyFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "個人・法人区分", this.getCustCompanyFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_CUST_COMPANY_INX);
    }
    
    SICheckValid.checkValid(errors, "会員種別", this.getMemberLevelCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "会員種別", this.getMemberLevelCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "会員種別", this.getMemberLevelCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      lSqlBuf = new StringBuffer("SELECT  memberLevelCode FROM MemberLevelMTbl WHERE memberLevelCode=");
      lSqlBuf.append(SIDBUtil.SQL2Str(this.getMemberLevelCode()));
      SICheckValid.checkExist(errors, lConnection, "会員種別", lSqlBuf.toString());
    }
    
    // 7.1.1 ST0162 修正 ここから
    SICheckValid.checkValid(errors, lCustName, this.getCustName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, lCustName, this.getCustName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 40);// 7.2.0 ST0670 修正
    
    SICheckValid.checkValid(errors, lCustPronName, this.getCustPronName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ZENKAKU_KANA_TYPE);
    SICheckValid.checkValid(errors, lCustPronName, this.getCustPronName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    // 7.1.1 ST0162 修正 ここまで
    
    SICheckValid.checkValid(errors, "メールアドレス", this.getEmail(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors, "メールアドレス", this.getEmail(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    
    // 7.2.0 ST0330 修正 ここから
    // フロントからの更新時にはチェック不要
    if (getEditModeTxt().equals(SIConfig.SIEDIT_MODE_INSERT) || !lFrontFlg) {
      SICheckValid.checkValid(errors, "パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
      // 7.3.0 ST2030 修正 ここから
      // SICheckValid.checkValid(errors, "パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
      SICheckValid.checkValid(errors, "パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, SIConfig.SIMinimumPassword, 16);
      // 7.3.0 ST2030 修正 ここまで
      
      SICheckValid.checkValid(errors, "パスワードリマインダ質問", this.getPWQuestion(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
      if (SIUtil.isNotNull(getPWQuestion())) {
        SICheckValid.checkValid(errors, "パスワードリマインダ回答", this.getPWAnswer(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      }
      SICheckValid.checkValid(errors, "パスワードリマインダ回答", this.getPWAnswer(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    if(!lFrontFlg){
      SICheckValid.checkValid(errors, "メールステータス", this.getMailStatus(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      if("11".equals(this.getMailStatus())) {
        SICheckValid.checkValid(errors, "その他の理由", this.getOtherReason(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      }
    }else{
      this.setMailStatus("0");
    }
    // 7.2.0 ST0330 修正 ここまで
    
    // 7.1.1 ST0162 修正 ここから
    SICheckValid.checkValid(errors, "郵便番号(上3桁)", this.getPostCode1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "郵便番号(下4桁)", this.getPostCode2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (this.getPostCode1().toString().trim().length() != 3 || this.getPostCode2().toString().trim().length() != 4) {
      errors.addError(new SICustomError("manager.app.postcode.form"));
    }
    
    SICheckValid.checkValid(errors, "住所1（都道府県）", this.getAddress1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (lCsvCheck && SIUtil.isNotNull(this.getAddress1())) {
      lSqlBuf = new StringBuffer("SELECT PrefectureName FROM PrefectureMTbl WHERE PrefectureName=");
      lSqlBuf.append(SIDBUtil.SQL2Str(this.getAddress1()));
      SICheckValid.checkExist(errors, lConnection, "住所1（都道府県）", lSqlBuf.toString());
    }
    
    SICheckValid.checkValid(errors, "住所2(市区町村・番地)", this.getAddress2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "住所2(市区町村・番地)", this.getAddress2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "住所3(ビル名・階など)", this.getAddress3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    // 7.1.1 ST0162 修正 ここまで
    
    boolean postCodeError = false;
    if (lFrontFlg&&SIUtil.isNotNull(this.getPostCode1())&&SIUtil.isNotNull(this.getPostCode2())&&SIUtil.isNotNull(this.getAddress1())&&SIUtil.isNotNull(this.getAddress2())) {
      String lEncode = this.getEncode();// 既存のコードの保存
      this.setEncode(SIConfig.SIENCODE_NONE);
      String lResult = SIConfig.SIZIP.getPrefectureName(getPostCode1(), getPostCode2());// 県名の検索
      if (!this.getAddress1().equals(lResult)) postCodeError = true;
      lResult = SIConfig.SIZIP.getAddressName(getPostCode1(), getPostCode2());// 市区町村名の検索
      if (!this.getAddress2().startsWith(lResult)) postCodeError = true;
      this.setEncode(lEncode);// 既存のコードの回復
    }
    if (postCodeError) {
      errors.addError(new SICustomError("manager.message.freeword","郵便番号と住所が一致しません。お手数ですが再度入力して下さい。"));
    }
    
    SICheckValid.checkValid(errors, "サロン名・学校名", this.getCompanyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    // 7.3.0 PI-NES5051 追加 ここから
    SICheckValid.checkValid(errors, "会社名・屋号", this.getCorporationName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    SICheckValid.checkValid(errors, "連絡先電話番号１", this.getStoreTel(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (!SICheckValid.checkValid(errors2, "連絡先電話番号１", this.getStoreTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) errors
        .addError(new SICustomError("input.data.tel2", "連絡先電話番号１"));
    else SICheckValid.checkValid(errors, "連絡先電話番号１", this.getStoreTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, 9, 16);
    // 7.3.0 PI-NES5051 追加 ここまで
    
    if (!SICheckValid.checkValid(errors2, "連絡先電話番号２", this.getTel(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) errors.addError(new SICustomError("input.data.tel2", "連絡先電話番号２"));
    else SICheckValid.checkValid(errors, "連絡先電話番号２", this.getTel(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, 9, 16);
    
    if (!SICheckValid.checkValid(errors2, "連絡先FAX番号", this.getFax(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)) errors.addError(new SICustomError("input.data.tel2", "連絡先FAX番号"));
    else SICheckValid.checkValid(errors, "連絡先FAX番号", this.getFax(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, 9, 16);
    /*
    if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_TOGETHER) {
      SICheckValid.checkValid(errors, "お支払い方法", this.getPayMethodCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    */
    SICheckValid.checkValid(errors, "お支払い方法", this.getPayMethodCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "お支払い方法", this.getPayMethodCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    if (lCsvCheck && SIUtil.isNotNull(this.getPayMethodCode())) {
      lSqlBuf = new StringBuffer("SELECT PaymethodCode FROM PayMethodMTbl WHERE MallShopCode=");
      lSqlBuf.append(SIDBUtil.SQL2Str(SIConfig.SIMALL.getMallShopCode(), " "));
      lSqlBuf.append("AND PaymethodCode=").append(SIDBUtil.SQL2Str(this.getPayMethodCode()));
      SICheckValid.checkExist(errors, lConnection, "お支払い方法", lSqlBuf.toString());
    }
    
    // 7.4.0 ST2056 追加 ここから
    if (!lCsvCheck) {
      SICheckValid.checkValid(errors, "生年月日(年)", this.getBirthDateYear(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    }
    // 7.4.0 ST2056 追加 ここまで
    SICheckValid.checkValid(errors, "生年月日", this.getBirthDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    
    // 生年月日現在より未来。
    try {
      String today = (new SIDateTime()).getFullDate();
      if (!SICheckUtil.dateEqual(this.getBirthDate(), today)) {
        SICheckValid.checkValid(errors, "生年月日", "今日", this.getBirthDate(), today, SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
    } catch (Exception e) {}
    
    SICheckValid.checkValid(errors, "性別", this.getSex(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "性別", this.getSex(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_SEX_INX);
    }
    
    // 顧客属性0（職業）
    SICheckValid.checkValid(errors, SIConfig.SIMALL.getCustAttribute0(), this.getJob(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, SIConfig.SIMALL.getCustAttribute0(), this.getJob(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);// 7.2.0 ST0539 修正
    if (lCsvCheck && SIUtil.isNotNull(this.getJob())) {
      lSqlBuf = new StringBuffer("SELECT attrName FROM CustAttrMtbl ");
      lSqlBuf.append("WHERE AttrFlag=0 AND attrName=").append(SIDBUtil.SQL2Str(this.getJob()));
      SICheckValid.checkExist(errors, lConnection, SIConfig.SIMALL.getCustAttribute0(), lSqlBuf.toString());// 7.2.0 ST0539 修正
    }
    
    if (!lCsvCheck) {
      boolean otherMenuFlg = false;
      // 顧客属性2（施術メニュー）
      for (int i = 0; i < this.getHobby().length; i++) {
        SICheckValid.checkValid(errors, SIConfig.SIMALL.getCustAttribute2(), this.getHobby()[i], SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);// 7.2.0 ST0539 修正
        if (this.getHobby()[i].equals("その他")) {
          SICheckValid.checkValid(errors, "その他メニューの内容", this.getOtherMenu(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
          otherMenuFlg = true;
        }
      }
      if (!otherMenuFlg) this.setOtherMenu(""); // その他未選択時はメニュー内訳を消去
    }
    
    // 顧客属性1（従業員数）
    SICheckValid.checkValid(errors, SIConfig.SIMALL.getCustAttribute1(), this.getHowToKnow(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);// 7.2.0 ST0539 修正
    if (lCsvCheck && SIUtil.isNotNull(this.getHowToKnow())) {
      lSqlBuf = new StringBuffer("SELECT attrName FROM CustAttrMtbl ");
      lSqlBuf.append("WHERE AttrFlag=1 AND attrName=").append(SIDBUtil.SQL2Str(this.getHowToKnow()));
      SICheckValid.checkExist(errors, lConnection, SIConfig.SIMALL.getCustAttribute0(), lSqlBuf.toString());// 7.2.0 ST0539 修正
    }
    
    SICheckValid.checkValid(errors, "メールマガジン", this.getNewMailFlg(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "メールマガジン", this.getNewMailFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_NEW_MAIL_INX);
    }
    
    if (SIUtil.isNotNull(this.getOpeningFlg())&&"1".equals(this.getOpeningFlg())){
      if (SICheckValid.checkValid(errors, "オープン予定時期", this.getOpeningPlanDateYear()+this.getOpeningPlanDateMonth(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE)){
        SICheckValid.checkValid(errors, "オープン予定時期", this.getOpeningPlanDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
      }
      SICheckValid.checkValid(errors, "出店エリア", this.getOpeningArea(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if (lFrontFlg) {
      if ((SIUtil.isNull(this.getOpeningFlg())||"0".equals(this.getOpeningFlg()))&&SIUtil.isNull(this.getCompanyName())&&SIUtil.isNull(this.getCorporationName())) {
        errors.addError(new SICustomError("manager.message.freeword","開業予定の方でない場合は「サロン名・会社名」か「会社名・屋号」を必ず入力して下さい。"));
      }
      if (SIUtil.isNotNull(this.getCompanyName())) {
        SICheckValid.checkValid(errors, "サロン名・学校名カナ", this.getCompanyPronName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ZENKAKU_KANA_TYPE);
        SICheckValid.checkValid(errors, "サロン名・学校名カナ", this.getCompanyPronName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
      }
      if (SIUtil.isNotNull(this.getCorporationName())) {
        SICheckValid.checkValid(errors, "会社名・屋号カナ", this.getCorporationPronName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ZENKAKU_KANA_TYPE);
        SICheckValid.checkValid(errors, "会社名・屋号カナ", this.getCorporationPronName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
      }
    }
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
      // 重複レコードの存在でかどうかをチェックします
      String lSqlStatement = "SELECT Email FROM custtbl WHERE Email=" + SIDBUtil.SQL2Str(this.getEmail(), " ");
      SICheckValid.checkDuplicate(errors, lConnection, "メールアドレス", lSqlStatement);
    } else {
      // 重複メールの存在でかどうかをチェックします
      String lSqlStatement = "SELECT Email FROM custtbl WHERE custcode<>" + SIDBUtil.SQL2Str(this.getCustCode(), " ");
      lSqlStatement = lSqlStatement + "AND Email=" + SIDBUtil.SQL2Str(this.getEmail());
      SICheckValid.checkDuplicate(errors, lConnection, "メールアドレス", lSqlStatement);
    }
    SICheckValid.checkValid(errors, "ログインエラー回数", this.getLoginErrCount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE); // 7.3.0 ST2028 追加
    
    SICheckValid.checkValid(errors, "サロンホームページURL", this.getSalonUrl(), SICheckDataConf.SICHECK_DATA_URL_TYPE);
    
    if (!lFrontFlg && "1".equals(this.getReceivableFlg()) && SIUtil.isNull(this.getCharge()))
        errors.addError(new SICustomError("manager.message.error.nocharge"));
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  /**
   * validateAccount 入力したアカウント情報（アドレスとパスワード）をチェックします。
   * 
   * @param HttpServletRequest ，Connection
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validateAccount(HttpServletRequest lRequest, Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "メールアドレス", this.getEmail(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors, "メールアドレス", this.getEmail(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    // 更新時にはチェック不要
    if (getEditModeTxt().equals(SIConfig.SIEDIT_MODE_INSERT)) {
      SICheckValid.checkValid(errors, "パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, SIConfig.SIMinimumPassword, 16);
      
      SICheckValid.checkValid(errors, "パスワードリマインダ質問", this.getPWQuestion(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
      if (SIUtil.isNotNull(getPWQuestion())) {
        SICheckValid.checkValid(errors, "パスワードリマインダ回答", this.getPWAnswer(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      }
      SICheckValid.checkValid(errors, "パスワードリマインダ回答", this.getPWAnswer(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
      // 重複レコードの存在でかどうかをチェックします
      String lSqlStatement = "SELECT Email FROM custtbl WHERE Email=" + SIDBUtil.SQL2Str(this.getEmail(), " ");
      SICheckValid.checkDuplicate(errors, lConnection, "メールアドレス", lSqlStatement);  
    } else {
      // 重複メールの存在でかどうかをチェックします
      String lSqlStatement = "SELECT Email FROM custtbl WHERE custcode<>" + SIDBUtil.SQL2Str(this.getCustCode(), " ");
      lSqlStatement = lSqlStatement + "AND Email=" + SIDBUtil.SQL2Str(this.getEmail());
      SICheckValid.checkDuplicate(errors, lConnection, "メールアドレス", lSqlStatement);
    }
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateAccount2(HttpServletRequest lRequest, Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
      // 基本情報テーブルの確認
      if (errors.isEmpty()){
        String lSqlStatement = "SELECT ssouser_id FROM custbasicinfotbl WHERE email =" + SIDBUtil.SQL2Str(this.getEmail());
        SICheckValid.checkPreUser(errors, lConnection, "メールアドレス", lSqlStatement);
        if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      }
    }
    if (!errors.isEmpty()){
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    }
    return errors.isEmpty();
  }
  
  /**
   * validateEmail 入力したメールアドレスをチェックします。
   * 
   * @param HttpServletRequest ，Connection
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validateEmail(HttpServletRequest lRequest, Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "メールアドレス", this.getEmail(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors, "メールアドレス", this.getEmail(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    // 重複メールの存在でかどうかをチェックします
    //String lSqlStatement = "SELECT Email FROM custtbl WHERE custcode<>" + SIDBUtil.SQL2Str(this.getCustCode(), " ");
    //lSqlStatement = lSqlStatement + "AND Email=" + SIDBUtil.SQL2Str(this.getEmail());
    
    // edit by mikami
    String lSqlStatement = "SELECT id FROM ssousertbl sso ";
    lSqlStatement = lSqlStatement + "LEFT JOIN custtbl ct ON sso.custcode = ct.custcode ";
    lSqlStatement = lSqlStatement + "LEFT JOIN custbasicinfotbl ctb ON sso.id = ctb.ssouser_id ";
    lSqlStatement = lSqlStatement + "WHERE ct.custcode<>" + SIDBUtil.SQL2Str(this.getCustCode(), " ");
    lSqlStatement = lSqlStatement + "AND ct.email=" + SIDBUtil.SQL2Str(this.getEmail());
    lSqlStatement = lSqlStatement + "OR ctb.custregistflg = 0 AND ctb.delflg = 0 AND ctb.email=" + SIDBUtil.SQL2Str(this.getEmail());
    
    SICheckValid.checkDuplicate(errors, lConnection, "メールアドレス", lSqlStatement);
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  /**
   * validatePass パスワード変更画面で入力したデータをチェックします。 不正なデータがある場合、エラーをオブジェクトに格納します。 そのオブジェクトは、エラーメッセージとして画面に表示されます。
   * 
   * @param HttpServletRequest ，Connection
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validatePass(HttpServletRequest lRequest, Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "現パスワード", this.getCurrentPassword(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "現パスワード", this.getCurrentPassword(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "現パスワード", this.getCurrentPassword(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    
    if (errors.isEmpty()) {
      StringBuffer lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT CustCode FROM CustTbl WHERE CustCode=").append(SIDBUtil.SQL2Str(getCustCode()));
      lSqlBuf.append(" AND PASSWORD=").append(SIDBUtil.SQL2Str(this.getCurrentPassword()));
      try {
        if (!SIDBUtil.hasData(lConnection, lSqlBuf.toString())) {
          errors.addError(new SICustomError("app.invalid.password"));
        }
      } catch (SIDBAccessException e) {
        e.printStackTrace();
        errors.addError(new SICustomError("app.invalid.password"));
      }
      
      if (SIUtil.isNotNull(this.getPassword())) {
        SICheckValid.checkValid(errors, "新パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        SICheckValid.checkValid(errors, "新パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
        // 7.3.0 ST2030 修正 ここから
        // SICheckValid.checkValid(errors, "新パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
        SICheckValid.checkValid(errors, "新パスワード", this.getPassword(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, SIConfig.SIMinimumPassword, 16);
        // 7.3.0 ST2030 修正 ここまで
        
        SICheckValid.checkValid(errors, "新パスワード", "新パスワード(確認用)", this.getPassword(), this.getPasswordCon(), SICheckDataConf.SICHECK_DATA_MATCH_TYPE);
      }
      
      SICheckValid.checkValid(errors, "パスワードリマインダ質問", this.getPWQuestion(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
      if (SIUtil.isNotNull(getPWQuestion())) {
        SICheckValid.checkValid(errors, "パスワードリマインダ回答", this.getPWAnswer(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      }
      SICheckValid.checkValid(errors, "パスワードリマインダ回答", this.getPWAnswer(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validateCleansing(HttpServletRequest lRequest, Connection lConnection) {
   lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
   SICustomErrors errors = new SICustomErrors();
   
   // 顧客コードが存在するかどうかをチェックします
   StringBuffer lSqlStatement = new StringBuffer();
   lSqlStatement.append("SELECT custName FROM custtbl WHERE custcode<>").append(SIDBUtil.SQL2Str(this.getCustCode(), " "));
   lSqlStatement.append("AND custcode=").append(SIDBUtil.SQL2Str(this.getCustCodeBefore()," "));
   lSqlStatement.append("AND delflg<>9");
   
   if (SICheckValid.checkValid(errors, "名寄せコード", this.getCustCodeBefore(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)){
     SICheckValid.checkExist(errors, lConnection, "名寄せ対象の顧客コード", lSqlStatement.toString());
   }
   
   if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
   else try{this.setCustNameBefore(SIDBUtil.getFirstData(lConnection,lSqlStatement.toString()));}catch(Exception e) {e.printStackTrace();}
   return errors.isEmpty();
 }
 
  /**
   * reset 修正モードの場合には、PKのデータを元に、明細データをデータベースから取り込んで 画面に表示します。
   * 
   * @param lConnection データベースへのコネンクション
   * @param resetNum リセット番号 0:通常 1:アカウントリセット 2:個人情報リセット
   * @return なし
   * @throws なし
   */
  public void reset(Connection lConnection) {
    this.reset(lConnection, "0");
  }
  
  public void reset(Connection lConnection, String resetNum) {
    if (SIUtil.isNull(this.getCustCode())) { return; }
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    StringBuffer sqlStatement = new StringBuffer();
    // 出力項目
    sqlStatement.append(" SELECT c.*,d.paymethodname FROM  ");
    sqlStatement.append(" (SELECT a.*,b.memberlevelname FROM custtbl a,memberlevelmtbl b WHERE a.memberlevelcode=b.memberlevelcode ");
    sqlStatement.append(" ) c  ");
    sqlStatement.append(" LEFT OUTER JOIN ");
    sqlStatement.append(" ( ");
    sqlStatement.append(" SELECT b.paymethodcode,b.paymethodname FROM mallvw a  ");
    sqlStatement.append(" INNER JOIN paymethodmtbl b ");
    sqlStatement.append(" ON a.mallshopcode=b.mallshopcode ");
    sqlStatement.append(" ) d ");
    sqlStatement.append(" ON c.paymethodcode = d.paymethodcode ");
    sqlStatement.append(" WHERE 1=1");
    sqlStatement.append(" AND CustCode=" + SIDBUtil.SQL2Str(this.getCustCode()));
    
    log.debug("reset:lSqlStatement=" + sqlStatement.toString());
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(sqlStatement.toString());
      
      if (lResultSet.next()) {
        this.setEncode(SIConfig.SIENCODE_NONE);
        
        if (!resetNum.equalsIgnoreCase("2")) {
          this.setEmail(lResultSet.getString("email"));
          this.setPassword(lResultSet.getString("password"));
          this.setPasswordCon(lResultSet.getString("password"));
          this.setPWQuestion(lResultSet.getString("pWQuestion"));
          this.setPWAnswer(lResultSet.getString("pWAnswer"));
        }
        if (!resetNum.equalsIgnoreCase("1")) {
          this.setCustCode(lResultSet.getString("custCode"));
          this.setMemberLevelCode(lResultSet.getString("memberLevelCode"));
          this.setCustCompanyFlg(lResultSet.getString("custCompanyFlg"));
          this.setCustName(lResultSet.getString("custName"));
          this.setCustPronName(lResultSet.getString("custPronName"));
          this.setPostCode1(lResultSet.getString("postCode1"));
          this.setPostCode2(lResultSet.getString("postCode2"));
          this.setAddress1(lResultSet.getString("address1"));
          this.setAddress2(lResultSet.getString("address2"));
          this.setAddress3(lResultSet.getString("address3"));
          this.setCompanyName(lResultSet.getString("companyName"));
          this.setCorporationName(lResultSet.getString("corporationName"));
          this.setStoreTel(lResultSet.getString("storeTel"));
          this.setTel(lResultSet.getString("tel"));
          this.setFax(lResultSet.getString("fax"));
          this.setPayMethodCode(lResultSet.getString("payMethodCode"));
          
          if (SIUtil.isNotNull(lResultSet.getString("birthDate"))) {
            SIDateTime mydatefrom = new SIDateTime(lResultSet.getTimestamp("birthDate"));
            this.setBirthDate(String.valueOf(lResultSet.getString("birthDate")));
            this.setBirthDateYear(String.valueOf(mydatefrom.getYear()));
            this.setBirthDateMonth(String.valueOf(mydatefrom.getMonth()));
            this.setBirthDateDay(String.valueOf(mydatefrom.getDay()));
            // 7.2.0 ST0249 追加 ここまで
          } else {
            this.setBirthDate("");
            this.setBirthDateYear("");
            this.setBirthDateMonth("");
            this.setBirthDateDay("");
          }
          // 7.2.0 ST0249 追加 ここまで
          
          this.setSex(lResultSet.getString("sex"));
          this.setJob(lResultSet.getString("job"));
          
          this.setHowToKnow(lResultSet.getString("howToKnow"));
          this.setNewMailFlg(lResultSet.getString("newMailFlg"));
          this.setDelFlg(lResultSet.getInt("DelFlg"));// 7.3.0 ST2027 追加
          this.setEMailOld(lResultSet.getString("email"));// 7.3.0 ST2026 追加
          this.setLoginErrCount(lResultSet.getString("loginerrorcount")); // 7.3.0 ST2028 追加
          this.setLoginErrDate(lResultSet.getString("loginerrordatetime")); // 7.3.0 ST2028 追加
          this.setRegistRoute(lResultSet.getString("RegistRoute"));// 7.3.0 PI-NES0501 追加
          this.setOtherMenu(lResultSet.getString("otherMenu"));
          this.setCharge(lResultSet.getString("chargeCode"));
          this.setSalonUrl(lResultSet.getString("salonUrl"));
          this.setReceivableFlg(lResultSet.getString("receivableFlg"));
          this.setIntroductionMailFlg(lResultSet.getString("introductionMailFlg"));
          this.setMemberLevelFixedFlg(lResultSet.getString("memberLevelFixedFlg"));
          this.setNoDeliveryFlg(lResultSet.getString("noDeliveryFlg"));
          this.setNoPointFlg(lResultSet.getString("noPointFlg"));
          this.setHairCosmeFlg(lResultSet.getString("hairCosmeFlg"));
          this.setMailStatus(lResultSet.getString("mailStatus"));
          this.setOtherReason(lResultSet.getString("otherReason"));
          this.setPasswordMailDateTime(SIDBUtil.getDateTime(lResultSet.getTimestamp("passwordMailDateTime")));
          this.setContractDateTime(SIDBUtil.getDateTime(lResultSet.getTimestamp("contractDateTime")));
          this.setNoRequestFlg(lResultSet.getString("noRequestFlg"));
          this.setCompanyPronName(lResultSet.getString("companyPronName"));
          this.setCorporationPronName(lResultSet.getString("corporationPronName"));
          this.setOpeningFlg(lResultSet.getString("openingFlg"));
          if (SIUtil.isNotNull(lResultSet.getString("openingPlanDate"))){
            try{
              SIDateTime OpeningPlanDate = new SIDateTime(lResultSet.getString("openingPlanDate"),SIConfig.SIDATE_FORMAT0);
              this.setOpeningPlanDateYear(OpeningPlanDate.getYearStr());
              this.setOpeningPlanDateMonth(OpeningPlanDate.getMonthStr());
            }catch(Exception e){}
          }
          this.setOpeningArea(lResultSet.getString("openingArea"));
        }
        this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
        resetHobby(lConnection);
      }
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    
  }
  
  public void initMemo(SIURLParameter urlParam) {
    this.memoBean.setCommentNumber((String) urlParam.getParam("commentNumber"));
    this.memoBean.setMemo((String) urlParam.getParam("memo"));
    this.memoBean.setMemoStatus((String) urlParam.getParam("memoStatus"));
  }
  
  public UIPurchaseHistoryMemo getMemo(){
    return memoBean;
  }
  
  public void resetMemo(){
    memoBean = new UIPurchaseHistoryMemo();
  }
  
  public void createMemo(Connection lConnection, String userName) {
    SIDateTime lDate = new SIDateTime();
    String time = lDate.getFullDateTime();
    try{
      if(SIUtil.isNull(memoBean.getCommentNumber())){
        String num = SIDBUtil.getFirstData(lConnection, "SELECT max(CommentNumber)+1 FROM purchaseCommentTbl WHERE custcode = "+SIDBUtil.SQL2Str(this.getCustCode()));
        if (SIUtil.isNull(num)) num="1";
        SIInsertRec iRec = new SIInsertRec("purchaseCommentTbl");
        iRec.add("CustCode", this.getCustCode());
        iRec.add("CommentNumber", num);
        iRec.add("InitDateTime", time);
        iRec.add("UpdateDateTime", time);
        iRec.add("UserName", userName);
        iRec.add("Comment", memoBean.getMemo());
        iRec.add("MemoStatus", memoBean.getMemoStatus());
        iRec.execute(lConnection);
      }else{
        SIModifyRec mRec = new SIModifyRec("purchaseCommentTbl");
        mRec.addCondition("CustCode", this.getCustCode());
        mRec.addCondition("CommentNumber", memoBean.getCommentNumber());
        mRec.add("UpdateDateTime", time);
        mRec.add("Comment", memoBean.getMemo());
        mRec.add("MemoStatus", memoBean.getMemoStatus());
        mRec.add("LastUpdateUserName", userName);
        mRec.execute(lConnection);
      }
      lConnection.commit();
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  
  public void deleteMemo(Connection lConnection) {
    try{
        SIDeleteRec dRec = new SIDeleteRec("purchaseCommentTbl");
        dRec.addCondition("CustCode", this.getCustCode());
        dRec.addCondition("CommentNumber", memoBean.getCommentNumber());
        dRec.execute(lConnection);
      lConnection.commit();
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  
  public Collection getMemoCollection(Connection lConnection) throws SIDBAccessException {
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer str = new StringBuffer();
    Collection returnColl = new ArrayList();
    if (SIUtil.isNull(this.getCustCode())) return returnColl;
    UIPurchaseHistoryMemo lMemo = null;
    
    str.append("SELECT * FROM purchaseCommentTbl WHERE custCode = ").append(SIDBUtil.SQL2Str(this.getCustCode()," "));
    str.append("ORDER BY initdatetime DESC");
    try {
      statement = lConnection.createStatement();
      log.debug("MemoSQL=" + str.toString());
      resultSet = statement.executeQuery(str.toString());
      while (resultSet.next()) {
        lMemo = new UIPurchaseHistoryMemo();
        lMemo.setCommentNumber(resultSet.getString("commentNumber"));
        lMemo.setInitDateTime(SIDBUtil.getDateTime(resultSet.getTimestamp("initDateTime")));
        lMemo.setUpdateDateTime(SIDBUtil.getDateTime(resultSet.getTimestamp("updateDateTime")));
        lMemo.setUserName(resultSet.getString("userName"));
        lMemo.setMemo(resultSet.getString("comment"));
        lMemo.setMemoStatus(resultSet.getString("memoStatus"));
        lMemo.setLastUpdateUserName(resultSet.getString("lastUpdateUserName"));
        returnColl.add(lMemo);
      }
    } catch (Exception e) {
      e.printStackTrace();
      return new ArrayList();
    } finally {
      SIDBUtil.close(statement, resultSet);
    }
    
    return returnColl;
  }
  
  /**
   * getArrayList_CustHobby 「趣味」項目の配列を戻します。
   * 
   * @param Connection
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return String[]
   * @throws SIDBAccessException
   */
  public String[] getArrayList_CustHobby(Connection lconnection, SIURLParameter lUrlParam) throws SIDBAccessException {// 7.1.1 ST0236 修正
    if (SIUtil.isNull(this.getCustCode())
        || SIConfig.SIACTION_REMODIFY.equals((String) lUrlParam.getParam("actionNameTxt"))
        || SIConfig.SIACTION_CONFIRM.equals((String) lUrlParam.getParam("actionNameTxt"))
        || SIConfig.SIACTION_ZIPDIC.equals((String) lUrlParam.getParam("actionNameTxt"))
        || SIConfig.SIACTION_BACK.equals((String) lUrlParam.getParam("actionNameTxt"))) {
      String[] aryHobbyPrm = this.getHobby();
      return aryHobbyPrm;
    } else {
      Collection coll = SIDBUtil.getCollection(lconnection, "SELECT HobbyName, HobbyName FROM CustHobbyTbl WHERE CustCode=" + SIDBUtil.SQL2Str(this.getCustCode()));
      Iterator hobby = coll.iterator();
      SINameValue siname = new SINameValue();
      
      Vector hobbyList = new Vector();
      while (hobby.hasNext()) {
        siname = (SINameValue) hobby.next();
        hobbyList.add((String) siname.getValue());
      }
      
      String[] aryHobby = new String[hobbyList.size()];
      for (int i = 0; i < hobbyList.size(); i++) {
        aryHobby[i] = (String) hobbyList.get(i);
      }
      return aryHobby;
    }
  }
  
  /**
   * getArrayList_ContractedMaker 契約済ブランドの配列を戻します。
   * 
   * @param Connection
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return String[]
   * @throws SIDBAccessException
   */
  public String[] getArrayList_ContractedMaker(Connection lconnection, SIURLParameter lUrlParam) throws SIDBAccessException {
    if (SIUtil.isNull(this.getCustCode())
        || ((String) lUrlParam.getParam("actionNameTxt")).equals(SIConfig.SIACTION_REMODIFY)
        || ((String) lUrlParam.getParam("actionNameTxt")).equals(SIConfig.SIACTION_CONFIRM)
        || ((String) lUrlParam.getParam("actionNameTxt")).equals(SIConfig.SIACTION_ZIPDIC)
        || ((String) lUrlParam.getParam("actionNameTxt")).equals(SIConfig.SIACTION_BACK)) {
      String[] aryMakerPrm = this.getMaker();
      return aryMakerPrm;
    } else {
      StringBuffer lSqlStr = new StringBuffer();
      lSqlStr.append("SELECT m.makername, m.makercode FROM custmakertbl cm,makertbl m ");
      lSqlStr.append("WHERE m.makercode=cm.makercode AND cm.custcode=").append(SIDBUtil.SQL2Str(this.getCustCode()));
      Collection coll = SIDBUtil.getCollection(lconnection, lSqlStr.toString());
      Iterator maker = coll.iterator();
      SINameValue siname = new SINameValue();
      
      Vector makerList = new Vector();
      while (maker.hasNext()) {
        siname = (SINameValue) maker.next();
        makerList.add((String) siname.getValue());
      }
      
      String[] aryMaker = new String[makerList.size()];
      for (int i = 0; i < makerList.size(); i++) {
        aryMaker[i] = (String) makerList.get(i);
      }
      return aryMaker;
    }
  }
  
  /**
   * getArrayList_SupportMenu 開業サポートメニューの配列を戻します。
   * 
   * @param Connection
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return String[]
   * @throws SIDBAccessException
   */
  public String[] getArrayList_SupportMenu(Connection lconnection, SIURLParameter lUrlParam) throws SIDBAccessException {
    if (SIUtil.isNull(this.getCustCode())
        || ((String) lUrlParam.getParam("actionNameTxt")).equals(SIConfig.SIACTION_REMODIFY)
        || ((String) lUrlParam.getParam("actionNameTxt")).equals(SIConfig.SIACTION_CONFIRM)
        || ((String) lUrlParam.getParam("actionNameTxt")).equals(SIConfig.SIACTION_ZIPDIC)
        || ((String) lUrlParam.getParam("actionNameTxt")).equals(SIConfig.SIACTION_BACK)) {
      String[] aryMenuPrm = this.getSupportMenu();
      return aryMenuPrm;
    } else {
      StringBuffer lSqlStr = new StringBuffer();
      lSqlStr.append("SELECT menuname,menuname FROM custmenutbl ");
      lSqlStr.append("WHERE custcode=").append(SIDBUtil.SQL2Str(this.getCustCode()));
      Collection coll = SIDBUtil.getCollection(lconnection, lSqlStr.toString());
      Iterator maker = coll.iterator();
      SINameValue siname = new SINameValue();
      
      Vector menuList = new Vector();
      while (maker.hasNext()) {
        siname = (SINameValue) maker.next();
        menuList.add((String) siname.getValue());
      }
      
      String[] aryMenu = new String[menuList.size()];
      for (int i = 0; i < menuList.size(); i++) {
        aryMenu[i] = (String) menuList.get(i);
      }
      return aryMenu;
    }
  }
  
  // add by mikami
  public void setPreCustInfo(Connection lconnection, String ssouser_id){
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer lSqlStr = new StringBuffer();
    lSqlStr.append("SELECT custname,custpronname,email,password,pwquestion,pwanswer FROM custbasicinfotbl ");
    lSqlStr.append("WHERE ssouser_id=").append(ssouser_id);
    try {
      // 登録済み項目をセット
      statement = lconnection.createStatement();
      resultSet = statement.executeQuery(lSqlStr.toString());
      //this.setCustName(SIDBUtil.getFirstData(lconnection, lSqlStr.toString()));
      if (resultSet.next()) {
        this.setCustName(resultSet.getString("custname"));
        this.setCustPronName(resultSet.getString("custpronname"));
        this.setEmail(resultSet.getString("email"));
        this.setPassword(resultSet.getString("password"));
        this.setPasswordCon(resultSet.getString("password"));
        this.setPWQuestion(resultSet.getString("pwquestion"));
        this.setPWAnswer(resultSet.getString("pwanswer"));
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(statement, resultSet);
    }
  }
  // add end
  
}
