/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
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.SIUser;
import jp.co.sint.basic.SILogin;
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.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIURLParameter;

import org.apache.log4j.Category;

/**
 * @version $Id : UIRegUserEdit.java,v 1.0 Exp $
 * <br>Description :管理ユーザマスタの編集画面に対するbeansクラスを作成します。
 */

public class UIRegUserEdit extends SIUser{
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  /**
   * UIRegUserEdit
   * コンストラクタ
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIRegUserEdit(){}
  
  /**
   * init
   * 入力したデータから、このbeansを設定します。
   * @param SIURLParameter
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam, SILogin lLogin) {
    super.init(lRequest,lUrlParam);
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    this.setShopCode(lLogin.getMallShopCode());//ショップコード
    this.setShopName((String)lUrlParam.getParam("ShopName"));//ショップ名
    this.setUserCode((String)lUrlParam.getParam("UserCode"));//ユーザーコード
    this.setUserName((String)lUrlParam.getParam("userName"));//名前
    this.setPassWord((String)lUrlParam.getParam("password"));//パスワード
    this.setPassWordConfirm((String)lUrlParam.getParam("passwordConfirm"));//パスワード
    this.setMemo((String)lUrlParam.getParam("memo"));
    this.setLoginErrCount((String)lUrlParam.getParam("loginErrCount"));
    if (this.getShopCode().equals("0") && this.getUserCode().equals(SIConfig.ADIMISTRATOR_ACOUNT)) {
      this.setMngOrder("1");
      this.setMngOrderCsv("1");
      this.setMngOrderPdf("1");
      this.setMngCust("1");
      this.setMngCustCsv("1");
      this.setMngCustPdf("1");
      this.setMngCustDelPoint("1");
      this.setMngCustAddPoint("1");
      this.setMngBaseInfo("1");
      this.setMngUserMst("1");
      this.setMngAccesslog("1");
      this.setMngCmdty("1");
      this.setMngCmdtyCsv("1");
      this.setMngAnalysis("1");
      this.setMngAnalysisCsv("1");
      this.setMngCmn("1");
      this.setMngDataIo("1");
      this.setMngDataInputCsv("1");
      this.setMngDataOutputCsv("1");
      this.setMngStock("1");
      this.setMngCmdtyLevel("3");
      this.setMngDataIoExcel("1");
      this.setMngCmdtyPoint("1");
      this.setMngNews("0");
      this.setMngCmdtyDisable("1");
      this.setMngCmdtyStock("1");
      this.setMngPurchase("1");
      this.setMngPurchaseLevel("3");
      this.setMngPurchaseExecute("1");
      this.setMngDataInputManager("1");
      this.setMngDataInputWarehouse("1");
      this.setMngDataOutputWarehouse("1");
      this.setMngOrderCard("1");
      this.setMngCmdtyJan("1");
      this.setMngOrderReserve("1");
      this.setUserType("0");
      this.setStorageCode("");
      this.setBranchCode("");
    }else{
      this.setMngOrder((String)lUrlParam.getParam("mngOrder"));
      this.setMngOrderCsv((String)lUrlParam.getParam("mngOrderCsv"));
      this.setMngOrderPdf((String)lUrlParam.getParam("mngOrderPdf"));
      this.setMngCust((String)lUrlParam.getParam("mngCust"));
      this.setMngCustCsv((String)lUrlParam.getParam("mngCustCsv"));
      this.setMngCustPdf((String)lUrlParam.getParam("mngCustPdf"));
      this.setMngCustDelPoint((String)lUrlParam.getParam("mngCustDelPoint"));
      this.setMngCustAddPoint((String)lUrlParam.getParam("mngCustAddPoint"));
      this.setMngBaseInfo((String)lUrlParam.getParam("mngBaseInfo"));
      this.setMngUserMst((String)lUrlParam.getParam("mngUserMst"));
      this.setMngAccesslog((String)lUrlParam.getParam("mngAccesslog"));
      this.setMngCmdty((String)lUrlParam.getParam("mngCmdty"));
      this.setMngCmdtyCsv((String)lUrlParam.getParam("mngCmdtyCsv"));
      this.setMngAnalysis((String)lUrlParam.getParam("mngAnalysis"));
      this.setMngAnalysisCsv((String)lUrlParam.getParam("mngAnalysisCsv"));
      this.setMngCmn((String)lUrlParam.getParam("mngCmn"));
      this.setMngDataIo((String)lUrlParam.getParam("mngDataIo"));
      this.setMngDataInputCsv((String)lUrlParam.getParam("mngDataInputCsv"));
      this.setMngDataOutputCsv((String)lUrlParam.getParam("mngDataOutputCsv"));
      this.setMngStock((String)lUrlParam.getParam("mngStock"));
      this.setMngCmdtyLevel((String)lUrlParam.getParam("mngCmdtyLevel"));
      this.setMngDataIoExcel((String)lUrlParam.getParam("mngDataIoExcel"));
      this.setMngCmdtyPoint((String)lUrlParam.getParam("mngCmdtyPoint"));
      this.setMngNews((String)lUrlParam.getParam("mngNews"));
      this.setMngCmdtyDisable((String)lUrlParam.getParam("mngCmdtyDisable"));
      this.setMngCmdtyStock((String)lUrlParam.getParam("mngCmdtyStock"));
      this.setMngPurchase((String)lUrlParam.getParam("mngPurchase"));
      this.setMngPurchaseLevel((String)lUrlParam.getParam("mngPurchaseLevel"));
      this.setMngPurchaseExecute((String)lUrlParam.getParam("mngPurchaseExecute"));
      this.setMngDataInputManager((String)lUrlParam.getParam("mngDataInputManager"));
      this.setMngDataInputWarehouse((String)lUrlParam.getParam("mngDataInputWarehouse"));
      this.setMngDataOutputWarehouse((String)lUrlParam.getParam("mngDataOutputWarehouse"));
      this.setMngOrderCard((String)lUrlParam.getParam("mngOrderCard"));
      this.setMngCmdtyJan((String)lUrlParam.getParam("mngCmdtyJan"));
      this.setMngOrderReserve((String)lUrlParam.getParam("mngOrderReserve"));
      this.setUserType((String)lUrlParam.getParam("userType"));
      if ("1".equals(this.getUserType())) {
        this.setMngOrder("1");
        this.setMngCmdty("1");
        this.setStorageCode((String)lUrlParam.getParam("storageCode"));
        this.setBranchCode("999");
      }else if ("2".equals(this.getUserType())) {
        this.setMngOrder("1");
        this.setBranchCode((String)lUrlParam.getParam("branchCode"));
      }
    }
  }
  /**
   * reset
   * 入力したデータを基づいて、このbeansを設定します。
   * @param lConnection データベースへのコネンクション
   * @return
   * @throws SIDBAccessException
   */
  public void reset(Connection lConnection) {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlStatement = new StringBuffer();
    
    //基本のSQL
    lSqlStatement.append(" SELECT * FROM MNGUSERMTBL ");
    lSqlStatement.append(" WHERE MallShopCode="+SIDBUtil.SQL2Str(this.getShopCode()));
    lSqlStatement.append(" AND   UserCode="+SIDBUtil.SQL2Str(this.getUserCode()));
    
    //実行
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlStatement.toString());
      
