/**
 * Copyright (c) 2003-2005 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 java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIMaker;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SIBGUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id : UICmdtyParent.java,v 1.0 Exp $
 * @author : Tsuyoshi Yagi <br>
 * Description :商品マスタ明細画面に対するBean
 * <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>
 * Tsuyoshi Yagi 2005/08/11 Original
 */
public class UICmdtyParent extends SIBasic {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // ショップコード
  private String ShopCode = "";
  // 親コード
  private String cmdtyCode = "";
  // 商品名
  private String cmdtyName = "";
  // JANコード
  private String janCode = "";
  // ブランドコード
  private String makerCode = "";
  // ブランド名
  private String makerName = "";
  // 色コード
  private String colorCode = "";
  // M価
  private String newFixedPrice = "";
  // リンク先アドレス
  private String bannerURL = "";
  // 検索キーワード１
  private String srchKeyName1 = "";
  // 検索キーワード２
  private String srchKeyName2 = "";
  // 検索キーワード３
  private String srchKeyName3 = "";
  // 本体価格税区分
  private String taxFlg = "";
  // 配送種別コード
  private String deliveryTypeCode = "";
  // 商品サイズ
  private String cmdtySize = "";
  // ランキング順位
  private String ranking = "";
  // ランキング集計日時
  private String rankingDateTime = "";
  // 登録日時
  private String initDateTime = "";
  // 死活フラグ
  private String disableFlg = "0";
  // 帳簿在庫フラグ
  private String realAmountFlg = "0";
  // 型式
  private String otherName = "";
  // EDBTG003-00 elecs-matsushima add start
  // 商品構成フラグ
  private String cmdtyCompositionFlg = SIConfig.CMDTY_COMPOSITION_NORMAL;
  // EDBTG003-00 elecs-matsushima add end
  // 預け先
  private String storageCode = "";
  // サロン価
  private String salonPrice = "";
  
  // 7.2.0 ST1030追加ここまで
  /**
   * UICmdtyParent コンストラクタ
   * 
   * @param なし
   * @return なし
   * @throws なし
   */
  public UICmdtyParent() {}
  
  /**
   * UICmdtyParent コンストラクタ
   * 
   * @param lRequest リクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public UICmdtyParent(HttpServletRequest lRequest, SIURLParameter lUrlParam) {// 7.1.1 ST0236 修正
    this.init(lRequest, lUrlParam);// 7.1.1 ST0236 修正
  }
  
  /**
   * @return bannerURL を戻します。
   */
  public String getBannerURL() {
    return bannerURL;
  }
  
  /**
   * @param bannerURL bannerURL を設定。
   */
  public void setBannerURL(String bannerURL) {
    this.bannerURL = bannerURL;
  }
  
  /**
   * @return cmdtyCode を戻します。
   */
  public String getCmdtyCode() {
    return cmdtyCode;
  }
  
  /**
   * @param cmdtyCode cmdtyCode を設定。
   */
  public void setCmdtyCode(String cmdtyCode) {
    this.cmdtyCode = cmdtyCode;
  }
  
  /**
   * @return cmdtyName を戻します。
   */
  public String getCmdtyName() {
    return cmdtyName;
  }
  
  /**
   * @param cmdtyName cmdtyName を設定。
   */
  public void setCmdtyName(String cmdtyName) {
    this.cmdtyName = cmdtyName;
  }
  
  /**
   * @return cmdtySize を戻します。
   */
  public String getCmdtySize() {
    return cmdtySize;
  }
  
  /**
   * @param cmdtySize cmdtySize を設定。
   */
  public void setCmdtySize(String cmdtySize) {
    this.cmdtySize = cmdtySize;
  }
  
  /**
   * @return deliveryTypeCode を戻します。
   */
  public String getDeliveryTypeCode() {
    return deliveryTypeCode;
  }
  
