/**
 * Created on 2003/09/16
 *
 * 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 java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SILogin;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SITableCondition;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SICheckValid;
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 UIRegPointRule extends SIBasic {
  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  private String mallShopCode = "";
  private String minCost = "";
  private String pointRate = "";
  private String initPoint = "";
  private String setDateOfBonus = "";
  private String bonusFromDate = "";
  private String bonusFromDateYear = "";
  private String bonusFromDateMonth = "";
  private String bonusFromDateDay = "";
  private String bonusToDate = "";
  private String bonusToDateYear = "";
  private String bonusToDateMonth = "";
  private String bonusToDateDay = "";
  private String bonusPointRate = "";
  private String stndrdOfIssue = "";
  private String period = "";
  private String dispMode = "";
  private String specialRate = "";
  
  public UIRegPointRule() {}
  
  /**
   * init
   * 入力したデータから、このbeansを設定します。
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return なし
   * @throws なし
   */
  //7.1.1 ST0236 修正 ここから
  public void init(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("mallShopCode"));
    }
    this.setMinCost((String)lUrlParam.getParam("minCost"));
    this.setPointRate((String)lUrlParam.getParam("pointRate"));
    this.setInitPoint((String)lUrlParam.getParam("initPoint"));
    this.setSetDateOfBonus((String)lUrlParam.getParam("setDateOfBonus"));
    this.setBonusFromDate((String)lUrlParam.getParam("bonusFromDate"));
    this.setBonusFromDateYear((String)lUrlParam.getParam("bonusFromDateYear"));
    this.setBonusFromDateMonth((String)lUrlParam.getParam("bonusFromDateMonth"));
    this.setBonusFromDateDay((String)lUrlParam.getParam("bonusFromDateDay"));
    this.setBonusToDate((String)lUrlParam.getParam("bonusToDate"));
    this.setBonusToDateYear((String)lUrlParam.getParam("bonusToDateYear"));
    this.setBonusToDateMonth((String)lUrlParam.getParam("bonusToDateMonth"));
    this.setBonusToDateDay((String)lUrlParam.getParam("bonusToDateDay"));
    this.setBonusPointRate((String)lUrlParam.getParam("bonusPointRate"));
    this.setStndrdOfIssue((String)lUrlParam.getParam("stndrdOfIssue"));
    this.setPeriod((String)lUrlParam.getParam("period"));
    this.setSpecialRate((String)lUrlParam.getParam("specialRate"));
    if (lLogin.isMall()){
      this.setDispMode("mall");
    }else{
      this.setDispMode("shop");
    }
    this.setActionNameTxt((String)lUrlParam.getParam("actionNameTxt"));
    this.setEditModeTxt((String)lUrlParam.getParam("editModeTxt"));
  }
  //7.1.1 ST0236 修正 ここまで
  
  /**
   * validate
   * 入力したデータをチェックします。
   * 不正なデータがある場合、エラーをオブジェクトに格納します。
   * そのオブジェクトは、エラーメッセージとして画面に表示されます。
   * @param HttpServletRequest ，Connection
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest, Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    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.getMinCost(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ポイントを付加する最低購入金額", this.getMinCost(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    
    SICheckValid.checkValid(errors, "ポイント付加率(購入金額のxx％)", this.getPointRate(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ポイント付加率(購入金額のxx％)", this.getPointRate(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    SICheckValid.checkValid(errors, "初めて購入した時のボーナスポイント", this.getInitPoint(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "初めて購入した時のボーナスポイント", this.getInitPoint(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    
    SICheckValid.checkValid(errors, "ボーナス時ポイント付加率", this.getBonusPointRate(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ボーナス時ポイント付加率", this.getBonusPointRate(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    SICheckValid.checkValid(errors, "ボーナス設定日", this.getSetDateOfBonus(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ボーナス設定日", this.getSetDateOfBonus(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    SICheckValid.checkValid(errors, "ボーナス設定期間FROM", this.getBonusFromDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    
    SICheckValid.checkValid(errors, "ボーナス設定期間TO", this.getBonusToDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    
    try{
      if(SIUtil.isNotNull(this.getBonusFromDate()) && SIUtil.isNotNull(this.getBonusToDate()) && 
        !SICheckUtil.dateEqual(this.getBonusFromDate(),this.getBonusToDate())){
        SICheckValid.checkValid(errors, "ボーナス設定期間FROM", "ボーナス設定期間TO", this.getBonusFromDate(), this.getBonusToDate(), SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }   
    }catch(Exception e){
      log.debug(e);
    }
    
    SICheckValid.checkValid(errors, "ポイント使用期限(最終購入日からxxヶ月)", this.getPeriod(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ポイント使用期限(最終購入日からxxヶ月)", this.getPeriod(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  /**
   * reset
   * 入力したデータを基づいて、このbeansを設定します。
   * @param request データベースへのコネクション
   * @return
   * @throws SIDBAccessException
   */
  public void reset(Connection lConnection) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlBuf = new StringBuffer();
    
    //基本のSQL
    lSqlBuf.append(" SELECT * FROM pointshopMTbl WHERE 1=1 ");
    
    SITableConditionManager lConditionMan = new SITableConditionManager();
    SITableCondition DD = new SITableCondition("", "mallshopcode", SIConfig.SIMALL.getMallShopCode(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    lSqlBuf.append(lConditionMan.getCondtionSQL());
    
    log.debug("lSqlBuf=" + lSqlBuf.toString());
    
    //実行
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      //商品レコードのセットの作成
      if (lResultSet.next()) {
        this.setEncode(SIConfig.SIENCODE_NONE);
        this.setMallShopCode(lResultSet.getString("mallshopcode"));
        this.setMinCost(lResultSet.getString("mincost"));
        this.setPointRate(SIStringUtil.split(lResultSet.getString("pointrate"), ".")[0]);
        this.setInitPoint(lResultSet.getString("initpoint"));
        this.setSetDateOfBonus(lResultSet.getString("SetDateOfBonus"));
        this.setBonusFromDate(SIDBUtil.getDate(lResultSet.getTimestamp("BonusFromDate")));
        this.setStndrdOfIssue(lResultSet.getString("stndrdOfIssue"));
        this.setBonusToDate(SIDBUtil.getDate(lResultSet.getTimestamp("BonusToDate")));
        this.setBonusPointRate(SIStringUtil.split(lResultSet.getString("BonusPointRate"), ".")[0]);
        this.setPeriod(lResultSet.getString("Period"));
        this.setSpecialRate(lResultSet.getString("specialRate"));
      }
    } catch (Exception ex) {
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
  }
  
  /**
   * @return
   */
  public String getBonusFromDate() {
    return bonusFromDate;
  }
  
  /**
   * @return
   */
  public String getBonusPointRate() {
    return bonusPointRate;
  }
  
  /**
   * @return
   */
  public String getBonusToDate() {
    return bonusToDate;
  }
  
  /**
   * @return
   */
  public String getInitPoint() {
    return initPoint;
  }
  
  /**
   * @return
   */
  public String getMallShopCode() {
    return mallShopCode;
  }
  
  /**
   * @return
   */
  public String getMinCost() {
    return minCost;
  }
  
  /**
   * @return
   */
  public String getPeriod() {
    return period;
  }
  
  /**
   * @return
   */
  public String getPointRate() {
    return pointRate;
  }
  
  /**
   * @return
   */
  public String getSetDateOfBonus() {
    return setDateOfBonus;
  }
  
  /**
   * @return
   */
  public String getStndrdOfIssue() {
    return stndrdOfIssue;
  }
  
  /**
   * @param string
   */
  public void setBonusFromDate(String string) {
    if (SIUtil.isNull(string))
      string = "";
    this.bonusFromDate = SIUtil.changeTo(string.trim(), this.encode);
    if (SIUtil.isNotNull(string)) {
      String[] lDateList = SIStringUtil.split(string, "/");
      if (lDateList.length == 3) {
        this.setBonusFromDateYear(lDateList[0]);
        this.setBonusFromDateMonth((lDateList[1].length() == 2) ? lDateList[1] : "0" + lDateList[1]);
        this.setBonusFromDateDay((lDateList[2].length() == 2) ? lDateList[2] : "0" + lDateList[2]);
      }
    }
  }
  
  /**
   * @param string
   */
  public void setBonusPointRate(String string) {
    if (SIUtil.isNull(string)) string="";
    this.bonusPointRate=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @param string
   */
  public void setBonusToDate(String string) {
    if (SIUtil.isNull(string)) string = "";
    this.bonusToDate = SIUtil.changeTo(string.trim(), this.encode);
    if (SIUtil.isNotNull(string)) {
      String[] lDateList = SIStringUtil.split(string, "/");
      if (lDateList.length == 3) {
        this.setBonusToDateYear(lDateList[0]);
        this.setBonusToDateMonth((lDateList[1].length() == 2) ? lDateList[1] : "0" + lDateList[1]);
        this.setBonusToDateDay((lDateList[2].length() == 2) ? lDateList[2] : "0" + lDateList[2]);
      }
    }
  }
  
  /**
   * @param string
   */
  public void setInitPoint(String string) {
    if (SIUtil.isNull(string)) string="";
    this.initPoint=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @param string
   */
  public void setMallShopCode(String string) {
    if (SIUtil.isNull(string)) string="";
    this.mallShopCode=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @param string
   */
  public void setMinCost(String string) {
    if (SIUtil.isNull(string)) string="";
    this.minCost=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @param string
   */
  public void setPeriod(String string) {
    if (SIUtil.isNull(string)) string="";
    this.period=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @param string
   */
  public void setPointRate(String string) {
    if (SIUtil.isNull(string)) string="";
    this.pointRate=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @param string
   */
  public void setSetDateOfBonus(String string) {
    if (SIUtil.isNull(string)) string="";
    this.setDateOfBonus=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @param string
   */
  public void setStndrdOfIssue(String string) {
    if (SIUtil.isNull(string)) string="";
    this.stndrdOfIssue=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @param string
   */
  public void setDispMode(String string) {
    if (SIUtil.isNull(string)) string="";
    this.dispMode=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @return
   */
  public String getBonusFromDateDay() {
    return bonusFromDateDay;
  }
  
  /**
   * @return
   */
  public String getBonusFromDateMonth() {
    return bonusFromDateMonth;
  }
  
  /**
   * @return
   */
  public String getBonusFromDateYear() {
    return bonusFromDateYear;
  }
  
  /**
   * @return
   */
  public Category getLog() {
    return log;
  }
  
  /**
   * @param string
   */
  public void setBonusFromDateDay(String string) {
    bonusFromDateDay = string;
  }
  
  /**
   * @param string
   */
  public void setBonusFromDateMonth(String string) {
    bonusFromDateMonth = string;
  }
  
  /**
   * @param string
   */
  public void setBonusFromDateYear(String string) {
    bonusFromDateYear = string;
  }
  
  /**
   * @param category
   */
  public void setLog(Category category) {
    log = category;
  }
  
  /**
   * @return
   */
  public String getBonusToDateDay() {
    return bonusToDateDay;
  }
  
  /**
   * @return
   */
  public String getBonusToDateMonth() {
    return bonusToDateMonth;
  }
  
  /**
   * @return
   */
  public String getBonusToDateYear() {
    return bonusToDateYear;
  }
  
  /**
   * @param string
   */
  public void setBonusToDateDay(String string) {
    bonusToDateDay = string;
  }
  
  /**
   * @param string
   */
  public void setBonusToDateMonth(String string) {
    bonusToDateMonth = string;
  }
  
  /**
   * @param string
   */
  public void setBonusToDateYear(String string) {
    bonusToDateYear = string;
  }
  
  public String getDispMode() {
    return this.dispMode;
  }
  
  public String getSpecialRate() {
    return specialRate;
  }
  
  public void setSpecialRate(String specialRate) {
    if (SIUtil.isNull(specialRate)) specialRate = "";
    this.specialRate = specialRate;
  }
}