/**
 * Created on 2003/11/12
 *
 * 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.SIDeliveryType;
import jp.co.sint.basic.SILogin;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
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.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 UIRegDeliveryName extends SIDeliveryType {

  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  private String regMallShopCode = "";
  private String regDeliveryTypeCode = "";
  private String regDeliveryTypeName = "";
  private String regDeliveryTimeFlg ="";
  private String regRowNumTxt = "";
  
  private String regMallShopCodeForShop = "";//ショップインサート時に利用
  
  public UIRegDeliveryName() {}
  
  /**
   * init
   * 入力した新規レコードのデータを取得します。
   * @param request クライアントからリクエスト
   * @param lUrlParam 
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){//7.1.1 ST0236 修正
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest,lUrlParam);//7.1.1 ST0236 修正s
  }
  
  /**
   * 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);
    super.init(lRequest,lUrlParam);
    if (lLogin.isShop()){
      this.setMallShopCode(lLogin.getMallShopCode());
    }else{
      this.setMallShopCode((String)lUrlParam.getParam("mallShopCodeTxt"));
    }
    this.setDeliveryTypeCode((String)lUrlParam.getParam("deliveryTypeCodeTxt"));
    this.setDeliveryTypeName((String)lUrlParam.getParam("deliveryTypeNameTxt"));
    this.setDeliveryTimeFlg((String)lUrlParam.getParam("deliveryTimeFlgRdo"));
  }
  //7.1.1 ST0236 修正 ここから
  
  /**
   * <b>initModify</b>
   * 入力した既存レコードのデータを取得します。
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  //7.1.1 ST0236 修正 ここから
  public void initModify(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest,lUrlParam);
    if (lLogin.isShop()){
      this.setRegMallShopCode(lLogin.getMallShopCode());
    }else{
      this.setRegMallShopCode((String)lUrlParam.getParam("regMallShopCodeTxt"));
    }
    this.setRegDeliveryTypeCode((String)lUrlParam.getParam("regDeliveryTypeCodeTxt"));
    this.setRegRowNumTxt((String)lUrlParam.getParam("regRowNumTxt"));
    
    if (SIUtil.isNotNull(this.getRegRowNumTxt())) {
      //規格名称
      this.setRegDeliveryTypeName((String)lUrlParam.getParam(SIConfig.SIPREFIX_DELIVERYTYPE_NAME_TEXT + this.getRegRowNumTxt() + "Txt"));
      //配送希望日表示
      this.setRegDeliveryTimeFlg((String)lUrlParam.getParam(SIConfig.SIPREFIX_DELIVERYTIME_FLG_RADIO + this.getRegRowNumTxt() + "Rdo"));
    }
  }
  //7.1.1 ST0236 修正 ここまで
  
  /**
   * <b>validateInsert</b>
   * 入力した新規レコードのデータをチェックします。
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  public boolean validateInsert(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    
    //ショップコード
    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 (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());
    }
    
    //配送種別コード
    SICheckValid.checkValid(errors, "配送種別コード", this.getDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "配送種別コード", this.getDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    if(this.getDeliveryTypeCode().trim().equals("0")){
      errors.addError(new SICustomError("input.data.forbidden", "配送種別コードに「0」"));
    }
    
    if (SIUtil.isNotNull(this.getMallShopCode())&&SIUtil.isNotNull(this.getDeliveryTypeCode())){
      StringBuffer lSqlBuf=new StringBuffer("");
      lSqlBuf.append("SELECT mallShopCode FROM DeliveryTypeMtbl ");
      lSqlBuf.append("WHERE mallShopCode=" + SIDBUtil.SQL2Str(this.getMallShopCode()," "));
      lSqlBuf.append("AND deliveryTypeCode="+SIDBUtil.SQL2Str(this.getDeliveryTypeCode()));
      SICheckValid.checkNotExist(errors,lConnection,"配送種別コード",lSqlBuf.toString());
    }
    
    //配送種別名称
    SICheckValid.checkValid(errors, "配送種別名称", this.getDeliveryTypeName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "配送種別名称", this.getDeliveryTypeName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 30);
    
    if (SIUtil.isNotNull(this.getMallShopCode())&&SIUtil.isNotNull(this.getDeliveryTypeName())){
      StringBuffer lSqlBuf=new StringBuffer("");
      lSqlBuf.append("SELECT mallShopCode FROM DeliveryTypeMtbl ");
      lSqlBuf.append("WHERE mallShopCode=" + SIDBUtil.SQL2Str(this.getMallShopCode()," "));
      lSqlBuf.append("AND deliveryTypeName="+SIDBUtil.SQL2Str(this.getDeliveryTypeName()));
      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 クライアントからのリクエスト
   * @param lConnection
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public boolean validateModify(HttpServletRequest lRequest,Connection lConnection,SIURLParameter lUrlParam){//7.1.1 ST0236 修正
    SICustomErrors errors = new SICustomErrors();
    
    //ショップコード
    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);
    
    //配送種別コード
    SICheckValid.checkValid(errors, "配送種別コード", this.getRegDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "配送種別コード", this.getRegDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    if(!((String)lUrlParam.getParam("actionNameTxt")).trim().equals(SIConfig.SIACTION_MODIFY) && this.getRegDeliveryTypeCode().trim().equals("0")){//7.1.1 ST0236 修正
      errors.addError(new SICustomError("input.data.forbidden", "配送種別コードに「0」"));
    }
    
    //配送種別名称
    SICheckValid.checkValid(errors, "配送種別名称", this.getRegDeliveryTypeName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "配送種別名称", this.getRegDeliveryTypeName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 30);
    
    if (SIUtil.isNotNull(this.getRegMallShopCode())&&SIUtil.isNotNull(this.getRegDeliveryTypeName())){
      StringBuffer lSqlBuf=new StringBuffer();
      lSqlBuf.append("SELECT mallShopCode FROM DeliveryTypeMtbl ");
      lSqlBuf.append("WHERE mallShopCode=").append(SIDBUtil.SQL2Str(this.getRegMallShopCode()," "));
      lSqlBuf.append("AND deliveryTypeName=").append(SIDBUtil.SQL2Str(this.getRegDeliveryTypeName()," "));
      lSqlBuf.append("AND deliveryTypeCode!=").append(SIDBUtil.SQL2Str(this.getRegDeliveryTypeCode()));
      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) {
    SICustomErrors errors = new SICustomErrors();
    
    //商品が紐づいている場合はエラーを表示します。
    StringBuffer lSqlBuf = new StringBuffer(" SELECT DISTINCT bb.DeliveryTypeCode ");
    lSqlBuf.append("FROM DeliveryTypeMtbl aa,CmdtyMTbl bb ");
    lSqlBuf.append("WHERE aa.MallShopCode=bb.ShopCode AND aa.DeliveryTypeCode=bb.DeliveryTypeCode ");
    lSqlBuf.append(" AND bb.ShopCode=").append(SIDBUtil.SQL2Str(this.getRegMallShopCode()));
    lSqlBuf.append(" AND bb.DeliveryTypeCode=").append(SIDBUtil.SQL2Str(this.getRegDeliveryTypeCode()));
    
    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();
  }
  
  /**
   * @return
   */
  public String getRegDeliveryTypeCode() {
    return regDeliveryTypeCode;
  }
  
  /**
   * @return
   */
  public String getRegDeliveryTypeName() {
    return regDeliveryTypeName;
  }
  
  /**
   * @return
   */
  public String getRegMallShopCode() {
    return regMallShopCode;
  }
  
  /**
   * @return
   */
  public String getRegRowNumTxt() {
    return regRowNumTxt;
  }
  
  /**
   * @return
   */
  public String getRegDeliveryTimeFlg() {
    return regDeliveryTimeFlg;
  }
  
  /**
   * @param string
   */
  public void setRegDeliveryTypeCode(String string) {
    if (string == null) string = "";
    regDeliveryTypeCode = SIUtil.changeTo(string, this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegDeliveryTypeName(String string) {
    if (string == null)
    regDeliveryTypeName = SIUtil.changeTo(string, this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegMallShopCode(String string) {
    if (string == null) string = "";
    regMallShopCode = SIUtil.changeTo(string, this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegRowNumTxt(String string) {
    if (string == null) string = "";
    regRowNumTxt = SIUtil.changeTo(string, this.encode);
  }
  
  /**
   * @return
   */
  public String getRegMallShopCodeForShop() {
    return regMallShopCodeForShop;
  }
  
  /**
   * @param string
   */
  public void setRegMallShopCodeForShop(String string) {
    if (string == null) string = "";
    regMallShopCodeForShop = SIUtil.changeTo(string, this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegDeliveryTimeFlg(String string) {
    if (string == null) string = "";
    regDeliveryTimeFlg = SIUtil.changeTo(string, this.encode);
  }
}