/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.basic;
//7.3.0 ST2022 追加 ここから
import javax.servlet.http.HttpServletRequest;
import java.sql.*;
import java.util.*;

import org.apache.log4j.Category;

import jp.co.sint.database.SIDBUtil;
//7.3.0 ST2022 追加 ここまで
import jp.co.sint.config.SIConfig;
import jp.co.sint.tools.SIUtil;

/**
 * @version $Id: SILogin.java,v 1.0 2003/10/02 Exp $
 * @author  Jinwang Chen
* <br>Description:
 * <p>History</p>
 * <p>Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason</p>
 *  ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * Jinwang Chen   2003/10/02 9:45:25  Original
 */
//7.3.0 ST2022 修正 ここから
//public class SILogin extends SIMallShop{
public class SILogin extends SIUser{
//ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  private static ResourceBundle SecurityMapBundle=ResourceBundle.getBundle(SIConfig.SICONFIG_SECURITY_FILE_NAME,new Locale("ja","JP"));
//7.3.0 ST2022 修正 ここまで
  public SILogin(){}

  /**
   * <b>isLogin</b>
   * ログインかどうかをチェックします。
   * @param なし
   * @return ログインかどうかの状況
   * @throws なし
   */
  public boolean isLogin(){
    if (SIUtil.isNotNull(getAdminName())) return true;
    else return false;
  }
  
  //7.3.0 ST2022 追加 ここから
  /**
   * <b>isLogin</b>
   * ログインかどうかをチェックします。
   * @param HttpServletRequest request
   * @return ログインとセキュリティ権限チェック
   * @throws なし
   */
  public boolean isLogin(HttpServletRequest request){
    String url = request.getServletPath();
    if(url.startsWith("/"))url=url.substring(1);
    try{
      String res = SecurityMapBundle.getString(url);
      if(res.equals(SIConfig.OrderMenu)){
        if(getMngOrder().equals("1"))return true;
        else return false;
      }else if(res.equals(SIConfig.PurchaseMenu)){
        if(getMngPurchase().equals("1"))return true;
        else return false;
      }else if(res.equals(SIConfig.CustMenu)){
        if(getMngCust().equals("1"))return true;
        else return false;
      }else if(res.equals(SIConfig.BaseInfoMenu)){
        if(getMngBaseInfo().equals("1"))return true;
        else return false;
      }else if(res.equals(SIConfig.CmdtyMenu)){
        if(getMngCmdty().equals("1"))return true;
        else return false;
      }else if(res.equals(SIConfig.AnalysisMenu)){
        if(getMngAnalysis().equals("1"))return true;
        else return false;
      }else if(res.equals(SIConfig.ComunicationMenu)){
        if(getMngCmn().equals("1"))return true;
        else return false;
      }else if(res.equals(SIConfig.DataIoMenu)){
        if(getMngDataIo().equals("1"))return true;
        else return false;
      }else if(res.equals(SIConfig.CsvIoMenu)){
        if(getMngDataIo().equals("1"))return true;
        else return false;
      }else{
        return false;
      }
    }catch(MissingResourceException me){
      return isLogin();
    }
  }
  //7.3.0 ST2022 追加 ここまで
  /**
   * <b>isMallShop</b>
   * モールまたはショップのフラグを取得します。
   * @param なし
   * @return モールまいたはショップを指すフラグ
   * @throws なし
   */
  private int isMallShop(){
    try{
      return Integer.parseInt(getMallShopFlg());
    }catch(Exception e){
      return -1;
    }
  }

  /**
   * <b>isRunningModeCode</b>
   * 運営モードを取得します。
   * @param なし
   * @return 運営モード
   * @throws なし
   */
  private int isRunningModeCode(){
    try{
      return Integer.parseInt(getRunningModeCode());
    }catch(Exception e){
      return -1;
    }
  }
  /**
   * <b>isAdmin</b>
   * 最高権限ユーザかを判断する
   * @param なし
   * @return 運営モード
   * @throws なし
   */
  public boolean isAdmin(){
    if(this.getMallShopCode().equals("0")&&this.getUserCode().equals(SIConfig.ADIMISTRATOR_ACOUNT)){
      return true;
    }else{
      return false;
    }
  }

  /**
   * <b>isShop</b>
   * 管理区分がショップ区分でかどうかをチェックします。
   * @param なし
   * @return true ショップ区分 false 非ショップ
   * @throws なし
   */
  public boolean isShop(){
    if (isMallShop()==SIConfig.SIMALLSHOP_SHOP_FLAG ) return true;
    else return false;
  }

  public boolean isMall(){
    if (isMallShop()==SIConfig.SIMALLSHOP_MALL_FLAG ) return true;
    else return false;
  }

  public boolean isTogether(){
    if (isRunningModeCode()==SIConfig.SIRUNNING_MODE_TOGETHER) return true;
    else return false;
  }