      if (lResultSet.next()) {
        this.setEncode(SIConfig.SIENCODE_NONE);
        this.setShopCode(lResultSet.getString("MallShopCode"));
        this.setUserCode(lResultSet.getString("UserCode"));
        this.setUserName(lResultSet.getString("UserName"));
        this.setPassWord(lResultSet.getString("Password"));
        this.setPassWordConfirm(this.getPassWord());
        this.setMemo(lResultSet.getString("Memo"));
        this.setMngOrder(lResultSet.getString("MngOrder"));
        this.setMngOrderCsv(lResultSet.getString("MngOrderCsv"));
        this.setMngOrderPdf(lResultSet.getString("MngOrderPdf"));
        this.setMngCust(lResultSet.getString("MngCust"));
        this.setMngCustCsv(lResultSet.getString("MngCustCsv"));
        this.setMngCustPdf(lResultSet.getString("MngCustPdf"));
        this.setMngCustDelPoint(lResultSet.getString("MngCustDelPoint"));
        this.setMngCustAddPoint(lResultSet.getString("MngCustAddPoint"));
        this.setMngBaseInfo(lResultSet.getString("MngBaseInfo"));
        this.setMngUserMst(lResultSet.getString("MngUserMst"));
        this.setMngAccesslog(lResultSet.getString("MngAccesslog"));
        this.setMngCmdty(lResultSet.getString("MngCmdty"));
        this.setMngCmdtyCsv(lResultSet.getString("MngCmdtyCsv"));
        this.setMngAnalysis(lResultSet.getString("MngAnalysis"));
        this.setMngAnalysisCsv(lResultSet.getString("MngAnalysisCsv"));
        this.setMngCmn(lResultSet.getString("MngCmn"));
        this.setMngDataIo(lResultSet.getString("MngDataIo"));
        this.setMngDataInputCsv(lResultSet.getString("MngDataInputCsv"));
        this.setMngDataOutputCsv(lResultSet.getString("MngDataOutputCsv"));
        this.setLoginErrCount(lResultSet.getString("LoginErrorCount"));
        this.setMngStock(lResultSet.getString("MngStock"));
        this.setMngCmdtyLevel(lResultSet.getString("MngCmdtyLevel"));
        this.setMngDataIoExcel(lResultSet.getString("MngDataIoExcel"));
        this.setMngCmdtyPoint(lResultSet.getString("mngCmdtyPoint"));
        this.setMngNews(lResultSet.getString("mngNews"));
        this.setMngCmdtyDisable(lResultSet.getString("mngCmdtyDisable"));
        this.setMngCmdtyStock(lResultSet.getString("mngCmdtyStock"));
        this.setMngPurchase(lResultSet.getString("mngPurchase"));
        this.setMngPurchaseLevel(lResultSet.getString("mngPurchaseLevel"));
        this.setMngPurchaseExecute(lResultSet.getString("mngPurchaseExecute"));
        this.setMngDataInputManager(lResultSet.getString("mngDataInputManager"));
        this.setMngDataInputWarehouse(lResultSet.getString("mngDataInputWarehouse"));
        this.setMngDataOutputWarehouse(lResultSet.getString("mngDataOutputWarehouse"));
        this.setMngOrderCard(lResultSet.getString("mngOrderCard"));
        this.setMngCmdtyJan(lResultSet.getString("mngCmdtyJan"));
        this.setMngOrderReserve(lResultSet.getString("mngOrderReserve"));
        this.setUserType(lResultSet.getString("userType"));
        this.setStorageCode(lResultSet.getString("storageCode"));
        this.setBranchCode(lResultSet.getString("branchCode"));
      } else {
        this.setShopCode("");
        this.setUserCode("");
        this.setUserName("");
        this.setPassWord("");
        this.setPassWordConfirm("");
        this.setMemo("");
        this.setMngOrder("0");
        this.setMngOrderCsv("0");
        this.setMngOrderPdf("0");
        this.setMngCust("0");
        this.setMngCustCsv("0");
        this.setMngCustPdf("0");
        this.setMngCustDelPoint("0");
        this.setMngCustAddPoint("0");
        this.setMngBaseInfo("0");
        this.setMngUserMst("0");
        this.setMngAccesslog("0");
        this.setMngCmdty("0");
        this.setMngCmdtyCsv("0");
        this.setMngAnalysis("0");
        this.setMngAnalysisCsv("0");
        this.setMngCmn("0");
        this.setMngDataIo("0");
        this.setMngDataInputCsv("0");
        this.setMngDataOutputCsv("0");
        this.setLoginErrCount("0");
        this.setMngStock("0");
        this.setMngCmdtyLevel("0");
        this.setMngDataIoExcel("0");
        this.setMngCmdtyPoint("0");
        this.setMngNews("0");
        this.setMngCmdtyDisable("0");
        this.setMngCmdtyStock("0");
        this.setMngPurchase("0");
        this.setMngPurchaseLevel("0");
        this.setMngPurchaseExecute("0");
        this.setMngDataInputManager("0");
        this.setMngDataInputWarehouse("0");
        this.setMngDataOutputWarehouse("0");
        this.setMngOrderCard("0");
        this.setMngCmdtyJan("0");
        this.setMngOrderReserve("0");
        this.setUserType("0");
        this.setStorageCode("");
        this.setBranchCode("");
      }
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
  }
  
  /**
   * <b>init</b>
   * 入力したデータを取得します。
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void initDelete(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    this.setShopCode((String)lUrlParam.getParam("ShopCode"));//ショップコード
    this.setUserCode((String)lUrlParam.getParam("UserCode"));//ユーザーコード
  }

  /**
   * 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();
    
    //管理者ID-----
    //必須チェック・妥当性チェック
    SICheckValid.checkValid(errors, "管理者ID", getUserCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "管理者ID", getUserCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    //重複チェック
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
      StringBuffer lSqlBuf = new StringBuffer();lSqlBuf.append("SELECT UserCode FROM MNGUSERMTBL ");
      lSqlBuf.append("WHERE MallShopCode="+SIDBUtil.SQL2Str(this.getShopCode()," "));
      lSqlBuf.append("AND   UserCode="+SIDBUtil.SQL2Str(this.getUserCode()," "));
      SICheckValid.checkNotExist(errors,lConnection,"管理者ID",lSqlBuf.toString());
      if ("1".equals(this.getUserType())) {
        lSqlBuf = new StringBuffer();lSqlBuf.append("SELECT ChargeCode FROM ChargeTbl ");
        lSqlBuf.append("WHERE ChargeCode="+SIDBUtil.SQL2Str(this.getUserCode()," "));
        SICheckValid.checkExist(errors,lConnection,"担当者コード",lSqlBuf.toString());
      }
    }
    SICheckValid.checkValid(errors, "管理ユーザ名", this.getUserName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "管理ユーザ名", this.getUserName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 40);
    
    SICheckValid.checkValid(errors, "パスワード", this.getPassWord(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "パスワード", this.getPassWord(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, SIConfig.SIMinimumPassword, 16);
    
    SICheckValid.checkValid(errors, "備考", this.getMemo(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 400);
    
    SICheckValid.checkValid(errors, "ログインエラー回数", this.getLoginErrCount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    
    if ("1".equals(this.getUserType())){
      SICheckValid.checkValid(errors, "預け先", this.getStorageCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if ("2".equals(this.getUserType())){
      SICheckValid.checkValid(errors, "拠点", this.getBranchCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if (!this.getPassWord().equals(this.getPassWordConfirm())){
      errors.addError(new SICustomError("input.data.match","パスワード","パスワード確認"));
    }
    if (!errors.isEmpty())lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
}