  /**
   * @param deliveryTypeCode deliveryTypeCode を設定。
   */
  public void setDeliveryTypeCode(String deliveryTypeCode) {
    this.deliveryTypeCode = deliveryTypeCode;
  }
  
  /**
   * @return initDateTime を戻します。
   */
  public String getInitDateTime() {
    return initDateTime;
  }
  
  /**
   * @param initDateTime initDateTime を設定。
   */
  public void setInitDateTime(String initDateTime) {
    this.initDateTime = initDateTime;
  }
  
  /**
   * @return janCode を戻します。
   */
  public String getJanCode() {
    return janCode;
  }
  
  /**
   * @param janCode janCode を設定。
   */
  public void setJanCode(String janCode) {
    this.janCode = janCode;
  }
  
  /**
   * @return makerCode を戻します。
   */
  public String getMakerCode() {
    return makerCode;
  }
  
  /**
   * @param makerCode makerCode を設定。
   */
  public void setMakerCode(String makerCode) {
    this.makerCode = makerCode;
  }
  
  /**
   * @return makerName を戻します。
   */
  public String getMakerName() {
    return makerName;
  }
  
  /**
   * @param makerName makerName を設定。
   */
  public void setMakerName(String makerName) {
    this.makerName = makerName;
  }
  
  /**
   * @return ranking を戻します。
   */
  public String getRanking() {
    return ranking;
  }
  
  /**
   * @param ranking ranking を設定。
   */
  public void setRanking(String ranking) {
    this.ranking = ranking;
  }
  
  /**
   * @return rankingDateTime を戻します。
   */
  public String getRankingDateTime() {
    return rankingDateTime;
  }
  
  /**
   * @param rankingDateTime rankingDateTime を設定。
   */
  public void setRankingDateTime(String rankingDateTime) {
    this.rankingDateTime = rankingDateTime;
  }
  
  /**
   * @return shopCode を戻します。
   */
  public String getShopCode() {
    return ShopCode;
  }
  
  /**
   * @param shopCode shopCode を設定。
   */
  public void setShopCode(String shopCode) {
    ShopCode = shopCode;
  }
  
  /**
   * @return srchKeyName1 を戻します。
   */
  public String getSrchKeyName1() {
    return srchKeyName1;
  }
  
  /**
   * @param srchKeyName1 srchKeyName1 を設定。
   */
  public void setSrchKeyName1(String srchKeyName1) {
    this.srchKeyName1 = srchKeyName1;
  }
  
  /**
   * @return srchKeyName2 を戻します。
   */
  public String getSrchKeyName2() {
    return srchKeyName2;
  }
  
  /**
   * @param srchKeyName2 srchKeyName2 を設定。
   */
  public void setSrchKeyName2(String srchKeyName2) {
    this.srchKeyName2 = srchKeyName2;
  }
  
  /**
   * @return srchKeyName3 を戻します。
   */
  public String getSrchKeyName3() {
    return srchKeyName3;
  }
  
  /**
   * @param srchKeyName3 srchKeyName3 を設定。
   */
  public void setSrchKeyName3(String srchKeyName3) {
    this.srchKeyName3 = srchKeyName3;
  }
  
  /**
   * @return taxFlg を戻します。
   */
  public String getTaxFlg() {
    return taxFlg;
  }
  
  /**
   * @param taxFlg taxFlg を設定。
   */
  public void setTaxFlg(String taxFlg) {
    this.taxFlg = taxFlg;
  }
  
  /**
   * @return colorCode を戻します。
   */
  public String getColorCode() {
    return colorCode;
  }
  
  /**
   * @return newFixedPrice を戻します。
   */
  public String getNewFixedPrice() {
    return newFixedPrice;
  }
  
  /**
   * @param colorCode colorCode を設定。
   */
  public void setColorCode(String colorCode) {
    this.colorCode = colorCode;
  }
  