  public boolean isIndividual(){
    if (isRunningModeCode()==SIConfig.SIRUNNING_MODE_INDIVIDUAL ) return true;
    else return false;
  }

  public boolean isOneShop(){
    if (isRunningModeCode()==SIConfig.SIRUNNING_MODE_SHOP ) return true;
    else return false;
  }

  /**
   * <b>getAdminType</b>
   * ログイン者の区分を返します。
   * モール一括時：モールログインorショップログイン,
   * ショップ個別時:モールログインorショップログイン,
   * 一店舗版時
   * @return int ログイン者区分
   */
  public int getAdminType(){
    if (isTogether()&&isMall()) return SIConfig.SIADMIN_MM ;
    else if (isTogether()&&isShop()) return SIConfig.SIADMIN_MS;
    else if (isIndividual()&&isMall()) return SIConfig.SIADMIN_SM;
    else if (isIndividual()&&isShop()) return SIConfig.SIADMIN_SS;
    else if (isOneShop()) return SIConfig.SIADMIN_ONESP;
    else return -1;
  }
  
  public boolean isCharge(Connection lConnection,String lBranch){
    if(SIUtil.isNull(lBranch)) return false;
    //メーカ/その他
    if(lBranch.equals("999")) return true;
    try{
      return SIDBUtil.hasData(lConnection,"SELECT chargecode FROM chargetbl WHERE belongingbranchcode='"+lBranch+"' AND chargecode='"+this.getUserCode()+"'");
    }catch(Exception e){
      return false;
    }
  }
  
  public boolean isBrother(Connection lConnection,String lChargeName){
    if(SIUtil.isNull(lChargeName)) return false;
    try{
      StringBuffer sqlStr = new StringBuffer();
      sqlStr.append("SELECT a.belongingbranchcode FROM chargetbl a,chargetbl b ");
      sqlStr.append("WHERE a.belongingbranchcode=b.belongingbranchcode ");
      sqlStr.append("AND a.chargecode=").append(SIDBUtil.SQL2Str(this.getUserCode()," "));
      sqlStr.append("AND b.chargename=").append(SIDBUtil.SQL2Str(lChargeName," "));
      sqlStr.append("AND b.enableflg=1");
      return SIDBUtil.hasData(lConnection,sqlStr.toString());
    }catch(Exception e){
      return false;
    }
  }
  
