/*
 * Created on 2003/11/26
 */
package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SICustqa;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @author tosaka
 * UIRegCustqa
 */
public class UIRegCustqa extends SICustqa {
  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  public UIRegCustqa() {}
  
  /**
   * init
   * 入力したデータから、このbeansを設定します。
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return なし
   * @throws なし
   */
  //7.1.1 ST0236 修正 ここから
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest,lUrlParam);
    this.setCustQACode((String)lUrlParam.getParam("custQACode"));    //問い合わせID
    this.setATile((String)lUrlParam.getParam("atitleTxt"));
    this.setADescription((String)lUrlParam.getParam("adescriptionTxt"));
    this.setASignature((String)lUrlParam.getParam("asignatureTxt"));
    this.setEncode(SIConfig.SIENCODE_NONE);
  }
  //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) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    SICheckValid.checkValid(errors, "返信タイトル", this.getATile(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "返信タイトル", this.getATile(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    SICheckValid.checkValid(errors, "返信本文", this.getADescription(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2000);
    SICheckValid.checkValid(errors, "返信署名", this.getASignature(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 1000);
    
    if (!errors.isEmpty())
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  /**
   * reset
   * 修正モードの場合には、PKのデータを元に、明細データをデータベースから取り込んで
   * 画面に表示します。
   * @param lConnection データベースへのコネンクション
   * @return なし
   * @throws なし
   */
  public boolean reset(Connection lConnection) {
    boolean lResult = false;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlBuf=new StringBuffer();
    
    //基本のSQL
    lSqlBuf.append("SELECT a.*,b.CustName, c.FrontShopName,c.DepartName,c.ChargeUserName FROM CustQaTbl a,");
    lSqlBuf.append("CustTbl b, ");
    lSqlBuf.append("MallShopMTbl c ");
    lSqlBuf.append("WHERE a.CustQACode=").append(SIDBUtil.SQL2Str(this.getCustQACode()," "));
    lSqlBuf.append("AND a.CustCode=b.CustCode ");
    lSqlBuf.append("AND a.MallShopCode=c.MallShopCode ");
    log.debug("sqlStatement="+lSqlBuf.toString());
    
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      if (lResultSet.next()) {
        this.setEncode(SIConfig.SIENCODE_NONE);
        this.setCustQACode(lResultSet.getString("custQACode"));
        this.setMallShopCode(lResultSet.getString("mallShopCode"));
        this.setCustCode(lResultSet.getString("custCode"));
        this.setQTile(lResultSet.getString("qTile"));
        this.setQDescription(lResultSet.getString("qDescription"));
        this.setQSignature(lResultSet.getString("qSignature"));
        if(SIUtil.isNotNull(lResultSet.getString("qInitDateTime"))){
          this.setQInitDateTime(SIDBUtil.getDateTime(lResultSet.getTimestamp("qInitDateTime")));
        }
        this.setATile(lResultSet.getString("aTile"));
        this.setADescription(lResultSet.getString("aDescription"));
        this.setASignature(lResultSet.getString("aSignature"));
        if(SIUtil.isNotNull(lResultSet.getString("aInitDateTime"))){
          this.setAInitDateTime(SIDBUtil.getDateTime(lResultSet.getTimestamp("aInitDateTime")));
        }
        this.setCustName(lResultSet.getString("custName"));
        
        this.setFrontShopName(lResultSet.getString("frontShopName"));
        this.setDepartName(lResultSet.getString("DepartName"));
        this.setChargeUserName(lResultSet.getString("ChargeUserName"));
        
        lResult = true;
      }
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    }finally{
      SIDBUtil.close(lStatement, lResultSet);
    }
    return lResult;
  }
}