  /**
   * @param newFixedPrice newFixedPrice を設定。
   */
  public void setNewFixedPrice(String newFixedPrice) {
    this.newFixedPrice = newFixedPrice;
  }
  
  //getter of disableFlg
  public String getDisableFlg() {
    return this.disableFlg;
  }
  
  //setter of disableFlg
  public void setDisableFlg(String disableFlg) {
    if (SIUtil.isNull(disableFlg)) disableFlg = "0";
    this.disableFlg = SIUtil.changeTo(disableFlg.trim(), this.encode);
  }
  
  public String getRealAmountFlg() {
    return realAmountFlg;
  }
  
  public void setRealAmountFlg(String realAmountFlg) {
    if (SIUtil.isNull(realAmountFlg)) realAmountFlg = "0";
    this.realAmountFlg = realAmountFlg;
  }
  
  public String getOtherName() {
    return otherName;
  }
  
  public void setOtherName(String otherName) {
    if (SIUtil.isNull(otherName)) otherName = "";
    this.otherName = otherName;
  }
  
  public String getSalonPrice() {
    return salonPrice;
  }
  
  public void setSalonPrice(String salonPrice) {
    if (SIUtil.isNull(salonPrice)) salonPrice = "";
    this.salonPrice = salonPrice;
  }
  
  public String getStorageCode() {
    return storageCode;
  }
  
  public void setStorageCode(String storageCode) {
    if (SIUtil.isNull(storageCode)) storageCode = "";
    this.storageCode = storageCode;
  }
  