  public String getBelongingBranch(Connection lConnection) {
    String branch = "";
    try {
      branch = SIDBUtil.getFirstData(lConnection, "SELECT belongingBranchCode FROM chargetbl WHERE chargeCode = " + SIDBUtil.SQL2Str(getUserCode()));
    } catch (Exception e) {
      e.printStackTrace();
      branch = "";
    }
    return branch;
  }
  //7.3.0 ST2022 追加 ここから
  /**
   * <b>reset</b>
   * 管理コードからショップ情報を取得します
   * @param lConnection
   * @return なし
   */
  public void reset(Connection lConnection,String lUserID){
    Statement lStatement=null;
    ResultSet lResultSet=null;
    
    StringBuffer lSqlBuf=new StringBuffer();
    lSqlBuf.append("SELECT * FROM MNGUSERMTBL a ,MallShopVW b ");
    lSqlBuf.append("WHERE a.MallShopCode=b.MallShopCode ");
    lSqlBuf.append("AND a.MallShopCode="+SIDBUtil.SQL2Str(this.getMallShopCode()));
    lSqlBuf.append("AND a.UserCode="+SIDBUtil.SQL2Str(lUserID));
    
    try {
      log.debug("reset:lSql="+ lSqlBuf.toString());
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      if (lResultSet.next()){
        this.setEncode(SIConfig.SIENCODE_NONE);
        this.setUserCode(lResultSet.getString("UserCode"));//個人コード
        this.setPassWord(lResultSet.getString("password"));//パスワード
        this.setUserName(lResultSet.getString("UserName"));//名前
        this.setMemo(lResultSet.getString("Memo"));//備考
        this.setMngOrder(lResultSet.getString("MngOrder"));//受注出荷管理
        this.setMngOrderCsv(lResultSet.getString("MngOrderCsv"));//受注出荷管理CSV出力
        this.setMngOrderPdf(lResultSet.getString("MngOrderPdf"));//受注出荷管理PDF出力
        this.setMngCust(lResultSet.getString("MngCust"));//顧客管理
        this.setMngCustCsv(lResultSet.getString("MngCustCsv"));//顧客管理CSV出力
        this.setMngCustPdf(lResultSet.getString("MngCustPdf"));//顧客管理PDF出力
        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"));//商品・在庫管理CSV出力
        this.setMngAnalysis(lResultSet.getString("MngAnalysis"));//分析・統計管理
        this.setMngAnalysisCsv(lResultSet.getString("MngAnalysisCsv"));//分析・統計管理CSV出力
        this.setMngCmn(lResultSet.getString("MngCmn"));//コミニケーション管理
        this.setMngDataIo(lResultSet.getString("MngDataIo"));//データ入出力管理
        this.setMngDataInputCsv(lResultSet.getString("MngDataInputCsv"));//データ入出力管理CSV入力
        this.setMngDataOutputCsv(lResultSet.getString("MngDataOutputCsv"));//データ入出力管理CSV出力
        this.setMallShopCode(lResultSet.getString("mallShopCode"));
        this.setMallShopFlg(lResultSet.getString("mallShopFlg"));
        this.setRunningModeCode(lResultSet.getString("runningModeCode"));
        this.setMallShopName(lResultSet.getString("mallShopName"));
        this.setMallShopNameKana(lResultSet.getString("mallShopNameKana"));
        this.setAdminName(lResultSet.getString("UserCode"));
        this.setAdminPass(lResultSet.getString("password"));
        this.setFrontShopName(lResultSet.getString("frontShopName"));
        this.setAbbvFrontShopName(lResultSet.getString("abbvFrontShopName"));
        this.setFrontShopNameKana(lResultSet.getString("frontShopNameKana"));
        this.setDepartName(lResultSet.getString("departName"));
        this.setPostCode1(lResultSet.getString("postCode1"));
        this.setPostCode2(lResultSet.getString("postCode2"));
        this.setAddress1(lResultSet.getString("address1"));
        this.setAddress2(lResultSet.getString("address2"));
        this.setAddress3(lResultSet.getString("address3"));
        this.setTel(lResultSet.getString("tel"));
        this.setFax(lResultSet.getString("fax"));
        this.setEmail(lResultSet.getString("email"));
        this.setChargeUserName(lResultSet.getString("chargeUserName"));
        this.setFeeTaxFlg(lResultSet.getString("feeTaxFlg"));
        this.setDeliveryTaxFlg(lResultSet.getString("deliveryTaxFlg"));
        this.setPointEnableFlg(lResultSet.getString("pointEnableFlg"));
        this.setDiscountFromDate(SIDBUtil.getDate(lResultSet.getTimestamp("discountfromdate")));
        this.setDiscountToDate(SIDBUtil.getDate(lResultSet.getTimestamp("discounttodate")));
        this.setDiscountRate(lResultSet.getString("discountRate"));
        this.setInStockFlg(lResultSet.getString("inStockFlg"));
        this.setDaysOfNew(lResultSet.getString("daysOfNew"));
        this.setAmountByAdvice(lResultSet.getString("amountByAdvice"));
        this.setSSLEnableFlg(lResultSet.getString("SSLEnableFlg"));
        this.setDbType(lResultSet.getString("dbType"));
        this.setGiftFlg(lResultSet.getString("GiftFlg"));
        this.setStatus(lResultSet.getString("Status"));
        this.setUpdateDateTime(SIDBUtil.getDateTime(lResultSet.getTimestamp("UpdateDateTime")));
        this.setRankingDispFlg(lResultSet.getString("RankingDispFlg"));
        this.setRankingFlg(lResultSet.getString("RankingFlg"));
        this.setRankingCount(lResultSet.getString("RankingCount"));
        this.setRankingDays(lResultSet.getString("RankingDays"));
        this.setRankingDateTime(SIDBUtil.getDateTime(lResultSet.getTimestamp("RankingDateTime")));
        this.setDiscountType(lResultSet.getString("DISCOUNTTYPE"));
        this.setMemberDiscountType(lResultSet.getString("MEMBERDISCOUNTTYPE"));
        this.setSalesDiscountType(lResultSet.getString("SALESDISCOUNTTYPE"));
        this.setOrgDiscountType(lResultSet.getString("DISCOUNTTYPE"));
        this.setOrgMemberDiscountType(lResultSet.getString("MEMBERDISCOUNTTYPE"));
        this.setOrgSalesDiscountType(lResultSet.getString("SALESDISCOUNTTYPE"));
        this.setCustAttribute0(lResultSet.getString("custAttribute0"));
        this.setCustAttribute1(lResultSet.getString("custAttribute1"));
        this.setCustAttribute2(lResultSet.getString("custAttribute2"));
        this.setCustCancelEnableFlg(lResultSet.getString("custCancelEnableFlg"));
        this.setSSLURL(lResultSet.getString("sSLURL"));
        this.setMdkMerchantID(lResultSet.getString("MDKMERCHANTID"));
        this.setMdkSignatureKey(lResultSet.getString("MDKSIGNATUREKEY"));
        this.setMdkPaymentLimitDays(lResultSet.getString("MDKPAYMENTLIMITDAYS"));
        this.setLoginErrCount(lResultSet.getString("LOGINERRORCOUNT")); //7.3.0 ST2028 追加
        this.setLoginErrDate(lResultSet.getString("LOGINERRORDATETIME")); //7.3.0 ST2028 追加
        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"));
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally{
      SIDBUtil.close(lStatement,lResultSet);
    }
  }
  //7.3.0 ST2022 追加 ここまで
}
