/**
 * Created on 2003/11/18
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

package jp.co.sint.beans.mallmgr;

import java.sql.Connection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIPayMethod;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIStringUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @author arai
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class UIRegPayMethod extends SIPayMethod {
  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  private String regMallShopCode = "";
  private String regPayMethodCode = "";
  private String regPayMethodName = "";
  private String regPaymentFlg = "";
  private String regFee = "";
  private String regRowNumTxt = "";
  
  public UIRegPayMethod() {}
  
  /**
   * initInsert
   * 入力した新規レコードのデータを取得します。
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  //7.1.1 ST0236 修正 ここから
  public void initInsert(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    
    if (lLogin.isShop()){
      this.setMallShopCode(lLogin.getMallShopCode());
    }else{
      this.setMallShopCode((String)lUrlParam.getParam("mallShopCodeTxt"));
    }
    this.setPayMethodCode((String)lUrlParam.getParam("payMethodCodeTxt"));
    this.setPayMethodName((String)lUrlParam.getParam("payMethodNameTxt"));
    this.setPaymentFlg((String)lUrlParam.getParam("paymentFlgTxt"));
    this.setFee((String)lUrlParam.getParam("feeTxt"));
  }
  //7.1.1 ST0236 修正 ここまで
  
  /**
   * <b>initModify</b>
   * 入力した既存レコードのデータを取得します。
   * @param request クライアントからリクエスト
   * @return なし
   * @throws なし
   */
  //7.1.1 ST0236 修正 ここから
  public void initModify(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    
    if (lLogin.isShop()){
      this.setRegMallShopCode(lLogin.getMallShopCode());
    }else{
      this.setRegMallShopCode((String)lUrlParam.getParam("regMallShopCodeTxt"));
    }
    this.setRegPayMethodCode((String)lUrlParam.getParam("regPayMethodCodeTxt"));
    
    this.setRegRowNumTxt((String)lUrlParam.getParam("regRowNumTxt"));
    
    if (SIUtil.isNotNull(this.getRegRowNumTxt())) {
      this.setRegPayMethodName((String)lUrlParam.getParam(SIConfig.SIPREFIX_PAYMETHODNAME_NAME_TEXT + this.getRegRowNumTxt() + "Txt"));
      this.setRegPaymentFlg((String)lUrlParam.getParam(SIConfig.SIPREFIX_PAYMENTFLG_NAME_TEXT + this.getRegRowNumTxt() + "Txt"));
      this.setRegFee((String)lUrlParam.getParam(SIConfig.SIPREFIX_FEE_NAME_TEXT + this.getRegRowNumTxt() + "Txt"));
    }
  }
  //7.1.1 ST0236 修正 ここまで
  
  /**
   * <b>validateInsert</b>
   * 入力した新規レコードのデータをチェックします。
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  public boolean validateInsert(HttpServletRequest lRequest, Connection lConnection) {
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    SICustomErrors errors = new SICustomErrors();
    
    if (SIUtil.match(SIConfig.SIADMIN_MS,lLogin.getAdminType())){
      errors.addError(new SICustomError("manager.app.priv.disable"));
    }
    
    //ショップコード
    SICheckValid.checkValid(errors, "ショップコード", this.getMallShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ショップコード", this.getMallShopCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    if (SIConfig.SIRUNNING_MODE_CURRENT==SIConfig.SIRUNNING_MODE_INDIVIDUAL&&SIUtil.isNotNull(getMallShopCode())&&SIConfig.SIMALL.getMallShopCode().equals(getMallShopCode())){
      errors.addError(new SICustomError("database.query.notexist","ショップコード"));
    }
    
    //支払方法ID
    SICheckValid.checkValid(errors, "支払方法ID", this.getPayMethodCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "支払方法ID", this.getPayMethodCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    if (this.getPayMethodCode().trim().equals("0")) {
      errors.addError(new SICustomError("input.data.forbidden", "支払方法IDに「0」"));
    }
    
    //支払方法名称
    SICheckValid.checkValid(errors, "支払方法名称", this.getPayMethodName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "支払方法名称", this.getPayMethodName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    
    //支払区分
    SICheckValid.checkValid(errors, "支払区分", this.getPaymentFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "支払区分", this.getPaymentFlg(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 1);
    
    //手数料
    //7.3.0 PI-NES0501 削除 ここから
    /*
    SICheckValid.checkValid(errors, "手数料", this.getFee(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "手数料", this.getFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    */
    //7.3.0 PI-NES0501 削除 ここまで
    
    if (SIUtil.isNotNull(this.getMallShopCode())) {
      StringBuffer lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT MallShopCode FROM MallShopMTbl ");
      lSqlBuf.append("WHERE MallShopCode=").append(SIDBUtil.SQL2Str(this.getMallShopCode()));
      log.debug("validateInsert:lSqlBuf=" + lSqlBuf.toString());
      SICheckValid.checkExist(errors, lConnection, "ショップコード", lSqlBuf.toString());
    }
    
    if( SIUtil.isNotNull(this.getPayMethodName())&&SIUtil.isNotNull(this.getMallShopCode())){
        StringBuffer lSqlBuf = new StringBuffer();
        lSqlBuf.append("SELECT PayMethodName FROM PayMethodMTbl ");
        lSqlBuf.append("WHERE (PayMethodName=").append(SIDBUtil.SQL2Str(this.getPayMethodName()));
        lSqlBuf.append(" AND  MallShopCode=").append(SIDBUtil.SQL2Str(this.getMallShopCode(),")"));
        lSqlBuf.append(" OR ").append(SIDBUtil.SQL2Str(SIConfig.SIZeroPayName,"=")).append(SIDBUtil.SQL2Str(this.getPayMethodName()));
        lSqlBuf.append(" OR ").append(SIDBUtil.SQL2Str(SIConfig.SIPointPayName,"=")).append(SIDBUtil.SQL2Str(this.getPayMethodName()));
        log.debug("validateInsert:lSqlBuf="+lSqlBuf.toString());
        SICheckValid.checkNotExist(errors, lConnection, "支払方法名称", lSqlBuf.toString());
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK);
    
    return errors.isEmpty();
  }
  
  /**
   * <b>validateModify</b>
   * 入力した新規レコードのデータをチェックします。
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  public boolean validateModify(HttpServletRequest lRequest,Connection lConnection) {
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    SICustomErrors errors = new SICustomErrors();
    
    if (SIUtil.match(SIConfig.SIADMIN_MS,lLogin.getAdminType())){
      errors.addError(new SICustomError("manager.app.priv.disable"));
    }
    //ショップコード
    SICheckValid.checkValid(errors, "ショップコード", this.getRegMallShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ショップコード", this.getRegMallShopCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    
    //支払方法ID
    SICheckValid.checkValid(errors, "支払方法ID", this.getRegPayMethodCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "支払方法ID", this.getRegPayMethodCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    //支払方法名称
    SICheckValid.checkValid(errors, "支払方法名称", this.getRegPayMethodName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "支払方法名称", this.getRegPayMethodName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    
    //支払区分
    SICheckValid.checkValid(errors, "支払区分", this.getRegPaymentFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "支払区分", this.getRegPaymentFlg(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 1);
    
    //手数料
    //7.3.0 PI-NES0501 削除 ここから
    /*
    SICheckValid.checkValid(errors, "手数料", this.getRegFee(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "手数料", this.getRegFee(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    */
    //7.3.0 PI-NES0501 削除 ここまで
    
    if( SIUtil.isNotNull(this.getRegPayMethodName())&&SIUtil.isNotNull(this.getRegMallShopCode())){
        StringBuffer lSqlBuf = new StringBuffer();
        lSqlBuf.append("SELECT PayMethodName FROM PayMethodMTbl ");
        lSqlBuf.append("WHERE (PayMethodName=").append(SIDBUtil.SQL2Str(this.getRegPayMethodName()));
        lSqlBuf.append(" AND  MallShopCode=").append(SIDBUtil.SQL2Str(this.getRegMallShopCode()));
        lSqlBuf.append(" AND  PayMethodCode!=").append(SIDBUtil.SQL2Str(this.getRegPayMethodCode(),")"));
        lSqlBuf.append(" OR ").append(SIDBUtil.SQL2Str(SIConfig.SIZeroPayName,"=")).append(SIDBUtil.SQL2Str(this.getRegPayMethodName()));
        lSqlBuf.append(" OR ").append(SIDBUtil.SQL2Str(SIConfig.SIPointPayName,"=")).append(SIDBUtil.SQL2Str(this.getRegPayMethodName()));
        log.debug("validateInsert:lSqlBuf="+lSqlBuf.toString());
        SICheckValid.checkNotExist(errors, lConnection, "支払方法名称", lSqlBuf.toString());
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK);
    
    return errors.isEmpty();
  }
  
  /**
   * <b>validateDelete</b>
   * 外部のキーのデータレコードをチェックします。
   * @param lRequest クライアントからのリクエスト
   * @param lConnection データベースへのコネクション
   * @return エラーがあるかどうかを指す状態
   * @throws なし
   */
  public boolean validateDelete(HttpServletRequest lRequest, Connection lConnection) {
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    SICustomErrors errors = new SICustomErrors();
    
    if (SIUtil.match(SIConfig.SIADMIN_MS,lLogin.getAdminType())){
      errors.addError(new SICustomError("manager.app.priv.disable"));
    }
    
    //ショップコード
    SICheckValid.checkValid(errors, "ショップコード", this.getRegMallShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ショップコード", this.getRegMallShopCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    
    //支払方法ID
    SICheckValid.checkValid(errors, "支払方法ID", this.getRegPayMethodCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "支払方法ID", this.getRegPayMethodCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    if (this.getRegPayMethodCode().trim().equals("0")) {
      errors.addError(new SICustomError("input.data.forbidden", "支払方法IDに「0」"));
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK);
    
    return errors.isEmpty();
  }
  
  /**
   * @return
   */
  public String getRegFee() {
    return regFee;
  }
  
  /**
   * @return
   */
  public String getRegMallShopCode() {
    return regMallShopCode;
  }
  
  /**
   * @return
   */
  public String getRegPaymentFlg() {
    return regPaymentFlg;
  }
  
  /**
   * @return
   */
  public String getRegPayMethodCode() {
    return regPayMethodCode;
  }
  
  /**
   * @return
   */
  public String getRegPayMethodName() {
    return regPayMethodName;
  }
  
  /**
   * @param string
   */
  public void setRegFee(String string) {
    if (string == null) string = "";
    regFee = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegMallShopCode(String string) {
    if (string == null) string = "";
    regMallShopCode = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegPaymentFlg(String string) {
    if (string == null) string = "";
    regPaymentFlg = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegPayMethodCode(String string) {
    if (string == null) string = "";
    regPayMethodCode = SIUtil.changeTo(string.trim(), this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegPayMethodName(String string) {
    if (string == null) string = "";
    string = SIUtil.changeTo(string.trim(), this.encode);
    regPayMethodName = SIStringUtil.rightTrim(string);
  }
  
  /**
   * @return
   */
  public String getRegRowNumTxt() {
    return regRowNumTxt;
  }
  
  /**
   * @param string
   */
  public void setRegRowNumTxt(String string) {
    if (string == null) string = "";
    string = SIUtil.changeTo(string.trim(), this.encode);
    regRowNumTxt = string;
  }
}