  /**
   * <b>init</b> 入力したデータを基づいて、このbeansを設定します。
   * 
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  // 7.1.1 ST0236 修正 ここから
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam, Connection conn) {
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);
    this.setShopCode((String) lUrlParam.getParam("shopCode"));
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {// 7.3.0 PI-NES0501
      this.setCmdtyCode(getMaxCmdtyCode(conn));// 7.3.0 PI-NES0501
    } else {
      this.setCmdtyCode((String) lUrlParam.getParam("cmdtyCode"));
    }
    this.setCmdtyName((String) lUrlParam.getParam("cmdtyName"));
    this.setJanCode((String) lUrlParam.getParam("janCode"));
    this.setMakerCode((String) lUrlParam.getParam("makerCode"));
    SIMaker maker = UIRegMaker.getCollection2(conn, this.getMakerCode());
    this.setMakerName(maker.getMakerName());
    this.setColorCode((String) lUrlParam.getParam("colorCode"));
    this.setNewFixedPrice((String) lUrlParam.getParam("newFixedPrice"));
    this.setBannerURL((String) lUrlParam.getParam("bannerURL"));
    this.setSrchKeyName1((String) lUrlParam.getParam("srchKeyName1"));
    this.setSrchKeyName2((String) lUrlParam.getParam("srchKeyName2"));
    this.setSrchKeyName3((String) lUrlParam.getParam("srchKeyName3"));
    this.setTaxFlg((String) lUrlParam.getParam("taxFlg"));
    this.setDeliveryTypeCode((String) lUrlParam.getParam("deliveryTypeCode"));
    this.setCmdtySize((String) lUrlParam.getParam("cmdtySize"));
    this.setRanking((String) lUrlParam.getParam("ranking"));
    this.setRankingDateTime((String) lUrlParam.getParam("rankingDateTime"));
    this.setInitDateTime((String) lUrlParam.getParam("initDateTime"));
    this.setDisableFlg((String) lUrlParam.getParam("disableFlg"));
    this.setRealAmountFlg((String) lUrlParam.getParam("realAmountFlg"));
    this.setOtherName((String) lUrlParam.getParam("otherName"));
    this.setStorageCode((String) lUrlParam.getParam("storageCode"));
    this.setSalonPrice((String) lUrlParam.getParam("salonPrice"));
  }
  
  public void clear() {
    this.setShopCode("");
    this.setCmdtyCode("");
    this.setCmdtyName("");
    this.setJanCode("");
    this.setMakerCode("");
    this.setMakerName("");
    this.setColorCode("");
    this.setNewFixedPrice("");
    this.setBannerURL("");
    this.setSrchKeyName1("");
    this.setSrchKeyName2("");
    this.setSrchKeyName3("");
    this.setTaxFlg("");
    this.setDeliveryTypeCode("");
    this.setCmdtySize("");
    this.setRanking("");
    this.setRankingDateTime("");
    this.setInitDateTime("");
    this.setDisableFlg("");
    this.setOtherName("");
    this.setStorageCode("");
    this.setSalonPrice("");
    // EDBTG003-00 elecs-matsushima add start
    this.setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_NORMAL);
    // EDBTG003-00 elecs-matsushima add end
  }
  
  public void getCmdtyParent(Connection dbConnection, String shopCode, String cmdtyCode) throws SIDBAccessException {
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    // 出力項目
    sqlStatement.append("SELECT aa.*,bb.makername  FROM cmdtymtbl aa,makertbl bb ");
    sqlStatement.append("WHERE shopcode = '0' ");
    sqlStatement.append("AND aa.makercode = bb.makercode ");
    sqlStatement.append("AND cmdtyCode = ").append(SIDBUtil.SQL2Str(cmdtyCode));
    // 実行
    try {
      statement = dbConnection.createStatement();
      log.debug("SQL=" + sqlStatement.toString());
      resultSet = statement.executeQuery(sqlStatement.toString());
      this.clear();
      // 商品レコードのセットの作成
      while (resultSet.next()) {
        this.setShopCode(resultSet.getString("shopcode"));
        this.setCmdtyCode(resultSet.getString("cmdtycode"));
        this.setCmdtyName(resultSet.getString("cmdtyname"));
        this.setJanCode(resultSet.getString("jancode"));
        this.setMakerCode(resultSet.getString("makercode"));
        this.setMakerName(resultSet.getString("makername"));
        this.setColorCode(resultSet.getString("colorcode"));
        this.setNewFixedPrice(resultSet.getString("newfixedprice"));
        this.setBannerURL(resultSet.getString("bannerURL"));
        this.setSrchKeyName1(resultSet.getString("srchkeyName1"));
        this.setSrchKeyName2(resultSet.getString("srchkeyName2"));
        this.setSrchKeyName3(resultSet.getString("srchkeyName3"));
        this.setTaxFlg(resultSet.getString("taxflg"));
        this.setDeliveryTypeCode(resultSet.getString("deliveryTypeCode"));
        this.setCmdtySize(resultSet.getString("cmdtysize"));
        this.setRanking(resultSet.getString("ranking"));
        this.setRankingDateTime(resultSet.getString("rankingdatetime"));
        this.setInitDateTime(resultSet.getString("initdatetime"));
        this.setDisableFlg(resultSet.getString("disableFlg"));
        this.setOtherName(resultSet.getString("othername"));
        this.setCmdtyCompositionFlg(resultSet.getString("cmdtycompositionflg"));
        this.setStorageCode(resultSet.getString("storageCode"));
        this.setSalonPrice(resultSet.getString("salonPrice"));
      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(resultSet, statement);
    }
    
  }
  
  /**
   * getCollection
   * 
   * @param Connection
   * @return Collection
   * @throws SIDBAccessException
   */
  public Collection getCollection(Connection dbConnection) throws SIDBAccessException {
    Collection individualColl = new ArrayList();
    Statement statement = null;
    ResultSet resultSet = null;
    UIIndividual individual = new UIIndividual();
    StringBuffer sqlStatement = new StringBuffer();
    sqlStatement.append("SELECT aa.cmdtycode,aa.individualcode,aa.arrivaldate,aa.usednewflg,aa.purchaseprice,aa.processingexpence");
    sqlStatement.append(",bb.amount,aa.bgprice,aa.alertamount,aa.amountflg,aa.purchaseprice2, ");
    if ("1".equals(this.getRealAmountFlg())) {
      sqlStatement.append("cc.total ");
      sqlStatement.append(",(CASE WHEN ( SELECT DISTINCT(1) FROM orderdetaillatestvw AS dd ");
      sqlStatement.append("WHERE aa.CmdtyCode = dd.CmdtyCode AND aa.IndividualCode = dd.IndividualCode) > (0) ::numeric ");
      sqlStatement.append("THEN 1 ELSE 0 END)+ ");
      
      sqlStatement.append("(CASE WHEN ( SELECT amount FROM cmdtyunittbl AS unit ");
      sqlStatement.append("WHERE aa.CmdtyCode = unit.CmdtyCode AND aa.IndividualCode = unit.IndividualCode) > 0 ::numeric ");
      sqlStatement.append("THEN 1 ELSE 0 END)+ ");// 在庫数量確認
      
      sqlStatement.append("(CASE WHEN ( SELECT DISTINCT(1) FROM estimatedetailtbl AS est ");
      sqlStatement.append("WHERE aa.CmdtyCode = est.CmdtyCode AND aa.IndividualCode = est.IndividualCode) > (0) ::numeric ");
      sqlStatement.append("THEN 1 ELSE 0 END)+ ");// 見積データに該当商品確認
      
      sqlStatement.append("(CASE WHEN ( SELECT DISTINCT(1) FROM keepdetailtbl AS ke ");
      sqlStatement.append("WHERE aa.CmdtyCode = ke.CmdtyCode AND aa.IndividualCode = ke.IndividualCode) > (0) ::numeric ");
      sqlStatement.append("THEN 1 ELSE 0 END) AS delFlg ");// 見積データに該当商品確認
      
      sqlStatement.append("FROM totalstockvw bb,individualtbl aa ");
      sqlStatement.append("LEFT JOIN realstocktotalvw cc ON aa.cmdtycode = cc.cmdtycode AND aa.individualcode = cc.individualcode ");
    } else {
      sqlStatement.append("'' AS total,1 AS delflg ");
      sqlStatement.append("FROM totalstockvw bb,individualtbl aa ");
    }
    sqlStatement.append("WHERE aa.cmdtycode = bb.cmdtycode AND aa.individualcode = bb.individualcode ");
    sqlStatement.append("AND aa.shopcode=").append(SIDBUtil.SQL2Str(this.ShopCode," "));
    sqlStatement.append("AND aa.cmdtyCode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
    sqlStatement.append("ORDER BY aa.individualcode DESC ");// 7.3.0 PI-NES0501
    // 実行
    try {
      statement = dbConnection.createStatement();
      log.debug("SQL=" + sqlStatement.toString());
      resultSet = statement.executeQuery(sqlStatement.toString());
      
      // 商品レコードのセットの作成
      while (resultSet.next()) {
        individual = new UIIndividual();
        individual.setCmdtyCode(resultSet.getString("cmdtycode"));
        individual.setIndividualCode(resultSet.getString("individualcode"));
        individual.setArrivalDate(SIDBUtil.getDate(resultSet.getTimestamp("arrivalDate")));
        individual.setUsedNewFlg(resultSet.getString("UsedNewFlg"));
        individual.setAmountFlg(resultSet.getString("amountflg"));
        if (SIUtil.isNotNull(resultSet.getString("amountflg")) && resultSet.getString("amountflg").equals("0")) individual.setPurchasePrice(resultSet.getString("PurchasePrice2"));
        else if (SIUtil.isNull(resultSet.getString("PurchasePrice"))) individual.setPurchasePrice("0");
        else individual.setPurchasePrice(resultSet.getString("PurchasePrice"));
        if (SIUtil.isNull(resultSet.getString("ProcessingExpence"))) individual.setProcessingExpence("0");
        else individual.setProcessingExpence(resultSet.getString("ProcessingExpence"));
        individual.setBgPrice(resultSet.getString("bgprice"));
        if (SIUtil.isNotNull(resultSet.getString("alertamount"))) individual.setAmount("*" + resultSet.getString("amount"));
        else individual.setAmount(resultSet.getString("amount"));
        individual.setBranchName(SIBGUtil.getBranch(dbConnection, individual.getCmdtyCode(), individual.getIndividualCode()));
        individual.setDeleteFlg(resultSet.getString("delFlg"));
        individual.setRealAmount(resultSet.getString("total"));
        
        individualColl.add(individual);
      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(resultSet, statement);
    }
    return individualColl;
  }
  
  /**
   * <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("");
    
    SICheckValid.checkValid(errors, "親コード", this.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);// 7.3.0 PI-NES0501
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "親コード", this.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);// 7.3.0 PI-NES0501
      SICheckValid.checkValid(errors, "親コード", this.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 13);
    }
    
    // 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);
    }
    
    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(), " "));
      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, "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_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "商品名", this.getCmdtyName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
    
    SICheckValid.checkValid(errors, "ブランドコード", this.getMakerCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "ブランドコード", this.getMakerCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    }
    if (SIUtil.isNotNull(this.getShopCode()) && SIUtil.isNotNull(this.getMakerCode())) {
      lSqlBuf = new StringBuffer("SELECT makercode FROM makertbl WHERE makercode= '");
      lSqlBuf.append(this.makerCode + "' ");
      SICheckValid.checkExist(errors, lConnection, "ブランドコード", lSqlBuf.toString());
    }
    SICheckValid.checkValid(errors, "色コード", this.getColorCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "色コード", this.getColorCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    
    SICheckValid.checkValid(errors, "M価", this.getNewFixedPrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "M価", this.getNewFixedPrice(), 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);
    
    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);
    
    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.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());
    }
    
    SICheckValid.checkValid(errors, "死活フラグ", this.getDisableFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "死活フラグ", this.getDisableFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_DISABLE_FLG_INX);
    
    SICheckValid.checkValid(errors, "型式", this.getOtherName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 30);
    
    SICheckValid.checkValid(errors, "サロン価", this.getSalonPrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "サロン価", this.getSalonPrice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    
    return errors.isEmpty();
  }
  
  /**
   * <b>getMaxCmdtyCode</b> 親コードの最大値＋１を取得する。//7.3.0 PI-NES0501 画面に表示します。
   * 
   * @param Connection
   * @return string:取得した親コード
   * @throws なし
   */
  public static String getMaxCmdtyCode(Connection lConnection) {
    
    Statement lStatement = null;
    ResultSet lResultSet = null;
    String maxCmdtyCode = new String();
    maxCmdtyCode = "0";// 最大親コード初期値
    StringBuffer sqlBuf = new StringBuffer();
    sqlBuf.append("SELECT max(to_number(cmdtycode,'9999999999999'))+1 as maxcmdtycode FROM CmdtyMTbl");
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(sqlBuf.toString());
      while (lResultSet.next()) {
        maxCmdtyCode = lResultSet.getString("maxcmdtycode");
      }
    } catch (SQLException e) {
      log.debug("exception sql = " + sqlBuf.toString());
      e.printStackTrace();
    } catch (Exception e1) {
      e1.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    return maxCmdtyCode;
  }
  
  // EDBTG003-00 elecs-matsushima add start
  public String getCmdtyCompositionFlg() {
    return this.cmdtyCompositionFlg;
  }
  
  public void setCmdtyCompositionFlg(String cmdtyCompositionFlg) {
    if (SIUtil.isNull(cmdtyCompositionFlg)) cmdtyCompositionFlg = SIConfig.CMDTY_COMPOSITION_NORMAL;
    this.cmdtyCompositionFlg = cmdtyCompositionFlg;
  }
  // EDBTG003-00 elecs-matsushima add end
}
