/**
 * Copyright (c) 2003-2005 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.beans.mallmgr;

import java.sql.Connection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SICharge;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
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.SIUtil;
import jp.co.sint.tools.SIURLParameter;

import org.apache.log4j.Category;


public class UIRegCharge extends SICharge{
  
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  //修正と削除用の担当者コード
  private String regChargeCodeTxt="";
  
  //修正と削除用の担当者名
  private String regChargeNameTxt="";
  
  //修正と削除用のメールアドレス
  private String regEmailTxt="";
  
  //修正と削除用の所属支店コード
  private String regBelongingBranchCodeTxt="";
  
  //表示フラグ
  private String regEnableFlg = "0";
  
  //本社フラグ
  private String regOtherAddrFlg = "0";
  
  //更新するレコードの行号
  private String regRowNumTxt="";
  
  /**
   * UIRegCharge
   * コンストラクタ
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIRegCharge(){}
  
  //setter of 修正と削除用の担当者コード
  public void setRegChargeCodeTxt(String lRegChargeCodeTxt){
    if (SIUtil.isNull(lRegChargeCodeTxt)) lRegChargeCodeTxt="";
    this.regChargeCodeTxt = SIUtil.changeTo(lRegChargeCodeTxt.trim(),this.encode);
  }
  
  //setter of 修正と削除用の担当者名
  public void setRegChargeNameTxt(String lRegChargeNameTxt){
    if (SIUtil.isNull(lRegChargeNameTxt)) lRegChargeNameTxt="";
    this.regChargeNameTxt = SIUtil.changeTo(lRegChargeNameTxt.trim(),this.encode);
  }
  
  //setter of 修正と削除用のメールアドレス
  public void setRegEmailTxt(String lRegEmailTxt){
    if (SIUtil.isNull(lRegEmailTxt)) lRegEmailTxt="";
    this.regEmailTxt = SIUtil.changeTo(lRegEmailTxt.trim(),this.encode);
  }
  
  //setter of 削除と新規作成用の所属支店コード
  public void setRegBelongingBranchCodeTxt(String lRegBelongingBranchCodeTxt){
    if (SIUtil.isNull(lRegBelongingBranchCodeTxt)) lRegBelongingBranchCodeTxt="";
    this.regBelongingBranchCodeTxt = SIUtil.changeTo(lRegBelongingBranchCodeTxt.trim(),this.encode);
  }
  
  //setter of 修正と削除用の行号
  public void setRegRowNumTxt(String lRegRowNumTxt){
    if (SIUtil.isNull(lRegRowNumTxt)) lRegRowNumTxt="";
    this.regRowNumTxt = SIUtil.changeTo(lRegRowNumTxt.trim(),this.encode);
  }
  
  //setter of 表示フラグ
  public void setRegEnableFlg(String regEnableFlg) {
    if (SIUtil.isNull(regEnableFlg)) regEnableFlg = "0";
    this.regEnableFlg = regEnableFlg;
  }
  
  //setter of 本社フラグ
  public void setRegOtherAddrFlg(String regOtherAddrFlg) {
    if (SIUtil.isNull(regOtherAddrFlg)) regOtherAddrFlg = "0";
    this.regOtherAddrFlg = regOtherAddrFlg;
  }
  
  //getter of 修正と削除用の担当者コード
  public String getRegChargeCodeTxt(){
    return this.regChargeCodeTxt;
  }
  
  //getter of 修正と削除用の担当者名
  public String getRegChargeNameTxt(){
    return this.regChargeNameTxt;
  }
  
  //getter of 修正と削除用のメールアドレス
  public String getRegEmailTxt(){
    return this.regEmailTxt;
  }
  
  //getter of 削除用の所属支店コード
  public String getRegBelongingBranchCodeTxt(){
    return this.regBelongingBranchCodeTxt;
  }
  
  //getter of 修正と削除用の行号
  public String getRegRowNumTxt(){
    return this.regRowNumTxt;
  }
  
  //getter of 表示フラグ
  public String getRegEnableFlg() {
    return regEnableFlg;
  }
  
  //getter of 本社フラグ
  public String getRegOtherAddrFlg() {
    return regOtherAddrFlg;
  }
  
  /**
   * <b>initInsert</b>
   * 入力した新規レコードのデータを取得します。
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void initInsert(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    this.setRegChargeCodeTxt((String)lUrlParam.getParam("chargeCodeTxt"));//担当者コード
    this.setRegChargeNameTxt((String)lUrlParam.getParam("chargeNameTxt"));//担当者名
    this.setRegEmailTxt((String)lUrlParam.getParam("emailTxt"));//メールアドレス
    this.setRegBelongingBranchCodeTxt((String)lUrlParam.getParam("belongingBranchNameTxt"));//所属支店コード
  }
  
  /**
   * <b>initModify</b>
   * 入力した既存レコードのデータを取得します。
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void initModify(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    this.setRegChargeCodeTxt((String)lUrlParam.getParam("regChargeCodeTxt"));//担当者コード
    this.setRegRowNumTxt((String)lUrlParam.getParam("regRowNumTxt"));//行号
    if (SIUtil.isNotNull(this.getRegRowNumTxt())){
      this.setRegChargeNameTxt((String)lUrlParam.getParam(SIConfig.SIPREFIX_CHARGE_NAME_TEXT+this.getRegRowNumTxt()+"Txt"));
      this.setRegEmailTxt((String)lUrlParam.getParam("email"+this.getRegRowNumTxt()+"Txt"));
      this.setRegEnableFlg((String)lUrlParam.getParam("enableFlg"+this.getRegRowNumTxt()));
      this.setRegOtherAddrFlg((String)lUrlParam.getParam("otherAddrFlg"+this.getRegRowNumTxt()));
    }
  }
  
  /**
   * <b>initDelete</b>
   * 入力した既存レコードのデータを取得します。
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void initDelete(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    this.setRegChargeCodeTxt((String)lUrlParam.getParam("regChargeCodeTxt"));//担当者コード
    this.setRegBelongingBranchCodeTxt((String)lUrlParam.getParam("regBelongingBranchCodeTxt"));//所属支店コード
  }
  
  /**
   * <b>validateInsert</b
   * 入力した新規レコードのデータをチェックします。
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  
  public boolean validateInsert(HttpServletRequest lRequest,Connection lConnection){
    SICustomErrors errors=new SICustomErrors();
    
    //担当者コード
    SICheckValid.checkValid(errors,"担当者コード",getRegChargeCodeTxt(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors,"担当者コード",getRegChargeCodeTxt(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 5);
    
    //重複レコードがあるかどうかをチェックします
    SICheckValid.checkDuplicate(errors,lConnection,"担当者コード","SELECT ChargeCode FROM ChargeTbl WHERE ChargeCode="+SIDBUtil.SQL2Str(getRegChargeCodeTxt()));
    
    //担当者名
    SICheckValid.checkValid(errors,"担当者名",getRegChargeNameTxt(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors,"担当者名",getRegChargeNameTxt(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 24);
    
    //メールアドレス
    SICheckValid.checkValid(errors,"メールアドレス",getRegEmailTxt(),SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors,"メールアドレス",getRegEmailTxt(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,128);
    
    //所属支店コード
    SICheckValid.checkValid(errors,"所属支店",getRegBelongingBranchCodeTxt(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    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){
    return validateModify(lRequest,null);
  }
  public boolean validateModify(HttpServletRequest lRequest,Connection lConnection){
    SICustomErrors errors=new SICustomErrors();
    
    //担当者名
    SICheckValid.checkValid(errors,"担当者名",getRegChargeNameTxt(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors,"担当者名",getRegChargeNameTxt(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 24);
    
    //メールアドレス
    SICheckValid.checkValid(errors,"メールアドレス",getRegEmailTxt(),SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors,"メールアドレス",getRegEmailTxt(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,128);
    
    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();
    
    //外部のキーのデータレコードのチェック用のSQL文の作成
    StringBuffer lSqlBuf=new StringBuffer();
    lSqlBuf.append("SELECT ChargeCode FROM ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME);
    lSqlBuf.append(" WHERE ChargeCode="+SIDBUtil.SQL2Str(getRegChargeCodeTxt()));
    
    try {
      boolean isLocked=SIDBUtil.hasData(lConnection,lSqlBuf.toString());
      if (isLocked){
        errors.addError(new SICustomError("database.query.exist","担当者に紐づく受注"));
      }
    } catch (SIDBAccessException e) {
      e.printStackTrace();
      errors.addError(new SICustomError("database.execute.error"));
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK,errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK);
    
    return errors.isEmpty();
  }
}
