/**
 * 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.SICmdty;
import jp.co.sint.basic.SILogin;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;// 7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @version $Id : UIRegCmdty.java,v 1.0 2003/08/14 Exp $
 * @author : Jinwang Chen <br>
 * Description : 商品管理の編集画面に対する管理beans
 * <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/08/14 Original
 */

public class UIRegCmdty extends SICmdty {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // 7.2.0 ST1051 追加 ここから
  // 商品マスタにおいて、新規登録時にショップコードが変更されたときのみ 1 を持つフラグ
  private String shopCodeChangedFlg = "0";
  
  // ショップ.一括値引区分
  private String shopDiscountType = "0";
  
  // ショップ.会員値引区分
  private String shopMemberDiscountType = "0";
  
  // ショップ.特価値引区分
  private String shopSalesDiscountType = "0";
  
  // 7.2.0 ST1051 追加 ここまで
  
  // 商品一覧フラグ
  private String listFlg = "0";
  
  /**
   * UIRegCmdty コンストラクタ
   * 
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIRegCmdty() {}
  
  /**
   * UIRegCmdty コンストラクタ
   * 
   * @param lRequest リクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public UIRegCmdty(HttpServletRequest lRequest, SIURLParameter lUrlParam) {// 7.1.1 ST0236 修正
    init(lRequest, lUrlParam);// 7.1.1 ST0236 修正
  }
  
  // 7.2.0 ST1051 追加 ここから
  // setter of shopCodeChangedFlg
  public void setShopCodeChangedFlg(String lFlg) {
    if (SIUtil.isNull(lFlg)) lFlg = "0";
    this.shopCodeChangedFlg = lFlg;
  }
  
  // setter of ショップ.一括値引区分
  public void setShopDiscountType(String lType) {
    if (SIUtil.isNull(lType)) lType = "0";
    this.shopDiscountType = lType;
  }
  
  // setter of ショップ.会員値引区分
  public void setShopMemberDiscountType(String lType) {
    if (SIUtil.isNull(lType)) lType = "0";
    this.shopMemberDiscountType = lType;
  }
  
  // setter of ショップ.特価値引区分
  public void setShopSalesDiscountType(String lType) {
    if (SIUtil.isNull(lType)) lType = "0";
    this.shopSalesDiscountType = lType;
  }
  
  // getter of shopCodeChangedFlg
  public String getShopCodeChangedFlg() {
    return this.shopCodeChangedFlg;
  }
  
  // getter of ショップ.一括値引区分
  public String getShopDiscountType() {
    return this.shopDiscountType;
  }
  
  // getter of ショップ.会員値引区分
  public String getShopMemberDiscountType() {
    return this.shopMemberDiscountType;
  }
  
  // getter of ショップ.特価値引区分
  public String getShopSalesDiscountType() {
    return this.shopSalesDiscountType;
  }
  
  // 7.2.0 ST1051 追加 ここまで
  
  public void setListFlg(String flg){
    if (SIUtil.isNull(flg)) flg = "0";
    this.listFlg = flg;
  }
  
  public String getListFlg(){
    return this.listFlg;
  }
  
  /**
   * <b>validate</b> 入力したデータをチェックします。不正なデータがあったら、エラーオブジェクトに入れて、 画面に表示します。
   * 
   * @param request データベースへのコネンクション
   * @return true:不正なデータがある false:ない
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest) {
    return validate(lRequest, null);
  }
  
  public boolean validate(HttpServletRequest lRequest, Connection lConnection) {
    return validate(lRequest, lConnection, false);
  }
  
  public boolean validate(HttpServletRequest lRequest, Connection lConnection, boolean lCsvCheck) {
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lSqlBuf = new StringBuffer("");
    StringBuffer lSqlBufM = new StringBuffer("");
    String lShopCount = "0";
    String lMallCount = "0";
    
    SICheckValid.checkValid(errors, "親コード", this.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "親コード", this.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    }
    
    // 7.1.1 ST0162 修正 ここから
    if (lLogin.isMall() || lCsvCheck) {
      SICheckValid.checkValid(errors, "ショップコード", this.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    } else if (lLogin.isMall()) {
      SICheckValid.checkValid(errors, "ショップ名", this.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    }
    // 7.1.1 ST0162 修正 ここまで
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "ショップコード", this.getShopCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
      if (SIUtil.isNotNull(this.getShopCode())) {
        // 7.3.0 ST2048 修正 ここから
        Statement lStatement = null;
        ResultSet lResultSet = null;
        lSqlBuf = new StringBuffer("SELECT DISCOUNTTYPE, MEMBERDISCOUNTTYPE, SALESDISCOUNTTYPE FROM MallShopMTbl WHERE MallShopCode=").append(SIDBUtil.SQL2Str(getShopCode()));
        log.debug("reset:lSqlBuf=" + lSqlBuf.toString());
        try {
          lStatement = lConnection.createStatement();
          lResultSet = lStatement.executeQuery(lSqlBuf.toString());
          
          if (lResultSet.next()) {
            this.setShopDiscountType(lResultSet.getString("DISCOUNTTYPE")); // ショップ.一括値引フラグ
            this.setShopMemberDiscountType(lResultSet.getString("MEMBERDISCOUNTTYPE"));// ショップ.会員値引フラグ
            this.setShopSalesDiscountType(lResultSet.getString("SALESDISCOUNTTYPE")); // ショップ.特価値引フラグ
          } else {
            errors.addError(new SICustomError("database.query.notexist", "ショップコード"));
          }
        } catch (SQLException sqle) {
          sqle.printStackTrace();
        } finally {
          SIDBUtil.close(lStatement, lResultSet);
        }
        // lSqlBuf=new StringBuffer("SELECT MallShopCode FROM MallShopMTbl WHERE MallShopCode=").append(SIDBUtil.SQL2Str(getShopCode()));
        // SICheckValid.checkExist(errors,lConnection,"ショップコード",lSqlBuf.toString());
        // 7.3.0 ST2048 修正 ここまで
      }
    }
    
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
      lSqlBuf = new StringBuffer();
      // 重複レコードの存在でかどうかをチェックします
      lSqlBuf.append("SELECT CmdtyCode FROM CmdtyMTbl ");
      lSqlBuf.append("WHERE CmdtyCode=" + SIDBUtil.SQL2Str(this.getCmdtyCode(), " "));
      lSqlBuf.append("AND ShopCode=" + SIDBUtil.SQL2Str(this.getShopCode(), " "));
      if (lCsvCheck) {
        try {
          if (SIDBUtil.hasData(lConnection, lSqlBuf.toString())) {
            errors.addError(new SICustomError("input.data.csv.duplication", "親コード"));
          }
        } catch (SIDBAccessException e1) {
          e1.printStackTrace();
        }
      } else {
        SICheckValid.checkDuplicate(errors, lConnection, "親コード", lSqlBuf.toString());
      }
    } else {
      if (SIUtil.isNotNull(this.getShopCode()) && SIUtil.isNotNull(this.getCmdtyCode())) {
        lSqlBuf = new StringBuffer("SELECT ShopCode,CmdtyCode FROM CmdtyMTbl WHERE ShopCode=");
        lSqlBuf.append(SIDBUtil.SQL2Str(this.getShopCode()));
        lSqlBuf.append(" AND CmdtyCode=").append(SIDBUtil.SQL2Str(this.getCmdtyCode()));
        SICheckValid.checkExist(errors, lConnection, "親コード", lSqlBuf.toString());
      }
    }
    
    SICheckValid.checkValid(errors, "仕入先", this.getStockCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "仕入先", this.getStockCode(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "仕入先", this.getStockCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    }
    
    if (SIUtil.isNotNull(this.getShopCode()) && SIUtil.isNotNull(this.getStockCode())) {
      lSqlBuf = new StringBuffer("SELECT ShopCode FROM StockMTbl ");
      lSqlBuf.append("WHERE ShopCode=" + SIDBUtil.SQL2Str(this.getShopCode(), " "));
      lSqlBuf.append("AND StockCode=" + SIDBUtil.SQL2Str(this.getStockCode()));
      SICheckValid.checkExist(errors, lConnection, "仕入先", lSqlBuf.toString());
    }
    
    SICheckValid.checkValid(errors, "JANコード", this.getJanCode(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "JANコード", this.getJanCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    }
    
    SICheckValid.checkValid(errors, "商品名", this.getCmdtyName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ZENKAKU_TYPE);
    SICheckValid.checkValid(errors, "商品名", this.getCmdtyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "商品説明", this.getDescription(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2000);
    
    SICheckValid.checkValid(errors, "仕入価格", this.getStockUnitPrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "仕入価格", this.getStockUnitPrice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    }
    
    SICheckValid.checkValid(errors, "販売価格", this.getUnitPrice(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "販売価格", this.getUnitPrice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    }
    
    SICheckValid.checkValid(errors, "特別価格", this.getSalesUnitPrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "特別価格", this.getSalesUnitPrice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
      SICheckValid.checkValid(errors, "価格税区分", this.getTaxFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "価格税区分", this.getTaxFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_TAX_INX);
    }
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "おすすめ", this.getAdviceFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "おすすめ", this.getAdviceFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_ADVICE_INX);
    }
    
    // 7.2.0 ST0286 追加 ここから
    if (this.getAdviceFlg().equalsIgnoreCase("1")) {
      SICheckValid.checkValid(errors, "おすすめの表示順", this.getAdviceDispOrder(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "おすすめの表示順", this.getAdviceDispOrder(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    }
    // 7.2.0 ST0286 追加 ここまで
    
    // モールおすすめ商品数よりオーバーしてしまう場合はエラーを表示する
    if (this.getAdviceFlg().equals("1")) {
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT COUNT(cmdtyCode) FROM CmdtyMTbl WHERE AdviceFlg=1 AND ShopCode=").append(SIDBUtil.SQL2Str(this.getShopCode()));
      lSqlBuf.append(" AND CmdtyCode!=").append(SIDBUtil.SQL2Str(this.getCmdtyCode()));
      lSqlBufM = new StringBuffer();
      lSqlBufM.append("SELECT AmountByAdvice FROM MallShopMTbl WHERE MallShopCode=").append(SIDBUtil.SQL2Str(SIConfig.SIMALL.getMallShopCode()));
      
      try {
        lShopCount = SIDBUtil.getFirstData(lConnection, lSqlBuf.toString());
        lMallCount = SIDBUtil.getFirstData(lConnection, lSqlBufM.toString());
        
        if (SIUtil.isNotNull(lMallCount) && SIUtil.isNotNull(lShopCount)) {
          if (SICheckUtil.isGreater(SIUtil.add_LL(lShopCount, "1"), lMallCount)) {
            errors.addError(new SICustomError("input.data.cmdty.advice", SIConfig.SIMALL.getAmountByAdvice()));
          }
        }
      } catch (SIDBAccessException e) {
        e.printStackTrace();
      }
    }
    
    SICheckValid.checkValid(errors, "おすすめバナー ", this.getBannerFile(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "おすすめバナー ", this.getBannerFile(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    
    SICheckValid.checkValid(errors, "商品紹介URL", this.getBannerURL(), SICheckDataConf.SICHECK_DATA_URL_TYPE);
    SICheckValid.checkValid(errors, "商品紹介URL", this.getBannerURL(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 256);
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "会員値引", this.getMemberDiscountFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "会員値引", this.getMemberDiscountFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_MEMBER_DISCOUNT_TYPE_INX);// 7.2.0 ST0306 修正
      
      // 7.2.0 ST0306 追加 ここから
      SICheckValid.checkValid(errors, "一括値引", this.getDiscountFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "一括値引", this.getDiscountFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_DISCOUNT_TYPE_INX);
      
      SICheckValid.checkValid(errors, "特価値引", this.getSalesDiscountFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "特価値引", this.getSalesDiscountFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_SALES_DISCOUNT_TYPE_INX);
      // 7.2.0 ST0306 追加 ここまで
    }
    
    SICheckValid.checkValid(errors, "検索キーワード1", this.getSrchKeyName1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    SICheckValid.checkValid(errors, "検索キーワード2", this.getSrchKeyName2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    SICheckValid.checkValid(errors, "検索キーワード3", this.getSrchKeyName3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "商品サイズ", this.getCmdtySize(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "商品サイズ", this.getCmdtySize(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_CMDTYSIZE_INX);
    }
    
    SICheckValid.checkValid(errors, "販売開始日", this.getSellFromDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "販売開始日", this.getSellFromDateYear(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, SIConfig.SIDATE_MIN_YEAR, SIConfig.SIDATE_MAX_YEAR);
    }
    SICheckValid.checkValid(errors, "販売終了日", this.getSellToDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "販売開始日", this.getSellToDateYear(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, SIConfig.SIDATE_MIN_YEAR, SIConfig.SIDATE_MAX_YEAR);
    }
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "販売終了日設定フラグ", this.getEndSellFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "販売終了日設定フラグ", this.getEndSellFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_END_SELL_INX);
    }
    try {
      if (!SICheckUtil.dateEqual(this.getSellFromDate(), this.getSellToDate())) {
        SICheckValid.checkValid(errors, "販売開始日", "販売終了日", this.getSellFromDate(), this.getSellToDate(), SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
    } catch (Exception e) {}
    
    SICheckValid.checkValid(errors, "特別価格開始日", this.getSalesFromDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "特別価格開始日", this.getSalesFromDateYear(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, SIConfig.SIDATE_MIN_YEAR, SIConfig.SIDATE_MAX_YEAR);
    }
    SICheckValid.checkValid(errors, "特別価格終了日", this.getSalesToDate(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "特別価格終了日", this.getSalesToDateYear(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, SIConfig.SIDATE_MIN_YEAR, SIConfig.SIDATE_MAX_YEAR);
    }
    try {
      if (!SICheckUtil.dateEqual(this.getSalesFromDate(), this.getSalesToDate())) {
        SICheckValid.checkValid(errors, "特別価格開始日", "特別価格終了日", this.getSalesFromDate(), this.getSalesToDate(), SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
    } catch (Exception e) {}
    
    try {
      if (!SICheckUtil.dateEqual(this.getSellFromDate(), this.getSalesFromDate())) {
        SICheckValid.checkValid(errors, "販売開始日", "特別価格開始日", this.getSellFromDate(), this.getSalesFromDate(), SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
    } catch (Exception e) {}
    
    try {
      if (!SICheckUtil.dateEqual(this.getSellToDate(), this.getSalesFromDate())) {
        SICheckValid.checkValid(errors, "販売終了日", "特別価格開始日", this.getSellToDate(), this.getSalesFromDate(), SICheckDataConf.SICHECK_DATA_DATE_GREATER_TYPE);
      }
    } catch (Exception e) {}
    
    try {
      if (!SICheckUtil.dateEqual(this.getSellFromDate(), this.getSalesToDate())) {
        SICheckValid.checkValid(errors, "販売開始日", "特別価格終了日", this.getSellFromDate(), this.getSalesToDate(), SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);
      }
    } catch (Exception e) {}
    
    try {
      if (!SICheckUtil.dateEqual(this.getSellToDate(), this.getSalesToDate())) {
        SICheckValid.checkValid(errors, "販売終了日", "特別価格終了日", this.getSellToDate(), this.getSalesToDate(), SICheckDataConf.SICHECK_DATA_DATE_GREATER_TYPE);
      }
    } catch (Exception e) {}
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "予約販売", this.getRsrvEnableFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "予約販売", this.getRsrvEnableFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_RSRV_ENABLE_INX);
      
      SICheckValid.checkValid(errors, "ラッピング使用", this.getWrappingFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "ラッピング使用", this.getWrappingFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_GIFT_INX);
      
      SICheckValid.checkValid(errors, "在庫数管理", this.getAmountFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "在庫数管理", this.getAmountFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_AMOUNT_INX);
      
      SICheckValid.checkValid(errors, "在庫無し販売", this.getNoStockFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "在庫無し販売", this.getNoStockFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_NO_STOCK_INX);
    }
    
    SICheckValid.checkValid(errors, "在庫数量", this.getAmount(), SICheckDataConf.SICHECK_DATA_DIGIT_NEGATIVE_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "在庫数量", this.getAmount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    }
    
    SICheckValid.checkValid(errors, "予約可能数", this.getRsrvAmount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "予約可能数", this.getRsrvAmount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    }
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "在庫状況表示設定", this.getStockStatusCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "在庫状況表示設定", this.getStockStatusCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
      if (SIUtil.isNotNull(this.getStockStatusCode())) {
        lSqlBuf = new StringBuffer("SELECT StockStatusCode FROM StockStatusMTbl WHERE StockStatusCode=");
        lSqlBuf.append(SIDBUtil.SQL2Str(this.getStockStatusCode()));
        SICheckValid.checkExist(errors, lConnection, "在庫状況表示設定", lSqlBuf.toString());
      }
    }
    
    SICheckValid.checkValid(errors, "配送種別", this.getDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "配送種別", this.getDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "配送種別", this.getDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    }
    
    if (SIUtil.isNotNull(this.getShopCode()) && SIUtil.isNotNull(this.getDeliveryTypeCode())) {
      lSqlBuf = new StringBuffer("SELECT MallShopCode FROM DeliveryTypeMTbl ");
      lSqlBuf.append("WHERE MallShopCode=" + SIDBUtil.SQL2Str(this.getShopCode(), " "));
      lSqlBuf.append("AND DeliveryTypeCode=" + SIDBUtil.SQL2Str(this.getDeliveryTypeCode()));
      SICheckValid.checkExist(errors, lConnection, "配送種別", lSqlBuf.toString());
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    
    return errors.isEmpty();
  }
  
  /**
   * <b>init</b> 入力したデータを基づいて、このbeansを設定します。
   * 
   * @param request データベースへのコネンクション
   * @param lUrlParam
   * @return true:不正なデータがある false:ない
   * @throws なし
   */
  // 7.1.1 ST0236 修正 ここから
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);
    
    // 7.2.0 ST1051 修正 ここから
    // if (lLogin.isShop()){
    this.setShopCode(lLogin.getMallShopCode());// ショップコード
    // }else{
    // this.setShopCode((String)lUrlParam.getParam("shopCode"));//ショップコード
    // }
    // 7.2.0 ST1051 修正 ここまで
    
    this.setCmdtyCode((String) lUrlParam.getParam("cmdtyCode"));// 商品コード
    this.setJanCode((String) lUrlParam.getParam("janCode"));// janコード
    this.setCmdtyName((String) lUrlParam.getParam("cmdtyName"));// 商品名
    this.setDescription((String) lUrlParam.getParam("description"));// 商品詳細
    this.setStockCode((String) lUrlParam.getParam("stockCode"));// 仕入れコード
    this.setStockUnitPrice((String) lUrlParam.getParam("stockUnitPrice"));// 仕入れ価格
    this.setUnitPrice((String) lUrlParam.getParam("unitPrice"));// 価格
    this.setSalesUnitPrice((String) lUrlParam.getParam("salesUnitPrice"));// 特別価格
    this.setTaxFlg((String) lUrlParam.getParam("taxFlg"));// 税区分
    this.setAdviceFlg((String) lUrlParam.getParam("adviceFlg"));// おすすめ
    this.setAdviceDispOrder((String) lUrlParam.getParam("adviceDispOrder"));// おすすめ表示順 //7.2.0 ST0286 追加
    this.setBannerFile((String) lUrlParam.getParam("bannerFile"));// バナーファイル
    this.setBannerURL((String) lUrlParam.getParam("bannerURL"));// バナー先
    this.setMemberDiscountFlg((String) lUrlParam.getParam("memberDiscountFlg"));// 会員値引フラグ
    // 7.2.0 ST1051 追加 ここから
    this.setDiscountFlg((String) lUrlParam.getParam("discountFlg"));// 一括値引フラグ
    this.setSalesDiscountFlg((String) lUrlParam.getParam("salesDiscountFlg"));// 特価値引フラグ
    // 7.2.0 ST1051 追加 ここまで
    this.setSrchKeyName1((String) lUrlParam.getParam("srchKeyName1"));// 検索項目1
    this.setSrchKeyName2((String) lUrlParam.getParam("srchKeyName2"));// 検索項目2
    this.setSrchKeyName3((String) lUrlParam.getParam("srchKeyName3"));// 検索項目3
    this.setCmdtySize((String) lUrlParam.getParam("cmdtySize"));// 商品サイズ
    this.setSellFromDateYear((String) lUrlParam.getParam("sellFromDateYear"));// 販売終了日の年
    this.setSellFromDateMonth((String) lUrlParam.getParam("sellFromDateMonth"));// 販売開始日の月
    this.setSellFromDateDay((String) lUrlParam.getParam("sellFromDateDay"));// 販売開始日の日
    this.setSalesFromDateYear((String) lUrlParam.getParam("salesFromDateYear"));// 特別価格開始日の年
    this.setSalesFromDateMonth((String) lUrlParam.getParam("salesFromDateMonth"));// 特別価格開始日の月
    this.setSalesFromDateDay((String) lUrlParam.getParam("salesFromDateDay"));// 特別価格開始日の日
    this.setSalesToDateYear((String) lUrlParam.getParam("salesToDateYear"));// 特別価格終了日の年
    this.setSalesToDateMonth((String) lUrlParam.getParam("salesToDateMonth"));// 特別価格終了日の月
    this.setSalesToDateDay((String) lUrlParam.getParam("salesToDateDay"));// 特別価格終了日の日
    this.setEndSellFlg((String) lUrlParam.getParam("endSellFlg"));// 販売終了フラグ
    this.setSellToDateYear((String) lUrlParam.getParam("sellToDateYear"));// 販売終了日の年
    this.setSellToDateMonth((String) lUrlParam.getParam("sellToDateMonth"));// 販売終了日の月
    this.setSellToDateDay((String) lUrlParam.getParam("sellToDateDay"));// 販売終了日の日
    this.setRsrvEnableFlg((String) lUrlParam.getParam("rsrvEnableFlg"));// 予約販売
    this.setWrappingFlg((String) lUrlParam.getParam("wrappingFlg"));// ラッピングフラグ
    this.setNoStockFlg((String) lUrlParam.getParam("noStockFlg"));// 在庫無販売
    this.setAmount((String) lUrlParam.getParam("amount"));// 商品数量
    this.setRsrvAmount((String) lUrlParam.getParam("rsrvAmount"));// 予約可能数
    this.setAmountFlg((String) lUrlParam.getParam("amountFlg"));// 商品数量管理フラグ
    this.setStockStatusCode((String) lUrlParam.getParam("stockStatusCode"));// 在庫状況番号
    this.setCmdtyStndrdCode((String) lUrlParam.getParam("cmdtyStndrdCode"));
    this.setDeliveryTypeCode((String) lUrlParam.getParam("deliveryTypeCode"));// 配送先コード
    this.setRanking((String) lUrlParam.getParam("ranking"));// ランキング
    this.setRankingDateTime((String) lUrlParam.getParam("rankingDateTime"));// ランキング集計日時
    this.setInitDateTime((String) lUrlParam.getParam("initDateTime"));// 登録日時
    this.setListFlg((String) lUrlParam.getParam("listFlg"));
  }
  
  // 7.1.1 ST0236 修正 ここまで
  
  /**
   * <b>reset</b> 商品詳細情報を取り出す。(商品詳細画面で使用) 画面に表示します。
   * 
   * @param lConnection データベースへのコネンクション
   * @return なし
   * @throws なし
   */
  public boolean reset(Connection lConnection) {
    boolean lResult = false;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    StringBuffer lSqlBuf = new StringBuffer();
    lSqlBuf.append("SELECT aa.*");
    lSqlBuf.append("FROM  CmdtyMtbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
    lSqlBuf.append("WHERE aa.ShopCode=" + SIDBUtil.SQL2Str(getShopCode(), " "));
    lSqlBuf.append("AND   aa.CmdtyCode=" + SIDBUtil.SQL2Str(getCmdtyCode(), " "));
    
    log.debug("reset:lSqlBuf=" + lSqlBuf.toString());
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      if (lResultSet.next()) {
        this.setEncode(SIConfig.SIENCODE_NONE);
        this.setShopCode(lResultSet.getString("shopCode"));// ショップコード
        this.setCmdtyCode(lResultSet.getString("cmdtyCode"));// 商品コード
        this.setCmdtyName(lResultSet.getString("cmdtyName"));// 商品名
        /*
         * 7.3.0 PI-NES5051 削除 this.setJanCode(lResultSet.getString("janCode"));//janコード //this.setDescription(lResultSet.getString("description"));//商品詳細
         * this.setStockCode(lResultSet.getString("stockCode"));//仕入れコード this.setStockUnitPrice(lResultSet.getString("stockUnitPrice"));//仕入れ価格
         * this.setUnitPrice(lResultSet.getString("unitPrice"));//価格 this.setSalesUnitPrice(lResultSet.getString("SalesUnitPrice"));//特別価格
         * this.setTaxFlg(lResultSet.getString("taxFlg"));//税区分 this.setAdviceFlg(lResultSet.getString("adviceFlg"));//おすすめ
         * this.setAdviceDispOrder(lResultSet.getString("adviceDispOrder"));//おすすめ表示順 //7.2.0 ST0286 追加 this.setBannerFile(lResultSet.getString("bannerFile"));//バナーファイル
         * this.setBannerURL(lResultSet.getString("bannerURL"));//バナー先 this.setMemberDiscountFlg(lResultSet.getString("memberDiscountFlg"));//会員値引フラグ //7.2.0 ST1051 追加 ここから
         * this.setDiscountFlg(lResultSet.getString("DISCOUNTFLG"));//一括値引フラグ this.setSalesDiscountFlg(lResultSet.getString("SALESDISCOUNTFLG"));//特価値引フラグ //7.2.0 ST1051 追加 ここまで
         * this.setSrchKeyName1(lResultSet.getString("srchKeyName1"));//検索項目1 this.setSrchKeyName2(lResultSet.getString("srchKeyName2"));//検索項目2
         * this.setSrchKeyName3(lResultSet.getString("srchKeyName3"));//検索項目3 this.setCmdtySize(lResultSet.getString("cmdtySize"));//商品サイズ
         * this.setSellFromDate(SIDBUtil.getDate(lResultSet.getTimestamp("sellFromDate")));//販売開始日 this.setEndSellFlg(lResultSet.getString("endSellFlg"));//販売終了フラグ
         * this.setSellToDate(SIDBUtil.getDate(lResultSet.getTimestamp("sellToDate")));//販売終了日
         * this.setSalesFromDate(SIDBUtil.getDate(lResultSet.getTimestamp("salesFromDate")));//特別価格開始日
         * this.setSalesToDate(SIDBUtil.getDate(lResultSet.getTimestamp("salesToDate")));//特別価格終了日 this.setRsrvEnableFlg(lResultSet.getString("rsrvEnableFlg"));//予約販売
         * this.setWrappingFlg(lResultSet.getString("wrappingFlg"));//ラッピングフラグ this.setNoStockFlg(lResultSet.getString("noStockFlg"));//在庫無販売
         * this.setAmount(lResultSet.getString("amount"));//商品数量 this.setRsrvAmount(lResultSet.getString("rsrvAmount"));//商品数量
         * this.setAmountFlg(lResultSet.getString("amountFlg"));//商品数量管理設定 this.setStockStatusCode(lResultSet.getString("stockStatusCode"));//在庫状況番号
         * this.setDeliveryTypeCode(lResultSet.getString("deliveryTypeCode"));//配送種別コード this.setRanking(lResultSet.getString("ranking"));//ランキング
         * this.setRankingDateTime(SIDBUtil.getDateTime(lResultSet.getTimestamp("rankingDateTime")));//ランキング集計日時
         * this.setInitDateTime(SIDBUtil.getDateTime(lResultSet.getTimestamp("initDateTime")));//登録日時
         */
        lResult = true;
      } else {
        log.error("not find record for cmdtyCode=" + getCmdtyCode());
      }
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    return lResult;
  }
  
  // 7.2.0 ST1051 追加 ここから
  public void setShopInfo(Connection lConnection) {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    StringBuffer lSqlBuf = new StringBuffer();
    lSqlBuf.append("SELECT DISCOUNTTYPE, MEMBERDISCOUNTTYPE, SALESDISCOUNTTYPE ");
    lSqlBuf.append("FROM  MALLSHOPMTBL ");
    lSqlBuf.append("WHERE MALLSHOPCODE=" + SIDBUtil.SQL2Str(this.getShopCode(), " "));
    
    log.debug("reset:lSqlBuf=" + lSqlBuf.toString());
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      if (lResultSet.next()) {
        this.setShopDiscountType(lResultSet.getString("DISCOUNTTYPE")); // ショップ.一括値引フラグ
        this.setShopMemberDiscountType(lResultSet.getString("MEMBERDISCOUNTTYPE"));// ショップ.会員値引フラグ
        this.setShopSalesDiscountType(lResultSet.getString("SALESDISCOUNTTYPE")); // ショップ.特価値引フラグ
        
        // ショップコードが変更された場合には、ショップの値をデフォルト値として使用する
        if (this.shopCodeChangedFlg.equals("1")) {
          this.setDiscountFlg(this.shopDiscountType);
          this.setMemberDiscountFlg(this.shopMemberDiscountType);
          this.setSalesDiscountFlg(this.shopSalesDiscountType);
          this.setShopCodeChangedFlg("0");
        }
      } else {
        log.error("not find record for MALLSHOPCODE=" + this.getShopCode());
      }
    } catch (SQLException sqle) {
      sqle.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
  }
  // 7.2.0 ST1051 追加 ここまで
  
  public void setLoginFlgForEdit(Connection lConnection){
    if(SIUtil.isNull(this.getCmdtyCode())) return;
    StringBuffer lSqlBuf = new StringBuffer();
    lSqlBuf.append("SELECT cc.cmdtycode FROM cmdtyctgrymtbl cc,ctgryvw ct WHERE cc.ctgrycode = ct.ctgrycode ");
    lSqlBuf.append("AND cc.cmdtycode = ").append(SIDBUtil.SQL2Str(this.getCmdtyCode()," "));
    lSqlBuf.append("AND (");
    for (int i=0;i<SIConfig.LOGINCTGRY.length;i++){
      if (i>0) lSqlBuf.append(" OR ");
      lSqlBuf.append("(ct.branch LIKE '%~").append(SIDBUtil.SQL2Like(SIConfig.LOGINCTGRY[i])).append("%' ");
      lSqlBuf.append("OR ct.ctgrycode = ").append(SIDBUtil.SQL2Str(SIConfig.LOGINCTGRY[i], ") "));
    }
    lSqlBuf.append(")");
    
    try{
      if(SIDBUtil.hasData(lConnection, lSqlBuf.toString())){
        this.setLoginFlg(true);
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
}
