/**
 * Created on 2003/11/13
 *
 * 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.SIDeliveryTime;
import jp.co.sint.basic.SILogin;
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.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 UIRegDeliveryTimetable extends SIDeliveryTime {
  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  private String regMallShopCode = "";
  private String regDeliveryTypeCode = "";
  private String regDeliveryTimeFrom = "";
  private String regDeliveryTimeTo = "";
  private String regRowNumTxt = "";
  
  public UIRegDeliveryTimetable() {}
  
  /**
   * 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("regMallShopCodeTxt"));
    }
    this.setDeliveryTypeCode((String)lUrlParam.getParam("regDeliveryTypeCodeTxt"));
    this.setDeliveryTimeFrom((String)lUrlParam.getParam("deliveryTimeFromTxt"));
    this.setDeliveryTimeTo((String)lUrlParam.getParam("deliveryTimeToTxt"));
  }
  //7.1.1 ST0236 修正 ここまで
  
  /**
   * initModify
   * 入力した既存レコードのデータを取得します。
   * @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);
    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"));
    this.setRegDeliveryTimeFrom((String)lUrlParam.getParam("regDeliveryTimeFromTxt"));
    this.setRegDeliveryTimeTo((String)lUrlParam.getParam("regDeliveryTimeToTxt"));
    
    if (SIUtil.isNotNull(this.getRegRowNumTxt())) {
      this.setDeliveryTimeFrom((String)lUrlParam.getParam(SIConfig.SIPREFIX_DELIVERYTIME_NAME_TEXT + this.getRegRowNumTxt() + "TxtFrom"));
      this.setDeliveryTimeTo((String)lUrlParam.getParam(SIConfig.SIPREFIX_DELIVERYTIME_NAME_TEXT + this.getRegRowNumTxt() + "TxtTo"));
    }
  }
  //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);
    
    //配送種別コード
    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);
    
    //時間帯From
    SICheckValid.checkValid(errors, "時間帯From", this.getDeliveryTimeFrom(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "時間帯From", this.getDeliveryTimeFrom(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    //時間帯To
    SICheckValid.checkValid(errors, "時間帯To", this.getDeliveryTimeTo(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "時間帯To", this.getDeliveryTimeTo(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    if (this.getDeliveryTimeFrom().equals(this.getDeliveryTimeTo())) {
      errors.addError(new SICustomError("input.data.unmatch", "時間帯From", "時間帯To"));
    }
    if(SIUtil.isNotNull(this.getDeliveryTimeFrom()) && SIUtil.isNotNull(this.getDeliveryTimeTo())){
      try{
        int deliveryTimeFrom = Integer.parseInt(this.getDeliveryTimeFrom());
        int deliveryTimeTo = Integer.parseInt(this.getDeliveryTimeTo());
        if(deliveryTimeFrom > deliveryTimeTo){
          errors.addError(new SICustomError("input.data.date.less", "時間帯From", "時間帯To"));
        }
      }catch(Exception e){}
    }
    if (SIUtil.isNotNull(this.getMallShopCode())) {
      StringBuffer lSqlStatementBuf = new StringBuffer();
      lSqlStatementBuf.append("SELECT MallShopCode FROM MallShopVW ");
      lSqlStatementBuf.append("WHERE MallShopCode=").append(SIDBUtil.SQL2Str(this.getMallShopCode(), " "));
      log.debug("validateInsert:lSqlStatementBuf=" + lSqlStatementBuf.toString());
      SICheckValid.checkExist(errors, lConnection, "ショップコード", lSqlStatementBuf.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) {
    SICustomErrors errors = new SICustomErrors();
    
    //ショップコード(Primary Key)
    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);
    
    //配送種別コード(Primary Key)
    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);
    
    //時間帯From(Primary Key)
    SICheckValid.checkValid(errors, "時間帯From", this.getRegDeliveryTimeFrom(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "時間帯From", this.getRegDeliveryTimeFrom(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    //時間帯To(Primary Key)
    SICheckValid.checkValid(errors, "時間帯To", this.getRegDeliveryTimeTo(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "時間帯To", this.getRegDeliveryTimeTo(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    //時間帯From
    SICheckValid.checkValid(errors, "時間帯From", this.getDeliveryTimeFrom(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "時間帯From", this.getDeliveryTimeFrom(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    //時間帯To
    SICheckValid.checkValid(errors, "時間帯To", this.getDeliveryTimeTo(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "時間帯To", this.getDeliveryTimeTo(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    if (this.getDeliveryTimeFrom().equals(this.getDeliveryTimeTo())) {
      errors.addError(new SICustomError("input.data.unmatch", "時間帯From", "時間帯To"));
    }
    if(SIUtil.isNotNull(this.getDeliveryTimeFrom()) && SIUtil.isNotNull(this.getDeliveryTimeTo())){
      try{
        int deliveryTimeFrom = Integer.parseInt(this.getDeliveryTimeFrom());
        int deliveryTimeTo = Integer.parseInt(this.getDeliveryTimeTo());
        if(deliveryTimeFrom > deliveryTimeTo){
          errors.addError(new SICustomError("input.data.date.less", "時間帯From", "時間帯To"));
        }
      }catch(Exception e){}
    }
    
    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();
    
    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 Category getLog() {
    return log;
  }
  
  /**
   * @return
   */
  public String getRegDeliveryTimeFrom() {
    return regDeliveryTimeFrom;
  }
  
  /**
   * @return
   */
  public String getRegDeliveryTimeTo() {
    return regDeliveryTimeTo;
  }
  
  /**
   * @return
   */
  public String getRegDeliveryTypeCode() {
    return regDeliveryTypeCode;
  }
  
  /**
   * @return
   */
  public String getRegMallShopCode() {
    return regMallShopCode;
  }
  
  /**
   * @return
   */
  public String getRegRowNumTxt() {
    return regRowNumTxt;
  }
  
  /**
   * @param category
   */
  public void setLog(Category category) {
    log = category;
  }
  
  /**
   * @param string
   */
  public void setRegDeliveryTimeFrom(String string) {
    if (string == null) string = "";
    regDeliveryTimeFrom = SIUtil.changeTo(string, this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegDeliveryTimeTo(String string) {
    if (string == null) string = "";
    regDeliveryTimeTo = SIUtil.changeTo(string, this.encode);
  }
  
  /**
   * @param string
   */
  public void setRegDeliveryTypeCode(String string) {
    if (string == null) string = "";
    regDeliveryTypeCode = 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);
  }
}