/**
 * 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.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SICmdty;
import jp.co.sint.basic.SICmdtyComposition;
import jp.co.sint.basic.SICmdtyCompositionAppended;
import jp.co.sint.basic.SICmdtyCompositionGroupData;
import jp.co.sint.basic.SICmdtyCompositionGroupDetail;
import jp.co.sint.basic.SICmdtyCompositionOption;
import jp.co.sint.basic.SIColor;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIPointIndividual;
import jp.co.sint.basic.SIUserInfo;
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.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIFatalException;
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: UIRegCmdtyComposition.java,v 1.0 2003/09/19 Exp $
 * @author  elecs-matsushima
 * <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>
 *  SI        2012/11/21 Original
 */
public class UIRegCmdtyComposition extends SICmdtyComposition {
  
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // 中古・新品
  private String usedNewFlg = "";
  
  // 商品名
  private String cmdtyName = "";
  
  // メーカーコード
  private String makerCode = "";
  
  // 使用年数
  private String tenureofuse = "";
  
  // 保障期間
  private String guaranteedTerm = "";
  
  // 死活フラグ
  private String disableFlg = "0";
  
  // フロント表示
  private String frontDispFlg = "";
  
  // 新品定価のBG卸価フロント表示
  private String bgPriceDispFlg = "";
  
  // 問合せ区分
  private String inquiryFlg = "";
  
  // 値下げ表示
  private String priceDownFlg = "0";
  
  // 会員値引フラグ
  private String memberDiscountFlg = "1";
  
  // キャンペーン設定フラグ
  private String spCampaignFlg = "";
  
  // キャンペーン 通常価格
  private String nomalPrice = "";
  
  // キャンペーン特価区分
  private String campaignPriceFlg = "";
  
  // 商品説明
  private String commodityExplanation = "";
  
  // 追加コメント１タイトル
  private String expansionComment1Title = "";
  
  // 追加コメント１本文
  private String expansionComment1Text = "";
  
  // 追加コメント２タイトル
  private String expansionComment2Title = "";
  
  // 追加コメント２本文
  private String expansionComment2Text = "";
  
  // 追加コメント３タイトル
  private String expansionComment3Title = "";
  
  // 追加コメント３本文
  private String expansionComment3Text = "";
  
  // 追加コメント４タイトル
  private String expansionComment4Title = "";
  
  // 追加コメント４本文
  private String expansionComment4Text = "";
  
  //EDBTG005-00 kamata add start
  // 追加コメント５タイトル
  private String expansionComment5Title = "";
  
  // 追加コメント５本文
  private String expansionComment5Text = "";
  //EDBTG005-00 kamata add end
  
  // 備考
  private String remarks = "";
  
  // 新品定価
  private String newFixedPrice = "";
  
  // 商品構成グループ
  private List compositionGroupList = new ArrayList();
  
  // 添付商品
  private List compositionAppendedList = new ArrayList();
  
  // オプション商品
  private List compositionOptionList = new ArrayList();
  
  // 課税区分
  private String taxFlg = "2";
  
  // 画像タイトル１
  private String imageName1 = "";
  
  // 画像タイトル２
  private String imageName2 = "";
  
  // 画像タイトル３
  private String imageName3 = "";
  
  // 画像タイトル４
  private String imageName4 = "";
  
  // 画像タイトル５
  private String imageName5 = "";
  
  // 画像タイトル６
  private String imageName6 = "";
  
  // 画像タイトル７
  private String imageName7 = "";
  
  // 画像タイトル８
  private String imageName8 = "";
  
  // 画像タイトル９
  private String imageName9 = "";
  
  // 画像タイトル１０
  private String imageName10 = "";
  
  // 画像タイトル１１
  private String imageName11 = "";
  
  // セットコード（商品種別）
  private String individual1 = "";
  private String individual2 = "";
  private String individual3 = "";
  private String individual4 = "";
  
  // 表示フラグ（初期遷移時判定）
  private String firstDispFlg = "0";
  
  // ログインフラグ
  private boolean loginFlg = false;
  
  // 構成グループ数
  private String gCount = "0";
  
  // カラー選択を変更したグループ
  private String colorFlgChgGroup = "";
  
  // アクション対象の構成グループ番号
  private String actionGroup = "";
  
  // アクション対象の明細行番号
  private String actionLen = "";
  
  // BG卸価（税込）
  private String bgPrice = "";
  
  // BG卸価（税抜）
  private String bgPriceWithoutTax = "";
  
  // 予定原価
  private String purchaseprice = "";
  
  // 加工価格
  private String processingexpence = "";
  
  // 商品構成フラグ
  private String cmdtyCompositionFlg = SIConfig.CMDTY_COMPOSITION_NORMAL;
  
  // 呼び出し元画面ID
  private String collId = "";
  
  // 送料無料表記
  private String dispCarriageFreeFlg = "";
  
  // セット値引き表示
  private String discountDispFlg = "1";
  
  // キャッチコピー
  private String catchcopy = "";
  // 仕様
  private String specification = "";
  // 有効成分
  private String activeingredient = "";
  // 全成分
  private String component = "";
  // 注意事項
  private String precaution = "";
  // その他
  private String othernotice = "";
  // 検索用在庫コード
  private String searchIndividualCodeTxt = "";
  // カテゴリ名
  private String ctgryName = "";
  // サロン価
  private String salonPrice = "";
  /**
   * UIRegCmdty コンストラクタ
   *
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIRegCmdtyComposition() {}
  
  /**
   * UIRegCmdty コンストラクタ
   *
   * @param lRequest リクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public UIRegCmdtyComposition(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    init(lRequest, lUrlParam);
  }
  
  /**
   * デフォルト値を設定
   */
  public void defaultSet() {
    setUsedNewFlg("");
    setCmdtyName("");
    setMakerCode("");
    setTenureofuse("");
    setGuaranteedTerm("");
    setDisableFlg("0");
    setFrontDispFlg("0");
    setBgPriceDispFlg("0");
    setInquiryFlg("0");
    setPriceDownFlg("0");
    setMemberDiscountFlg("1");
    setSpCampaignFlg("0");
    setNomalPrice("");
    setCampaignPriceFlg("0");
    setCommodityExplanation("");
    setExpansionComment1Title("");
    setExpansionComment1Text("");
    setExpansionComment2Title("");
    setExpansionComment2Text("");
    setExpansionComment3Title("");
    setExpansionComment3Text("");
    setExpansionComment4Title("");
    setExpansionComment4Text("");
    // EDBTG005-00 kamata add start
    setExpansionComment5Title("");
    setExpansionComment5Text("");
    // EDBTG005-00 kamata add end
    setRemarks("");
    setNewFixedPrice("");
    setSalonPrice("");
    setActionGroup("");
    setActionLen("");
    setCatchcopy("");
    setSpecification("");
    setActiveingredient("");
    setComponent("");
    setPrecaution("");
    setPrecaution("");
    setOthernotice("");
    
    setCompositionGroupList(new ArrayList());
    setCompositionAppendedList(new ArrayList());
    setCompositionOptionList(new ArrayList());
    
    setShopCode("");
    setCmdtyCode("");
    setIndividualCode("");
    setCmdtySetFlg("");
    setUnitQuantity("");
    setSectionCount("");
    setAppendedCmdtyFlg("0");
    setSetDiscount("");
    setAddPointRate("");
    setBeforeBgprice("");
    setInitUserCode("");
    setUpdateUserCode("");
    setInitDatetime("");
    setUpdateDatetime(null);
    setIndividual4("");
    setBgPrice("");
    setPurchaseprice("");
    setProcessingexpence("");
    setDispCarriageFreeFlg("0");
    setDiscountDispFlg("1");
    setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_NORMAL);
  }
  
  /**
   * <b>init</b> 入力したデータを基づいて、このbeansを設定します。
   *
   * @param request データベースへのコネンクション
   * @param lUrlParam
   * @return true:不正なデータがある false:ない
   * @throws なし
   */
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam, Connection conn) {
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);
    defaultSet();
    
    // 商品構成
    setShopCode((String) lUrlParam.getParam("shopCode"));
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
      this.setCmdtyCode(UICmdtyParent.getMaxCmdtyCode(conn));
    } else {
      this.setCmdtyCode((String) lUrlParam.getParam("cmdtyCode"));
    }
    
    // セットコード
    if (SIUtil.isNull((String) lUrlParam.getParam("individual1")) && SIUtil.isNull((String) lUrlParam.getParam("individual2"))) {
      this.setIndividualCode((String) lUrlParam.getParam("individualCode"));
    } else {
      this.setIndividual1((String) lUrlParam.getParam("individual1"));
      this.setIndividual2((String) lUrlParam.getParam("individual2"));
      this.setIndividual3((String) lUrlParam.getParam("individual3"));
      this.setIndividual4((String) lUrlParam.getParam("individual4"));
      this.setIndividualCode(this.individual1 + "-" + this.individual2 + this.individual3 + "-" + this.individual4);
    }
    
    setCmdtySetFlg((String) lUrlParam.getParam("cmdtySetFlg"));
    setUnitQuantity((String) lUrlParam.getParam("unitQuantity"));
    setSectionCount((String) lUrlParam.getParam("sectionCount"));
    setAppendedCmdtyFlg((String) lUrlParam.getParam("appendedCmdtyFlg"));
    setSetDiscount((String) lUrlParam.getParam("setDiscount"));
    setSetDiscountWithoutTax((String) lUrlParam.getParam("setDiscountWithoutTax"));
    setGCount((String) lUrlParam.getParam("gCount"));
    setColorFlgChgGroup((String) lUrlParam.getParam("colorFlgChgGroup"));
    setActionGroup((String) lUrlParam.getParam("actionGroup"));
    setActionLen((String) lUrlParam.getParam("actionLen"));
    setBgPrice((String) lUrlParam.getParam("bgPrice"));
    setBgPriceWithoutTax((String) lUrlParam.getParam("bgPriceWithoutTax"));
    setPurchaseprice((String) lUrlParam.getParam("purchasePrice"));
    setProcessingexpence((String) lUrlParam.getParam("processingexpence"));
    setBeforeBgprice((String) lUrlParam.getParam("beforeBgPrice"));
    setBeforeBgpriceWithoutTax((String) lUrlParam.getParam("beforeBgPriceWithoutTax"));
    setAddPointRate((String) lUrlParam.getParam("addPointRate"));
    
    this.setDispCarriageFreeFlg((String) lUrlParam.getParam("dispCarriageFreeFlg"));
    this.setDiscountDispFlg((String) lUrlParam.getParam("discountDispFlg"));
    
    this.setUsedNewFlg((String) lUrlParam.getParam("usedNewFlg"));
    this.setCmdtyName((String) lUrlParam.getParam("cmdtyName"));
    this.setMakerCode((String) lUrlParam.getParam("makerCode"));
    this.setTenureofuse((String) lUrlParam.getParam("tenureofuse"));
    this.setGuaranteedTerm((String) lUrlParam.getParam("guaranteedTerm"));
    this.setDisableFlg((String) lUrlParam.getParam("disableFlg"));
    this.setFrontDispFlg((String) lUrlParam.getParam("frontDispFlg"));
    this.setBgPriceDispFlg((String) lUrlParam.getParam("bgPriceDispFlg"));
    this.setInquiryFlg((String) lUrlParam.getParam("inquiryFlg"));
    this.setPriceDownFlg((String) lUrlParam.getParam("priceDownFlg"));
    this.setMemberDiscountFlg((String) lUrlParam.getParam("memberDiscountFlg"));
    this.setSpCampaignFlg((String) lUrlParam.getParam("spCampaignFlg"));
    this.setNomalPrice((String) lUrlParam.getParam("nomalPrice"));
    this.setCampaignPriceFlg((String) lUrlParam.getParam("campaignPriceFlg"));
    if (SIUtil.isNull(this.getCampaignPriceFlg())) this.setCampaignPriceFlg("0");
    this.setCommodityExplanation((String) lUrlParam.getParam("commodityExplanation"));
    this.setExpansionComment1Title((String) lUrlParam.getParam("expansionComment1Title"));
    this.setExpansionComment1Text((String) lUrlParam.getParam("expansionComment1Text"));
    this.setExpansionComment2Title((String) lUrlParam.getParam("expansionComment2Title"));
    this.setExpansionComment2Text((String) lUrlParam.getParam("expansionComment2Text"));
    this.setExpansionComment3Title((String) lUrlParam.getParam("expansionComment3Title"));
    this.setExpansionComment3Text((String) lUrlParam.getParam("expansionComment3Text"));
    this.setExpansionComment4Title((String) lUrlParam.getParam("expansionComment4Title"));
    this.setExpansionComment4Text((String) lUrlParam.getParam("expansionComment4Text"));
    // EDBTG005-00 kamata add start
    this.setExpansionComment5Title((String) lUrlParam.getParam("expansionComment5Title"));
    this.setExpansionComment5Text((String) lUrlParam.getParam("expansionComment5Text"));
    // EDBTG005-00 kamata add end
    this.setRemarks((String) lUrlParam.getParam("remarks"));
    this.setNewFixedPrice((String) lUrlParam.getParam("newFixedPrice"));
    this.setInitDatetime((String) lUrlParam.getParam("initDateTime"));
    
    this.setCatchcopy((String) lUrlParam.getParam("catchcopy"));        // キャッチコピー
    this.setSpecification((String) lUrlParam.getParam("specification"));    // 仕様
    this.setActiveingredient((String) lUrlParam.getParam("activeingredient"));  // 有効成分
    this.setComponent((String) lUrlParam.getParam("component"));        // 全成分
    this.setPrecaution((String) lUrlParam.getParam("precaution"));        // 注意事項
    this.setOthernotice((String) lUrlParam.getParam("othernotice"));      // その他
    this.setSearchIndividualCodeTxt((String) lUrlParam.getParam("searchIndividualCodeTxt")); //検索用在庫コード
    this.setSalonPrice((String) lUrlParam.getParam("salonPrice"));
    
    // 商品構成グループ
    int groupCnt = intValueFromString(getGCount());
    
    for (int i = 1; i <= groupCnt; i++){
      SICmdtyCompositionGroupData groupData = new SICmdtyCompositionGroupData();
      
      // トークン作成
      String gToken = "-" + String.valueOf(i);
      
      // ヘッダ情報の取得
      groupData.setShopCode(getShopCode());
      groupData.setCmdtyCode(getCmdtyCode());
      groupData.setIndividualCode(getIndividualCode());
      groupData.setGroupCode(String.valueOf(i));
      groupData.setSpecificationName((String) lUrlParam.getParam("specificationName"+ gToken));
      groupData.setColorFlg((String) lUrlParam.getParam("colorflg"+ gToken));
      
      // 明細の行数を取得
      int gDetailCnt = intValueFromString((String) lUrlParam.getParam("gDetailCount" + gToken));
      
      // 明細毎の情報を取得
      for (int j = 1; j <= gDetailCnt; j++){
        SICmdtyCompositionGroupDetail groupDetail = new SICmdtyCompositionGroupDetail();
        
        // 明細用のトークンを作成
        String gDetailToken = gToken + "-" + String.valueOf(j);
        
        // 明細行を設定
        groupDetail.setShopCode(getShopCode());
        groupDetail.setCmdtyCode(getCmdtyCode());
        groupDetail.setIndividualCode(getIndividualCode());
        groupDetail.setGroupCode(groupData.getGroupCode());
        groupDetail.setDetailIndividualCode((String) lUrlParam.getParam("detailIndividualCode" + gDetailToken));
        groupDetail.setDetailCmdtyCode((String) lUrlParam.getParam("detailCmdtyCode" + gDetailToken));
        groupDetail.setBgPrice((String) lUrlParam.getParam("bgPriceHid" + gDetailToken));
        groupDetail.setCmdtyName((String) lUrlParam.getParam("cmdtyNameHid" + gDetailToken));
        groupDetail.setAddPointRate((String) lUrlParam.getParam("addPointRateHid" + gDetailToken));
        
        if (SIUtil.isNotNull(groupData.getColorFlg()) && groupData.getColorFlg().equals("1")){ // カラーフラグにチェックが入っている場合
          // hidden値を設定
          groupDetail.setDetailIndividualName((String) lUrlParam.getParam("detailIndividualNameHid" + gDetailToken));
        } else { // カラーフラグにチェックが無い場合
          groupDetail.setDetailIndividualName((String) lUrlParam.getParam("detailIndividualName" + gDetailToken));
          
          // チェックが変更されたグループの明細の場合、disabled=true→disabled=falseになっているので、
          // hidden値を設定する。
          if (SIUtil.isNotNull(getColorFlgChgGroup()) && groupData.getGroupCode().equals(getColorFlgChgGroup())){
            groupDetail.setDetailIndividualName((String) lUrlParam.getParam("detailIndividualNameHid" + gDetailToken));
          }
        }
        
        groupDetail.setCompositionCount((String) lUrlParam.getParam("compositionCount" + gDetailToken));
        groupDetail.setDispOrder((String) lUrlParam.getParam("dispOrder" + gDetailToken));
        
        groupData.getCompositionGroupDetail().add(groupDetail);
      }
      
      getCompositionGroupList().add(groupData);
    }
    
    // 添付商品
    int appendCnt = intValueFromString((String) lUrlParam.getParam("appendCount"));
    for (int i = 1; i <= appendCnt; i++){
      SICmdtyCompositionAppended compAppend = new SICmdtyCompositionAppended();
      
      String apdToken = "-" + String.valueOf(i);
      
      // 明細行を設定
      compAppend.setShopCode(getShopCode());
      compAppend.setCmdtyCode(getCmdtyCode());
      compAppend.setIndividualCode(getIndividualCode());
      
      compAppend.setDetailCmdtyCode((String) lUrlParam.getParam("detailCmdtyCodeApd" + apdToken));
      compAppend.setDetailIndividualCode((String) lUrlParam.getParam("detailindividualcodeApd" + apdToken));
      compAppend.setSetCount((String) lUrlParam.getParam("setCountApd" + apdToken));
      compAppend.setAppendedCount((String) lUrlParam.getParam("appendedCountApd" + apdToken));
      compAppend.setDispOrder((String) lUrlParam.getParam("dispOrderApd" + apdToken));
      compAppend.setCmdtyName((String) lUrlParam.getParam("cmdtyNameHidApd" + apdToken));
      
      getCompositionAppendedList().add(compAppend);
    }
    
    // オプション
    int optionCnt = intValueFromString((String) lUrlParam.getParam("optionCount"));
    for (int i = 1; i <= optionCnt; i++){
      SICmdtyCompositionOption compOption = new SICmdtyCompositionOption();
      
      String optToken = "-" + String.valueOf(i);
      
      // 明細行を設定
      compOption.setShopCode(getShopCode());
      compOption.setCmdtyCode(getCmdtyCode());
      compOption.setIndividualCode(getIndividualCode());
      compOption.setDetailCmdtyCode((String) lUrlParam.getParam("detailCmdtyCodeOpt" + optToken));
      compOption.setDetailIndividualCode((String) lUrlParam.getParam("detailIndividualCodeOpt" + optToken));
      compOption.setCompositionCount((String) lUrlParam.getParam("compositionCountOpt" + optToken));
      compOption.setDispOrder((String) lUrlParam.getParam("dispOrderOpt" + optToken));
      compOption.setNotices((String) lUrlParam.getParam("notiesOpt" + optToken));
      compOption.setCmdtyName((String) lUrlParam.getParam("cmdtyNameHidOpt" + optToken));
      compOption.setBgPrice((String) lUrlParam.getParam("bgPriceHidOpt" + optToken));
      
      getCompositionOptionList().add(compOption);
    }
  }
  
  /**
   * 文字列を数字に変換します。
   *
   * @param val
   * @return 変換後数字
   */
  private int intValueFromString(String val){
    if (SIUtil.isNull(val)) return 0;
    try {
      return Integer.valueOf(val).intValue();
    } catch(NumberFormatException e){
      e.printStackTrace();
      return 0;
    }
  }
  
  /**
   * <b>getCmdtyComposition</b>
   *
   * @param lConnection データベースへのコネンクション
   * @return なし
   * @throws SIDBAccessException
   * @throws なし
   */
  public boolean getCmdtyComposition(Connection lConnection) throws SIDBAccessException {
    
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    // 商品構成マスタ
    sqlStatement.append("SELECT aa.*, bb.cmdtyname, bb.NewFixedPrice, bb.MakerCode, bb.DisableFlg,bb.SalonPrice,  ");
    sqlStatement.append("cc.usedNewFlg, cc.Tenureofuse, cc.GuaranteedTerm, ");
    sqlStatement.append("cc.FrontDispFlg, cc.BgPriceDispFlg, cc.InquiryFlg, cc.PriceDownFlg, cc.MemberDiscountFlg, ");
    sqlStatement.append("cc.SpCampaignFlg, cc.NomalPrice, cc.CampaignPriceFlg, cc.CommodityExplanation, ");
    sqlStatement.append("cc.ExpansionComment1Title, cc.ExpansionComment1Text, cc.ExpansionComment2Title, cc.ExpansionComment2Text, ");
    sqlStatement.append("cc.ExpansionComment3Title, cc.ExpansionComment3Text, cc.ExpansionComment4Title, cc.ExpansionComment4Text, ");
    // EDBTG005-00 kamata add start
    sqlStatement.append("cc.ExpansionComment5Title, cc.ExpansionComment5Text, ");
    // EDBTG005-00 kamata add end
    sqlStatement.append("cc.Remarks, cc.bgprice, cc.purchaseprice, cc.processingexpence, cc.bgpricewithouttax, ");
    sqlStatement.append("cc.imagename1, cc.imagename2, cc.imagename3, cc.imagename4, cc.imagename5, ");
    sqlStatement.append("cc.imagename6, cc.imagename7, cc.imagename8, cc.imagename9, cc.imagename10, ");
    sqlStatement.append("cc.imagename11, cc.bgpricewithouttax+aa.setdiscountwithouttax AS beforeBgpriceWithoutTax, ");
    sqlStatement.append("cc.catchcopy, cc.specification, cc.activeingredient, ");
    sqlStatement.append("cc.component, cc.precaution, cc.othernotice ");
    sqlStatement.append(" FROM cmdtycompositionmtbl aa, ");
    sqlStatement.append("cmdtymtbl bb, ");
    sqlStatement.append("individualtbl cc ");
    sqlStatement.append("WHERE aa.shopcode = '0' ");
    sqlStatement.append("AND aa.shopcode = bb.shopcode ");
    sqlStatement.append("AND aa.cmdtycode = bb.cmdtycode ");
    sqlStatement.append("AND aa.shopcode = cc.shopcode ");
    sqlStatement.append("AND aa.cmdtycode = cc.cmdtycode ");
    sqlStatement.append("AND aa.individualcode = cc.individualcode ");
    sqlStatement.append("AND aa.cmdtyCode = ").append(SIDBUtil.SQL2Str(getCmdtyCode()));
    sqlStatement.append("AND aa.individualcode = ").append(SIDBUtil.SQL2Str(getIndividualCode()));
    
    try {
      statement = lConnection.createStatement();
      log.debug("SQL=" + sqlStatement.toString());
      resultSet = statement.executeQuery(sqlStatement.toString());
      this.defaultSet();
      UIRegPointIndividual regPointIndividual = new UIRegPointIndividual();
      // 商品構成レコードのセットの作成
      while (resultSet.next()) {
        this.setShopCode(resultSet.getString("shopcode"));
        this.setCmdtyCode(resultSet.getString("cmdtycode"));
        this.setIndividualCode(resultSet.getString("individualCode"));
        this.setCmdtySetFlg(resultSet.getString("cmdtySetFlg"));
        this.setUnitQuantity(resultSet.getString("unitQuantity"));
        this.setSectionCount(resultSet.getString("sectionCount"));
        this.setAppendedCmdtyFlg(resultSet.getString("appendedCmdtyFlg"));
        this.setSetDiscount(resultSet.getString("setDiscount"));
        this.setSetDiscountWithoutTax(resultSet.getString("setDiscountWithoutTax"));
        this.setDispCarriageFreeFlg(resultSet.getString("dispCarriageFree"));
        this.setDiscountDispFlg(resultSet.getString("discountDispFlg"));
        this.setAddPointRate(regPointIndividual.getCmdtyPointRate(lConnection,getCmdtyCode(), getIndividualCode()));
        this.setBeforeBgprice(resultSet.getString("beforeBgprice"));
        this.setBeforeBgpriceWithoutTax(resultSet.getString("beforeBgpriceWithoutTax"));
        this.setInitUserCode(resultSet.getString("initUserCode"));
        this.setUpdateUserCode(resultSet.getString("updateUserCode"));
        this.setInitDatetime(resultSet.getString("initdatetime"));
        this.setUpdateDatetime(resultSet.getDate("updateDatetime"));
        this.setUsedNewFlg(resultSet.getString("usedNewFlg"));
        this.setCmdtyName(resultSet.getString("CmdtyName"));
        this.setMakerCode(resultSet.getString("MakerCode"));
        this.setBgPrice(resultSet.getString("bgPrice"));
        this.setBgPriceWithoutTax(resultSet.getString("bgPriceWithoutTax"));
        this.setPurchaseprice(resultSet.getString("purchasePrice"));
        this.setProcessingexpence(resultSet.getString("processingExpence"));
        this.setTenureofuse(resultSet.getString("TenureOfUse"));
        this.setGuaranteedTerm(resultSet.getString("GuaranteedTerm"));
        this.setDisableFlg(resultSet.getString("DisableFlg"));
        this.setFrontDispFlg(resultSet.getString("FrontDispFlg"));
        this.setBgPriceDispFlg(resultSet.getString("BgPriceDispFlg"));
        this.setInquiryFlg(resultSet.getString("InquiryFlg"));
        this.setPriceDownFlg(resultSet.getString("PriceDownFlg"));
        this.setMemberDiscountFlg(resultSet.getString("MemberDiscountFlg"));
        this.setSpCampaignFlg(resultSet.getString("SpCampaignFlg"));
        this.setNomalPrice(resultSet.getString("NomalPrice"));
        this.setCampaignPriceFlg(resultSet.getString("CampaignPriceFlg"));
        this.setCommodityExplanation(resultSet.getString("CommodityExplanation"));
        this.setExpansionComment1Title(resultSet.getString("ExpansionComment1Title"));
        this.setExpansionComment1Text(resultSet.getString("ExpansionComment1Text"));
        this.setExpansionComment2Title(resultSet.getString("ExpansionComment2Title"));
        this.setExpansionComment2Text(resultSet.getString("ExpansionComment2Text"));
        this.setExpansionComment3Title(resultSet.getString("ExpansionComment3Title"));
        this.setExpansionComment3Text(resultSet.getString("ExpansionComment3Text"));
        this.setExpansionComment4Title(resultSet.getString("ExpansionComment4Title"));
        this.setExpansionComment4Text(resultSet.getString("ExpansionComment4Text"));
        // EDBTG005-00 kamata add start
        this.setExpansionComment5Title(resultSet.getString("ExpansionComment5Title"));
        this.setExpansionComment5Text(resultSet.getString("ExpansionComment5Text"));
        // EDBTG005-00 kamata add end
        this.setRemarks(resultSet.getString("Remarks"));
        this.setNewFixedPrice(resultSet.getString("NewFixedPrice"));
        this.setSalonPrice(resultSet.getString("SalonPrice"));
        this.setImageName1(resultSet.getString("imagename1"));
        this.setImageName2(resultSet.getString("imagename2"));
        this.setImageName3(resultSet.getString("imagename3"));
        this.setImageName4(resultSet.getString("imagename4"));
        this.setImageName5(resultSet.getString("imagename5"));
        this.setImageName6(resultSet.getString("imagename6"));
        this.setImageName7(resultSet.getString("imagename7"));
        this.setImageName8(resultSet.getString("imagename8"));
        this.setImageName9(resultSet.getString("imagename9"));
        this.setImageName10(resultSet.getString("imagename10"));
        this.setImageName11(resultSet.getString("imagename11"));

        this.setCatchcopy(resultSet.getString("catchcopy"));        // キャッチコピー
        this.setSpecification(resultSet.getString("specification"));    // 仕様
        this.setActiveingredient(resultSet.getString("activeingredient"));  // 有効成分
        this.setComponent(resultSet.getString("component"));        // 全成分
        this.setPrecaution(resultSet.getString("precaution"));        // 注意事項
        this.setOthernotice(resultSet.getString("othernotice"));      // その他

      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(resultSet, statement);
    }
    
    // 商品構成グループを取得
    getCmdtyCompositionGroup(lConnection);
    
    // 添付商品が存在する場合のみ添付商品取得
    if (getAppendedCmdtyFlg().equals("1")){
      getcompositionAppended(lConnection);
    }
    
    // オプションを取得
    getCompositionOption(lConnection);
    
    return true;
  }
  
  /**
   * グループコードより、対象のグループの値を設定します。
   * @param groupCode NULLの場合はすべての構成グループを対象
   * @throws SIDBAccessException
   */
  public void getCmdtyCompositionGroupDetail(String groupCode, Connection lConnection) throws SIDBAccessException{
    
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    Collection colorColl=SIColor.getNameCollection(lConnection);
    if (getCompositionGroupList() == null) return;
    
    UIRegPointIndividual regPointIndividual = new UIRegPointIndividual();
    for (int i = 0; i < getCompositionGroupList().size(); i++){
      SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
      if (groupData != null && SIUtil.isNotNull(groupData.getColorFlg()) && groupData.getColorFlg().equals("1")){
        if (SIUtil.isNull(groupCode) || groupCode.equals(groupData.getGroupCode())){
          List detailList = groupData.getCompositionGroupDetail();
          
          if (detailList != null){
            for (int j = 0; j < detailList.size(); j++){
              SICmdtyCompositionGroupDetail detailData = (SICmdtyCompositionGroupDetail)detailList.get(j);
              if (detailData != null && SIUtil.isNotNull(detailData.getIndividualCode()) && SIUtil.isNotNull(detailData.getCmdtyCode())){
                try {
                  sqlStatement = new StringBuffer();
                  sqlStatement.append("SELECT aa.* ");
                  sqlStatement.append("FROM cmdtyunittbl aa ");
                  sqlStatement.append("WHERE aa.shopcode = '0' ");
                  sqlStatement.append(" AND aa.cmdtyCode = ").append(SIDBUtil.SQL2Str(detailData.getDetailCmdtyCode()));
                  sqlStatement.append(" AND aa.individualcode = ").append(SIDBUtil.SQL2Str(detailData.getDetailIndividualCode()));
                  
                  statement = lConnection.createStatement();
                  log.debug("SQL=" + sqlStatement.toString());
                  resultSet = statement.executeQuery(sqlStatement.toString());
                  
                  while (resultSet.next()) {
                    detailData.setCmdtyName(resultSet.getString("cmdtyname"));
                    detailData.setDetailIndividualName(SIUtil.getNameFromColl(colorColl,resultSet.getString("colorcode")));
                    detailData.setBgPrice(resultSet.getString("unitprice"));
                    detailData.setBgPriceWithoutTax(resultSet.getString("unitpricewithouttax"));
                    detailData.setAddPointRate(regPointIndividual.getCmdtyPointRate(lConnection, detailData.getDetailCmdtyCode(), detailData.getDetailIndividualCode()));
                  }
                  detailList.set(j, detailData);
                } catch (Exception ex) {
                  log.debug("exception sql = " + sqlStatement.toString());
                  throw new SIDBAccessException(ex);
                } finally {
                  SIDBUtil.close(resultSet, statement);
                }
              }
            }
            groupData.setCompositionGroupDetail(detailList);
          }
          getCompositionGroupList().set(i, groupData);
        }
      }
    }
  }
  
  /**
   * 構成グループを削除します
   * @param groupCode
   */
  public void cmdtyGroupDel(String groupCode){
    if (getCompositionGroupList() == null || getCompositionGroupList().size() <= 0) return;
    if (SIUtil.isNull(groupCode)) return;
    
    int listCnt = getCmdtyGroupListNo(groupCode);
    
    // 削除を行う。
    if (listCnt >= 0) {
      getCompositionGroupList().remove(listCnt);
    }
    
    cmdtyGroupCountRefresh();
  }
  
  /**
   * 構成グループの明細を削除します。
   * @param groupCode
   * @param lenNo
   */
  public void cmdtyGroupDetailDel(String groupCode, String lenNo){
    if (getCompositionGroupList() == null || getCompositionGroupList().size() <= 0) return;
    if (SIUtil.isNull(groupCode) || SIUtil.isNull(lenNo)) return;
    
    int lenNoInt;
    try {
      lenNoInt = Integer.valueOf(lenNo).intValue();
    } catch (NumberFormatException e){
      e.printStackTrace();
      return;
    }
    
    int listCnt = getCmdtyGroupListNo(groupCode);
    
    if (listCnt >= 0) {
      SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData)getCompositionGroupList().get(listCnt);
      
      if (groupData.getCompositionGroupDetail().size() >= lenNoInt){
        groupData.getCompositionGroupDetail().remove(lenNoInt);
        getCompositionGroupList().set(listCnt, groupData);
      }
    }
  }
  
  /**
   * 構成グループの初期値を取得します
   * @return
   */
  public SICmdtyCompositionGroupData defaultCmdtyGroup(){
    SICmdtyCompositionGroupData groupDataTmp = new SICmdtyCompositionGroupData();
    groupDataTmp.setCompositionGroupDetail(new ArrayList());
    groupDataTmp.getCompositionGroupDetail().add(new SICmdtyCompositionGroupDetail());
    
    return groupDataTmp;
  }
  
  /**
   * 構成グループを1つ追加します
   */
  public void cmdtyGroupAdd(){
    if (getCompositionGroupList() == null) setCompositionGroupList(new ArrayList());
    getCompositionGroupList().add(defaultCmdtyGroup());
    
    cmdtyGroupCountRefresh();
  }
  
  /**
   * 構成グループの明細を1行追加します
   * @param groupCode
   */
  public void cmdtyGroupDetailAdd(String groupCode){
    if (getCompositionGroupList() == null || getCompositionGroupList().size() <= 0) return;
    if (SIUtil.isNull(groupCode)) return;
    
    int listCnt = getCmdtyGroupListNo(groupCode);
    
    if (listCnt >= 0) {
      SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData)getCompositionGroupList().get(listCnt);
      
      if (groupData.getCompositionGroupDetail() == null) groupData.setCompositionGroupDetail(new ArrayList());
      groupData.getCompositionGroupDetail().add(new SICmdtyCompositionGroupDetail());
      getCompositionGroupList().set(listCnt, groupData);
    }
  }
  
  /**
   * 対象の構成グループのリスト番号を取得します
   * @param groupCode
   */
  public int getCmdtyGroupListNo(String groupCode){
    if (SIUtil.isNull(groupCode)) return -1;
    
    for (int i = 0; i < getCompositionGroupList().size(); i++){
      SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData)getCompositionGroupList().get(i);
      if (groupData.getGroupCode().equals(groupCode)) {
        return i;
      }
    }
    
    return -1;
  }
  
  /**
   * 構成グループの構成項番を再設定します。
   */
  public void cmdtyGroupCountRefresh() {
    if (getCompositionGroupList() == null || getCompositionGroupList().size() <= 0) return;
    
    for (int i = 1; i <= getCompositionGroupList().size(); i++){
      SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData)getCompositionGroupList().get(i - 1);
      groupData.setGroupCode(String.valueOf(i));
      getCompositionGroupList().set(i - 1, groupData);
    }
  }
  
  /**
   * オプション明細行を削除します。
   * @param lenNo
   */
  public void cmdtyOptionDel(String lenNo){
    if (getCompositionOptionList() == null || getCompositionOptionList().size() <= 0) return;
    if (SIUtil.isNull(lenNo)) return;
    
    int lenNoInt;
    try {
      lenNoInt = Integer.valueOf(lenNo).intValue();
    } catch (NumberFormatException e){
      e.printStackTrace();
      return;
    }
    
    if (getCompositionOptionList().size() >= lenNoInt){
      getCompositionOptionList().remove(lenNoInt);
    }
  }
  
  /**
   * オプションの明細を1行追加します
   * @param groupCode
   */
  public void cmdtyOptionAdd(){
    if (getCompositionOptionList() == null){
      setCompositionOptionList(new ArrayList());
    }
    getCompositionOptionList().add(new SICmdtyCompositionOption());
  }
  
  /**
   * 添付商品明細行を削除します。
   * @param lenNo
   */
  public void cmdtyAppendedDel(String lenNo){
    if (getCompositionAppendedList() == null || getCompositionAppendedList().size() <= 0) return;
    if (SIUtil.isNull(lenNo)) return;
    
    int lenNoInt;
    try {
      lenNoInt = Integer.valueOf(lenNo).intValue();
    } catch (NumberFormatException e){
      e.printStackTrace();
      return;
    }
    
    if (getCompositionAppendedList().size() >= lenNoInt){
      getCompositionAppendedList().remove(lenNoInt);
    }
  }
  
  /**
   * 添付商品の明細を1行追加します
   * @param groupCode
   */
  public void cmdtyAppendedAdd(){
    if (getCompositionAppendedList() == null){
      setCompositionAppendedList(new ArrayList());
    }
    getCompositionAppendedList().add(new SICmdtyCompositionAppended());
  }
  
  /**
   * 登録/更新前の代表構成フラグを設定します。
   * @param groupDataiList
   * @return
   */
  public void updateSetFlagShipproductFlg(){
    if (getCompositionGroupList() == null) return;
    
    if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_VARIATION_SET)) { // 変動
      for (int i = 0; i < getCompositionGroupList().size(); i++){
        SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
        if (groupData == null || groupData.getCompositionGroupDetail() == null) continue;
        if (groupData.getCompositionGroupDetail().size() <= 0) continue;
        
        groupData.setCompositionGroupDetail(groupDetailRefreshShipproductFlg(groupData.getCompositionGroupDetail()));
        getCompositionGroupList().set(i, groupData);
      }
      
    } else if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_SELECTION_SET)  //よりどり
               ||getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_SPECIFICATION)//仕様指定品
    ) {
      boolean flgSetFlg  = false;
      
      for (int i = 0; i < getCompositionGroupList().size(); i++){
        SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
        if (groupData == null || groupData.getCompositionGroupDetail() == null) continue;
        if (groupData.getCompositionGroupDetail().size() <= 0) continue;
        
        if (!flgSetFlg) {
          groupData.setCompositionGroupDetail(groupDetailRefreshShipproductFlg(groupData.getCompositionGroupDetail()));
          flgSetFlg = true;
        } else {
          for (int j = 0; j < groupData.getCompositionGroupDetail().size(); j++){
            SICmdtyCompositionGroupDetail groupDatail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(j);
            if (groupDatail == null) continue;
            groupDatail.setFlagShipproductFlg(0);
            groupData.getCompositionGroupDetail().set(j, groupDatail);
          }
        }
        getCompositionGroupList().set(i, groupData);
      }
      
    } else if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_FIXED_SET)) { //固定
      boolean flgSetFlg  = false;
      
      for (int i = 0; i < getCompositionGroupList().size(); i++){
        SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
        if (groupData == null || groupData.getCompositionGroupDetail() == null) continue;
        if (groupData.getCompositionGroupDetail().size() <= 0) continue;
        
        if (!flgSetFlg) {
          for (int j = 0; j < groupData.getCompositionGroupDetail().size(); j++){
            SICmdtyCompositionGroupDetail groupDatail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(j);
            if (groupDatail == null) continue;
            groupDatail.setFlagShipproductFlg(1);
            groupData.getCompositionGroupDetail().set(j, groupDatail);
          }
          flgSetFlg = true;
        } else {
          for (int j = 0; j < groupData.getCompositionGroupDetail().size(); j++){
            SICmdtyCompositionGroupDetail groupDatail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(j);
            if (groupDatail == null) continue;
            groupDatail.setFlagShipproductFlg(0);
            groupData.getCompositionGroupDetail().set(j, groupDatail);
          }
        }
        getCompositionGroupList().set(i, groupData);
      }
    }
  }
  
  /**
   * 構成グループ明細のデータ設定
   * @param groupDataiList
   * @return
   */
  public List groupDetailRefreshShipproductFlg(List groupDataiList){
    if (groupDataiList == null) return groupDataiList;
    
    if (groupDataiList.size() > 0) {
      int minListCnt = 0;
      
      SICmdtyCompositionGroupDetail groupDatail = (SICmdtyCompositionGroupDetail) groupDataiList.get(0);
      int minDispOrder = 999999;
      
      try {
        if (SIUtil.isNotNull(groupDatail.getDispOrder())){
          minDispOrder = Integer.valueOf(groupDatail.getDispOrder()).intValue();
        }
      } catch (NumberFormatException e){}
      
      groupDatail.setFlagShipproductFlg(0);
      groupDataiList.set(0, groupDatail);
      
      for (int i = 1; i < groupDataiList.size(); i++) {
        groupDatail = (SICmdtyCompositionGroupDetail) groupDataiList.get(i);
        groupDatail.setFlagShipproductFlg(0);
        groupDataiList.set(i, groupDatail);
        
        int chkDispOrder = 999999;
        
        try {
          if (SIUtil.isNotNull(groupDatail.getDispOrder())){
            chkDispOrder = Integer.valueOf(groupDatail.getDispOrder()).intValue();
          }
        } catch (NumberFormatException e){}
        
        if (chkDispOrder < minDispOrder) {
          minListCnt = i;
          minDispOrder = chkDispOrder;
        }
      }
      
      groupDatail = (SICmdtyCompositionGroupDetail) groupDataiList.get(minListCnt);
      groupDatail.setFlagShipproductFlg(1);
      groupDataiList.set(minListCnt, groupDatail);
      
    }
    
    return groupDataiList;
  }
  
  /**
   * グループの代表構成商品を取得します。
   * @param groupCode
   * @return
   */
  public SICmdtyCompositionGroupDetail getShipproductData(String groupCode){
    if (SIUtil.isNull(groupCode)) return null;
    int groupCodeInt = -1;
    try {
      groupCodeInt = Integer.valueOf(groupCode).intValue();
    } catch (NumberFormatException e){
      e.printStackTrace();
      return null;
    }
    if (getCompositionGroupList() == null || getCompositionGroupList().size() <= 0){
      return null;
    }
    
    if ((groupCodeInt - 1) < 0 || groupCodeInt > getCompositionGroupList().size()) {
      return null;
    }
    
    SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(groupCodeInt - 1);
    
    if (groupData == null
        || groupData.getCompositionGroupDetail() == null
    ){
      return null;
    }
    
    for (int i = 0; i < groupData.getCompositionGroupDetail().size(); i++){
      SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(i);
      
      if (groupDetail != null) {
        if (groupDetail.getFlagShipproductFlg() == 1){
          return groupDetail;
        }
      }
    }
    return null;
  }
  
  /**
   * 各セット品に対する金額を算出します。
 * @throws SIDBAccessException
   */
  public void compositionCalc(Connection lConnection) throws SIDBAccessException{
    String bgPriceSum = "0";
    String bgPriceSumWithoutTax = "0";
    String purchasepriceSum = "0";
    String processingexpenceSum = "0";
    String afterBgPrice = "0";
    String afterBgPriceWithoutTax = "0";
    String setDiscountWithoutTax = "0";
    String pointRate = null;
    boolean sumFlg = false;
    
    // 構成によって算出する。
    if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_VARIATION_SET)) { // 変動セット品
      
      sumFlg = true;
      
      // 代表構成商品の金額を取得する
      for (int i = 0; i < getCompositionGroupList().size(); i++){
        SICmdtyCompositionGroupData  groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
        
        for (int j = 0; j < groupData.getCompositionGroupDetail().size(); j++){
          SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(j);
          
          if (groupDetail.getFlagShipproductFlg() == 1){
            if (SIUtil.isNull(pointRate)) pointRate = groupDetail.getAddPointRate();
            
            if (SIUtil.isNotNull(groupDetail.getBgPrice()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
              String cmdtyBgPrice = SIUtil.multi_LL(groupDetail.getBgPrice(), groupDetail.getCompositionCount());
              bgPriceSum = SIUtil.add_LL(bgPriceSum, cmdtyBgPrice);
              String cmdtyBgPriceWithoutTax = SIUtil.multi_LL(groupDetail.getBgPriceWithoutTax(), groupDetail.getCompositionCount());
              bgPriceSumWithoutTax = SIUtil.add_LL(bgPriceSumWithoutTax, cmdtyBgPriceWithoutTax);
            }
            
            if (SIUtil.isNotNull(groupDetail.getPurchaseprice()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
              String cmdtyPurchaseprice = SIUtil.multi_LL(groupDetail.getPurchaseprice(), groupDetail.getCompositionCount());
              purchasepriceSum = SIUtil.add_LL(purchasepriceSum, cmdtyPurchaseprice);
            }
            
            if (SIUtil.isNotNull(groupDetail.getProcessingexpence()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
              String cmdtyProcessingexpence = SIUtil.multi_LL(groupDetail.getProcessingexpence(), groupDetail.getCompositionCount());
              processingexpenceSum = SIUtil.add_LL(processingexpenceSum, cmdtyProcessingexpence);
            }
            break;
          }
        }
      }
    } else if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_SELECTION_SET)) { // よりどりセット品
      String cmdtyBgPrice = "0";
      String cmdtyBgPriceWithoutTax = "0";
      String cmdtyProcessingexpence = "0";
      String cmdtyPurchaseprice = "0";
      sumFlg = true;
      
      // 構成グループ1の代表構成商品の金額を取得する。
      SICmdtyCompositionGroupData  groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(0);
      
      for (int i = 0; i < groupData.getCompositionGroupDetail().size(); i++){
        SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(i);
        
        if (groupDetail.getFlagShipproductFlg() == 1){
          if (SIUtil.isNull(pointRate)) pointRate = groupDetail.getAddPointRate();
          if (SIUtil.isNotNull(groupDetail.getBgPrice()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
            cmdtyBgPrice = SIUtil.multi_LL(groupDetail.getBgPrice(), groupDetail.getCompositionCount());
            cmdtyBgPriceWithoutTax = SIUtil.multi_LL(groupDetail.getBgPriceWithoutTax(), groupDetail.getCompositionCount());
          }
          
          if (SIUtil.isNotNull(groupDetail.getPurchaseprice()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
            cmdtyPurchaseprice = SIUtil.multi_LL(groupDetail.getPurchaseprice(), groupDetail.getCompositionCount());
          }
          
          if (SIUtil.isNotNull(groupDetail.getProcessingexpence()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
            cmdtyProcessingexpence = SIUtil.multi_LL(groupDetail.getProcessingexpence(), groupDetail.getCompositionCount());
          }
          break;
        }
      }
      
      // 構成グループ1の代表構成商品の金額×よりどり点数
      bgPriceSum = SIUtil.multi_LL(cmdtyBgPrice, getSectionCount());
      bgPriceSumWithoutTax = SIUtil.multi_LL(cmdtyBgPriceWithoutTax, getSectionCount());
      purchasepriceSum = SIUtil.add_LL(cmdtyPurchaseprice, getSectionCount());
      processingexpenceSum = SIUtil.add_LL(cmdtyProcessingexpence, getSectionCount());
      
    } else if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_FIXED_SET)) { // 固定セット品
      
      sumFlg = true;
      
      // 構成グループ1の構成商品のサマリ
      SICmdtyCompositionGroupData  groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(0);
      
      for (int i = 0; i < groupData.getCompositionGroupDetail().size(); i++){
        SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(i);
        
        if (SIUtil.isNull(pointRate)) pointRate = groupDetail.getAddPointRate();
        
        if (SIUtil.isNotNull(groupDetail.getBgPrice()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
          String cmdtyBgPrice = SIUtil.multi_LL(groupDetail.getBgPrice(), groupDetail.getCompositionCount());
          bgPriceSum = SIUtil.add_LL(bgPriceSum, cmdtyBgPrice);
          String cmdtyBgPriceWithoutTax = SIUtil.multi_LL(groupDetail.getBgPriceWithoutTax(), groupDetail.getCompositionCount());
          bgPriceSumWithoutTax = SIUtil.add_LL(bgPriceSumWithoutTax, cmdtyBgPriceWithoutTax);
        }
        
        if (SIUtil.isNotNull(groupDetail.getPurchaseprice()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
          String cmdtyPurchaseprice = SIUtil.multi_LL(groupDetail.getPurchaseprice(), groupDetail.getCompositionCount());
          purchasepriceSum = SIUtil.add_LL(purchasepriceSum, cmdtyPurchaseprice);
        }
        
        if (SIUtil.isNotNull(groupDetail.getProcessingexpence()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
          String cmdtyProcessingexpence = SIUtil.multi_LL(groupDetail.getProcessingexpence(), groupDetail.getCompositionCount());
          processingexpenceSum = SIUtil.add_LL(processingexpenceSum, cmdtyProcessingexpence);
        }
      }
    } else if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_SPECIFICATION)) { // 仕様指定品
      
      sumFlg = true;
      
      // 構成グループ1の代表構成商品の金額を取得する。
      SICmdtyCompositionGroupData  groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(0);
      
      for (int j = 0; j < groupData.getCompositionGroupDetail().size(); j++){
        SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(j);
        
        if (groupDetail.getFlagShipproductFlg() == 1){
          if (SIUtil.isNull(pointRate)) pointRate = groupDetail.getAddPointRate();
          
          if (SIUtil.isNotNull(groupDetail.getBgPrice()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
            String cmdtyBgPrice = SIUtil.multi_LL(groupDetail.getBgPrice(), groupDetail.getCompositionCount());
            bgPriceSum = SIUtil.add_LL(bgPriceSum, cmdtyBgPrice);
            String cmdtyBgPriceWithoutTax = SIUtil.multi_LL(groupDetail.getBgPriceWithoutTax(), groupDetail.getCompositionCount());
            bgPriceSumWithoutTax = SIUtil.add_LL(bgPriceSumWithoutTax, cmdtyBgPriceWithoutTax);
          }
          
          if (SIUtil.isNotNull(groupDetail.getPurchaseprice()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
            String cmdtyPurchaseprice = SIUtil.multi_LL(groupDetail.getPurchaseprice(), groupDetail.getCompositionCount());
            purchasepriceSum = SIUtil.add_LL(purchasepriceSum, cmdtyPurchaseprice);
          }
          
          if (SIUtil.isNotNull(groupDetail.getProcessingexpence()) && SIUtil.isNotNull(groupDetail.getCompositionCount())){
            String cmdtyProcessingexpence = SIUtil.multi_LL(groupDetail.getProcessingexpence(), groupDetail.getCompositionCount());
            processingexpenceSum = SIUtil.add_LL(processingexpenceSum, cmdtyProcessingexpence);
          }
          break;
        }
      }
    }
    
    if (sumFlg) {
      if (SIUtil.isNotNull(getSetDiscount())){
        afterBgPrice = SIUtil.sub_LL(bgPriceSum, getSetDiscount());
        setDiscountWithoutTax = SIUtil.getPriceWithoutTax(getSetDiscount(), SIDBUtil.getFirstData(lConnection,"SELECT TaxRate FROM TaxVW"));
        afterBgPriceWithoutTax = SIUtil.sub_LL(bgPriceSumWithoutTax, setDiscountWithoutTax);
      } else {
        afterBgPrice = bgPriceSum;
        afterBgPriceWithoutTax = bgPriceSumWithoutTax;
      }
      
      setBeforeBgprice(bgPriceSum);
      setBeforeBgpriceWithoutTax(bgPriceSumWithoutTax);
      setBgPrice(afterBgPrice);
      setBgPriceWithoutTax(afterBgPriceWithoutTax);
      setProcessingexpence(processingexpenceSum);
      setPurchaseprice(purchasepriceSum);
      setAddPointRate(getCompositionPointRate(lConnection, pointRate));
      setSetDiscountWithoutTax(setDiscountWithoutTax);
    } else {
      setBeforeBgprice("");
      setBeforeBgpriceWithoutTax("");
      setBgPrice("");
      setBgPriceWithoutTax("");
      setProcessingexpence("");
      setPurchaseprice("");
      setAddPointRate("");
      setSetDiscountWithoutTax("");
    }
  }
  
  private String getCompositionPointRate(Connection lConnection, String pointRate) throws SIDBAccessException{
    Statement lStatement = null;
    ResultSet lResultSet = null;
    SIPointIndividual lRule = new SIPointIndividual();
    
    StringBuffer lPointBuf = new StringBuffer();
    StringBuffer lCommonBuf = new StringBuffer();
    
    double addCmdtyPointRate = -1;
    if (SIUtil.isNotNull(pointRate)) {
      try {
        addCmdtyPointRate = Double.parseDouble(pointRate);
      } catch (Exception e) {
        e.printStackTrace();
        addCmdtyPointRate = -1;
      }
    }
    
    // 基本のSQL
    //lPointBuf.append("SELECT cm.cmdtycode,cm.individualcode,cm.cmdtyname,ct.rate1,ct.from1,ct.to1,in1.rate2,in1.from2,in1.to2,in2.pastflg,in2.futureflg,pm.rate3,in1.username,mk.makername ");
    lPointBuf.append("SELECT cm.cmdtycode,cm.individualcode,cm.cmdtyname,ct.rate1,ct.from1,ct.to1,in2.pastflg,in2.futureflg,pm.rate3,mk.makername ");
    lCommonBuf.append("FROM cmdtyunittbl cm ");
    lCommonBuf.append("LEFT OUTER JOIN (SELECT ctgrycode,bonuspointrate AS rate1,bonusfromdate AS from1,bonustodate AS to1 ");
    lCommonBuf.append("FROM bonuspointtbl WHERE bonusfromdate::date <= current_date AND bonustodate::date >= current_date) ct ");
    lCommonBuf.append("ON substring(cm.individualcode,0,3) = ct.ctgrycode ");
    lCommonBuf.append("LEFT OUTER JOIN (SELECT individualcode ");
    lCommonBuf.append(",MAX(CASE WHEN bonustodate::date < current_date THEN 1 ELSE NULL END) AS pastFlg");
    lCommonBuf.append(",MAX(CASE WHEN bonusfromdate::date > current_date THEN 1 ELSE NULL END) AS futureFlg ");
    lCommonBuf.append("FROM bonuspointindividualtbl GROUP BY individualcode) in2 ");
    lCommonBuf.append("ON cm.individualcode = in2.individualcode ");
    lCommonBuf.append(",(SELECT CASE WHEN bonusfromdate::date <= current_date AND bonustodate::date >= current_date THEN bonuspointrate ELSE pointrate END AS rate3 ");
    lCommonBuf.append("FROM pointshopmtbl WHERE mallshopcode='0') pm ,makertbl mk WHERE cm.makercode=mk.makercode ");
    if (SIUtil.isNotNull(getCmdtyCode())) {
      lCommonBuf.append(" AND cm.cmdtyCode = ").append(SIDBUtil.SQL2Str(getCmdtyCode()));
    }
    lCommonBuf.append(" AND cm.individualcode = ").append(SIDBUtil.SQL2Str(getIndividualCode()));
    lPointBuf.append(lCommonBuf);
    
    log.debug("getCollection:lSqlBuf=" + lPointBuf.toString());
    // 実行
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lPointBuf.toString());
      
      lRule = new SIPointIndividual();
      
      if (addCmdtyPointRate < 0) {
        lRule.setIndividualBonusPointRate("");
      } else {
        lRule.setIndividualBonusPointRate(String.valueOf(addCmdtyPointRate));
      }
      
      // ポイントレコードのセットの作成
      if (lResultSet.next()) {
        lRule.setEncode(SIConfig.SIENCODE_NONE);
        lRule.setCmdtyName(lResultSet.getString("cmdtyName"));
        lRule.setCmdtyCode(lResultSet.getString("cmdtyCode"));
        lRule.setIndividualCode(lResultSet.getString("individualCode"));
        lRule.setCtgryBonusPointRate(lResultSet.getString("rate1"));
        lRule.setCtgryBonusFromDate(lResultSet.getString("from1"));
        lRule.setCtgryBonusToDate(lResultSet.getString("to1"));
        lRule.setPastFlg(lResultSet.getString("pastflg"));
        lRule.setFutureFlg(lResultSet.getString("futureflg"));
        lRule.setBasicPointRate(lResultSet.getString("rate3"));
        lRule.setMakerName(lResultSet.getString("makerName"));
      }
    } catch (Exception ex) {
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lRule.getPointRate();
  }
  
  /**
   * 金額計算に必要なMapを返却します。（Preview用）
   * @return
   */
  public Collection getCompositionUnitPrice(){
    
    Collection rec = new ArrayList();
    
    if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_VARIATION_SET)) {  // 変動(構成代表商品サマリ）
      if (getCompositionGroupList() != null){
        for (int i = 0; i < getCompositionGroupList().size(); i++){
          SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
          if (groupData != null) {
            SICmdtyCompositionGroupDetail groupDetail = getShipproductData(groupData.getGroupCode());
            Map resMap = new HashMap();
            // 構成グループ毎の代表構成品情報取得
            // 構成グループコード
            resMap.put("groupCode", groupData.getGroupCode());
            // 代表構成品単価
            resMap.put("unitPrice", groupDetail.getBgPrice());
            // 代表構成品単価税抜
            resMap.put("unitPriceWithoutTax", groupDetail.getBgPriceWithoutTax());
            // 代表構成品構成数
            resMap.put("compositioncount", groupDetail.getCompositionCount());
            // よりどり点数
            resMap.put("sectioncount", getSectionCount());
            // 構成グループ代表構成品情報設定
            rec.add(resMap);
          }
        }
      }
    } else if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_SELECTION_SET)) { // よりどり（構成グループ1の構成代表商品）
      if (getCompositionGroupList() != null){
        for (int i = 0; i < getCompositionGroupList().size(); i++){
          SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
          if (groupData != null) {
            SICmdtyCompositionGroupDetail groupDetail = getShipproductData(groupData.getGroupCode());
            Map resMap = new HashMap();
            // 構成グループコード
            resMap.put("groupCode", groupData.getGroupCode());
            // 代表構成品単価
            resMap.put("unitPrice", groupDetail.getBgPrice());
            // 代表構成品単価税抜
            resMap.put("unitPriceWithoutTax", groupDetail.getBgPriceWithoutTax());
            // 代表構成品構成数
            resMap.put("compositioncount", groupDetail.getCompositionCount());
            // よりどり点数
            resMap.put("sectioncount", getSectionCount());
            // 構成グループ代表構成品情報設定
            rec.add(resMap);
            break;
          }
        }
      }
    } else if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_FIXED_SET)) { // 固定（構成グループ1の構成商品サマリ）
      if (getCompositionGroupList() != null){
        for (int i = 0; i < getCompositionGroupList().size(); i++){
          SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
          if (groupData != null && groupData.getCompositionGroupDetail() != null){
            for (int j = 0; j < groupData.getCompositionGroupDetail().size(); j++){
              SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(j);
              if (groupDetail != null){
                Map resMap = new HashMap();
                // 構成グループコード
                resMap.put("groupCode", groupData.getGroupCode());
                // 代表構成品単価
                resMap.put("unitPrice", groupDetail.getBgPrice());
                // 代表構成品単価税抜
                resMap.put("unitPriceWithoutTax", groupDetail.getBgPriceWithoutTax());
                // 代表構成品構成数
                resMap.put("compositioncount", groupDetail.getCompositionCount());
                // よりどり点数
                resMap.put("sectioncount", getSectionCount());
                // 構成グループ代表構成品情報設定
                rec.add(resMap);
              }
            }
            break;
          }
        }
      // EDBTG001-02 [不具合管理票-No51] 2013/05/02 nagayoshi add start
      }
      // EDBTG001-02 [不具合管理票-No51] 2013/05/02 nagayoshi add end
      } else if (getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_SPECIFICATION)) { // 仕様指定品（構成グループ1の構成代表商品）
        if (getCompositionGroupList() != null){
          for (int i = 0; i < getCompositionGroupList().size(); i++){
            SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
            if (groupData != null) {
              SICmdtyCompositionGroupDetail groupDetail = getShipproductData(groupData.getGroupCode());
              Map resMap = new HashMap();
              // 構成グループコード
              resMap.put("groupCode", groupData.getGroupCode());
              // 代表構成品単価
              resMap.put("unitPrice", groupDetail.getBgPrice());
              // 代表構成品単価税抜
              resMap.put("unitPriceWithoutTax", groupDetail.getBgPriceWithoutTax());
              // 代表構成品構成数
              resMap.put("compositioncount", groupDetail.getCompositionCount());
              // よりどり点数
              resMap.put("sectioncount", getSectionCount());
              // 構成グループ代表構成品情報設定
              rec.add(resMap);
              break;
            }
          }
        }
      }
    /* EDBTG001-02 [不具合管理票-No51] 2013/05/02 nagayoshi del start
    }
        EDBTG001-02 [不具合管理票-No51] 2013/05/02 nagayoshi del end */
    return rec;
  }
  
  /**
   * compositionInfo 商品構成フラグを取得します
   * @return 構成が存在する場合TRUE
   */
  public void compositionInfo(){
    
    setCmdtyCompositionFlg("-1"); // エラーを設定
    
    if (SIUtil.isNotNull(getCmdtySetFlg()) && getCmdtySetFlg().equals("0")) {
      if (SIUtil.isNotNull(getSectionCount()) && !getSectionCount().equals("0")){
        if (getCompositionGroupList().size() > 0){
          setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_SELECTION_SET);
        }
      } else if (getCompositionGroupList().size() >= 2){
        setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_VARIATION_SET);
      } else if (getCompositionGroupList().size() == 1){
        setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_FIXED_SET);
      }
    } else if (SIUtil.isNotNull(getCmdtySetFlg()) && getCmdtySetFlg().equals("1")) {
      if (getCompositionGroupList().size() == 1){
        setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_SPECIFICATION);
      }
    }
  }
  
  /**
   * 登録前のデータをリフレッシュします。
   *
   * @param lConnection
   * @throws SIDBAccessException
   */
  public void compositionReflesh(Connection lConnection) throws SIDBAccessException {
    
    // 商品構成グループ
    groupDatailDataRefresh(lConnection);
    
    // 添付商品
    appendedDataRefresh(lConnection);
    
    // オプション
    optionDataRefresh(lConnection);
  }
  
  /**
   * 添付商品のリストを最新データに設定します。
   *
   * @param lConnection
   * @throws SIDBAccessException
   */
  public void appendedDataRefresh(Connection lConnection) throws SIDBAccessException{
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    // いらない行を削除する
    List appendDataTmp = new ArrayList();
    
    if (getAppendedCmdtyFlg().equals("1")){
      for (int i = 0; i < getCompositionAppendedList().size(); i++){
        SICmdtyCompositionAppended cmdtyAppended = (SICmdtyCompositionAppended) getCompositionAppendedList().get(i);
        
        if (cmdtyAppended != null){
          // 入力がある場合は削除しない
          if (SIUtil.isNotNull(cmdtyAppended.getDetailIndividualCode())
              || SIUtil.isNotNull(cmdtyAppended.getAppendedCount())
              || SIUtil.isNotNull(cmdtyAppended.getSetCount())
              || SIUtil.isNotNull(cmdtyAppended.getDispOrder())
          ){
            if (SIUtil.isNotNull(cmdtyAppended.getDetailIndividualCode())){
              try {
                //最新の情報取得
                sqlStatement = new StringBuffer();
                sqlStatement.append("SELECT aa.*, bb.purchaseprice, bb.processingexpence ");
                sqlStatement.append("FROM cmdtyunittbl aa, individualtbl bb ");
                sqlStatement.append("WHERE aa.shopcode = '0' ");
                sqlStatement.append(" AND aa.shopcode = bb.shopcode ");
                sqlStatement.append(" AND aa.individualcode = bb.individualcode ");
                sqlStatement.append(" AND aa.individualcode = ").append(SIDBUtil.SQL2Str(cmdtyAppended.getDetailIndividualCode()));
                
                statement = lConnection.createStatement();
                log.debug("SQL=" + sqlStatement.toString());
                resultSet = statement.executeQuery(sqlStatement.toString());
                
                if (resultSet.next()) {
                  cmdtyAppended.setDetailCmdtyCode(resultSet.getString("cmdtycode"));
                  cmdtyAppended.setCmdtyName(resultSet.getString("cmdtyname"));
                  cmdtyAppended.setPurchaseprice(resultSet.getString("purchaseprice"));
                  cmdtyAppended.setProcessingexpence(resultSet.getString("processingexpence"));
                  cmdtyAppended.setAmountFlg(resultSet.getString("amountflg"));
                }
              } catch (Exception ex) {
                log.debug("exception sql = " + sqlStatement.toString());
                throw new SIDBAccessException(ex);
              } finally {
                SIDBUtil.close(resultSet, statement);
              }
            }
            appendDataTmp.add(cmdtyAppended);
          }
        }
      }
      
      if (appendDataTmp.size() > 0) {
        setAppendedCmdtyFlg("1");
      } else {
        setAppendedCmdtyFlg("0");
      }
    }
    
    setCompositionAppendedList(appendDataTmp);
  }
  
  /**
   * オプションのリストを最新データに設定します。
   *
   * @param lConnection
   * @throws SIDBAccessException
   */
  public void optionDataRefresh(Connection lConnection) throws SIDBAccessException{
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    // いらない行を削除する
    List optionDataTmp = new ArrayList();
    
    UIRegPointIndividual regPointIndividual = new UIRegPointIndividual();
    
    for (int i = 0; i < getCompositionOptionList().size(); i++){
      SICmdtyCompositionOption cmdtyOption = (SICmdtyCompositionOption) getCompositionOptionList().get(i);
      
      if (cmdtyOption != null){
        // 入力がある場合は削除しない
        if (SIUtil.isNotNull(cmdtyOption.getDetailIndividualCode())
            || SIUtil.isNotNull(cmdtyOption.getCompositionCount())
            || SIUtil.isNotNull(cmdtyOption.getDispOrder())
            || SIUtil.isNotNull(cmdtyOption.getNotices())
        ){
          if (SIUtil.isNotNull(cmdtyOption.getDetailIndividualCode())){
            try {
              //最新の情報取得
              sqlStatement = new StringBuffer();
              sqlStatement.append("SELECT aa.*, bb.purchaseprice, bb.processingexpence ");
              sqlStatement.append("FROM cmdtyunittbl aa, individualtbl bb ");
              sqlStatement.append("WHERE aa.shopcode = '0' ");
              sqlStatement.append(" AND aa.shopcode = bb.shopcode ");
              sqlStatement.append(" AND aa.individualcode = bb.individualcode ");
              sqlStatement.append(" AND aa.individualcode = ").append(SIDBUtil.SQL2Str(cmdtyOption.getDetailIndividualCode()));
              
              statement = lConnection.createStatement();
              log.debug("SQL=" + sqlStatement.toString());
              resultSet = statement.executeQuery(sqlStatement.toString());
              
              if (resultSet.next()) {
                cmdtyOption.setDetailCmdtyCode(resultSet.getString("cmdtycode"));
                cmdtyOption.setCmdtyName(resultSet.getString("cmdtyname"));
                cmdtyOption.setBgPrice(resultSet.getString("unitprice"));
                cmdtyOption.setPurchaseprice(resultSet.getString("purchaseprice"));
                cmdtyOption.setProcessingexpence(resultSet.getString("processingexpence"));
                cmdtyOption.setAddPointRate(regPointIndividual.getCmdtyPointRate(lConnection, cmdtyOption.getDetailCmdtyCode(), cmdtyOption.getDetailIndividualCode()));
                cmdtyOption.setAmountFlg(resultSet.getString("amountflg"));
              }
            } catch (Exception ex) {
              log.debug("exception sql = " + sqlStatement.toString());
              throw new SIDBAccessException(ex);
            } finally {
              SIDBUtil.close(resultSet, statement);
            }
          }
          optionDataTmp.add(cmdtyOption);
        }
      }
    }
    
    setCompositionOptionList(optionDataTmp);
  }
  
  /**
   * 商品構成グループデータを最新の情報に再設定します。
   *
   * @param lConnection
   * @throws SIDBAccessException
   */
  public void groupDatailDataRefresh(Connection lConnection) throws SIDBAccessException{
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    // いらない行を削除する
    List groupDataTmp = new ArrayList();
    Collection colorColl=SIColor.getNameCollection(lConnection);
    //UIRegPointIndividual regPointIndividual = new UIRegPointIndividual();
    
    for (int i = 0; i < getCompositionGroupList().size(); i++){
      SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
      List groupDetailTmp = new ArrayList();
      
      if (groupData != null) {
        if (groupData.getCompositionGroupDetail() != null){
          for (int j = 0; j < groupData.getCompositionGroupDetail().size(); j++){
            SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(j);
            
            // 各入力欄のうち、いづれか1つでも入力されている場合は残す
            if (SIUtil.isNotNull(groupDetail.getDetailIndividualCode())
               || SIUtil.isNotNull(groupDetail.getDetailIndividualName())
               || SIUtil.isNotNull(groupDetail.getCompositionCount())
               || SIUtil.isNotNull(groupDetail.getDispOrder()))
            {
              
              //最新の情報取得
              if (SIUtil.isNotNull(groupDetail.getDetailIndividualCode())){
                try {
                  sqlStatement = new StringBuffer();
                  sqlStatement.append("SELECT aa.*, bb.purchaseprice, bb.processingexpence, aa.amount-aa.bgpamount AS ecamount ");
                  sqlStatement.append("FROM cmdtyunittbl aa, individualtbl bb ");
                  sqlStatement.append("WHERE aa.shopcode = '0' ");
                  sqlStatement.append(" AND aa.shopcode = bb.shopcode ");
                  sqlStatement.append(" AND aa.individualcode = bb.individualcode ");
                  sqlStatement.append(" AND aa.individualcode = ").append(SIDBUtil.SQL2Str(groupDetail.getDetailIndividualCode()));
                  
                  statement = lConnection.createStatement();
                  log.debug("SQL=" + sqlStatement.toString());
                  resultSet = statement.executeQuery(sqlStatement.toString());
                  
                  while (resultSet.next()) {
                    groupDetail.setCmdtyName(resultSet.getString("cmdtyname"));
                    groupDetail.setBgPrice(resultSet.getString("unitprice"));
                    groupDetail.setBgPriceWithoutTax(resultSet.getString("unitpricewithouttax"));
                    groupDetail.setDetailCmdtyCode(resultSet.getString("cmdtycode"));
                    groupDetail.setPurchaseprice(resultSet.getString("purchaseprice"));
                    groupDetail.setProcessingexpence(resultSet.getString("processingexpence"));
                    //groupDetail.setAddPointRate(regPointIndividual.getCmdtyPointRate(lConnection, groupDetail.getDetailCmdtyCode(), groupDetail.getDetailIndividualCode()));
                    groupDetail.setAmountFlg(resultSet.getString("amountflg"));
                    groupDetail.setAmount(resultSet.getString("ecamount"));
                    groupDetail.setRsrvEnableFlg(resultSet.getString("rsrvenableflg"));
                    groupDetail.setRsrvAmount(resultSet.getString("rsrvamount"));
                    
                    if (groupData.getColorFlg().equals("1")){
                      groupDetail.setDetailIndividualName(SIUtil.getNameFromColl(colorColl,resultSet.getString("colorcode")));
                    }
                  }
                } catch (Exception ex) {
                  log.debug("exception sql = " + sqlStatement.toString());
                  throw new SIDBAccessException(ex);
                } finally {
                  SIDBUtil.close(resultSet, statement);
                }
              }
              groupDetailTmp.add(groupDetail);
            }
          }
        }
        
        // 対象明細がある場合
        if (groupDetailTmp.size() > 0){
          groupData.setCompositionGroupDetail(groupDetailRefreshShipproductFlg(groupDetailTmp)); // フラグを最新にする
          groupDataTmp.add(groupData);
        } else {
          // 構成グループに入力がある場合はそのまま残す。
          if (SIUtil.isNotNull(groupData.getSpecificationName())){
            groupData.setCompositionGroupDetail(new ArrayList());
            //groupData.getCompositionGroupDetail().add(new SICmdtyCompositionGroupDetail());
            groupDataTmp.add(groupData);
          }
        }
      }
    }
    
    setCompositionGroupList(groupDataTmp);
    
    cmdtyGroupCountRefresh();
  }
  
  /**
   * 構成する商品を全て取得します
   * @return
   */
  public List getCompositionCmdtyInsertList() {
    List compositionCmdtyList = new ArrayList();
    Map compositionCmdtyMap = new HashMap();
    
    // 商品構成グループ
    for (int i = 0; i < getCompositionGroupList().size(); i++){
      SICmdtyCompositionGroupData groupDeta =  (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
      for (int j = 0; j < groupDeta.getCompositionGroupDetail().size(); j++){
        SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupDeta.getCompositionGroupDetail().get(j);
        
        if (!compositionCmdtyMap.containsKey(groupDetail.getDetailIndividualCode())){
          SICmdty cmdty = new SICmdty();
          cmdty.setShopCode(getShopCode());
          cmdty.setCmdtyCode(groupDetail.getDetailCmdtyCode());
          cmdty.setIndividualCode(groupDetail.getDetailIndividualCode());
          compositionCmdtyMap.put(cmdty.getIndividualCode(), "");
          compositionCmdtyList.add(cmdty);
        }
      }
    }
    
    return compositionCmdtyList;
  }
  
  /**
   * 構成する商品を全て取得します
   * @return
   * @throws SIDBAccessException
   */
  public List getCompositionCmdtyNowList(Connection lConnection) throws SIDBAccessException {
    List compositionCmdtyList = new ArrayList();
    Map compositionCmdtyMap = new HashMap();
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    // 商品構成マスタ
    sqlStatement.append("SELECT aa.shopcode, aa.detailcmdtycode, aa.detailindividualcode ");
    sqlStatement.append("FROM compositiongroupdetailtbl aa, cmdtyunittbl bb ");
    sqlStatement.append("WHERE aa.shopcode = '0' ");
    sqlStatement.append(" AND aa.shopcode = bb.shopcode ");
    sqlStatement.append(" AND aa.detailcmdtycode = bb.cmdtycode ");
    sqlStatement.append(" AND aa.detailindividualcode = bb.individualcode ");
    sqlStatement.append(" AND aa.cmdtyCode = ").append(SIDBUtil.SQL2Str(getCmdtyCode()));
    sqlStatement.append(" AND aa.individualcode = ").append(SIDBUtil.SQL2Str(getIndividualCode()));
    
    try {
      statement = lConnection.createStatement();
      log.debug("SQL=" + sqlStatement.toString());
      resultSet = statement.executeQuery(sqlStatement.toString());
      
      // 商品構成レコードのセットの作成
      while (resultSet.next()) {
        SICmdty cmdty = new SICmdty();
        cmdty.setShopCode(resultSet.getString("shopcode"));
        cmdty.setCmdtyCode(resultSet.getString("detailcmdtycode"));
        cmdty.setIndividualCode(resultSet.getString("detailindividualcode"));
        
        if (!compositionCmdtyMap.containsKey(cmdty.getIndividualCode())){
          compositionCmdtyMap.put(cmdty.getIndividualCode(), "");
          compositionCmdtyList.add(cmdty);
        }
      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(resultSet, statement);
    }
    
    return compositionCmdtyList;
  }
  
  /**
   * 構成グループ情報を取得します。
   * @param lConnection
   * @throws SIDBAccessException
   */
  public void getCmdtyCompositionGroup(Connection lConnection) throws SIDBAccessException {
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    sqlStatement.append("SELECT ");
    sqlStatement.append(" aa.*, ");
    sqlStatement.append(" bb.detailcmdtycode, bb.detailindividualcode, bb.detailindividualname, ");
    sqlStatement.append(" bb.compositioncount, bb.disporder, bb.flagshipproductflg, ");
    sqlStatement.append(" cc.unitprice, cc.unitpricewithouttax, cc.cmdtyname ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" , cc.usednewflg, cc.taxflg, cc.amountflg, dd.purchaseprice ");
    // EDBTG003-00 mng-paku add end
    sqlStatement.append("FROM ");
    sqlStatement.append(" compositiongroupmtbl aa, compositiongroupdetailtbl bb,  ");
    sqlStatement.append(" cmdtyunittbl cc  ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" , individualtbl dd ");
    // EDBTG003-00 mng-paku add end
    sqlStatement.append("WHERE aa.shopcode = '0' ");
    sqlStatement.append(" AND aa.cmdtyCode = ").append(SIDBUtil.SQL2Str(getCmdtyCode()));
    sqlStatement.append(" AND aa.individualcode = ").append(SIDBUtil.SQL2Str(getIndividualCode()));
    sqlStatement.append(" AND aa.shopcode = bb.shopcode ");
    sqlStatement.append(" AND aa.cmdtycode = bb.cmdtycode ");
    sqlStatement.append(" AND aa.individualcode = bb.individualcode ");
    sqlStatement.append(" AND aa.groupcode = bb.groupcode ");
    sqlStatement.append(" AND bb.shopcode = cc.shopcode ");
    sqlStatement.append(" AND bb.detailcmdtycode = cc.cmdtycode ");
    sqlStatement.append(" AND bb.detailindividualcode = cc.individualcode ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" AND bb.individualcode = dd.individualcode ");
    // EDBTG003-00 mng-paku add end
    sqlStatement.append(" ORDER BY aa.groupcode, bb.disporder ");
    
    try {
      statement = lConnection.createStatement();
      log.debug("SQL=" + sqlStatement.toString());
      resultSet = statement.executeQuery(sqlStatement.toString());
      setCompositionGroupList(new ArrayList());
      UIRegPointIndividual regPointIndividual = new UIRegPointIndividual();
      
      SICmdtyCompositionGroupData groupData = null;
      
      List groupDetailList = new ArrayList();
      
      // 商品構成レコードのセットの作成
      while (resultSet.next()) {
        String groupCode = resultSet.getString("groupcode");
        
        // グループが変わったら
        if (groupData == null || !groupData.getGroupCode().equals(groupCode)){
          if (groupData != null) {
            groupData.setCompositionGroupDetail(groupDetailList);
            this.getCompositionGroupList().add(groupData);
          }
          
          groupData = new SICmdtyCompositionGroupData();
          groupDetailList = new ArrayList();
          
          groupData.setShopCode(resultSet.getString("shopcode"));
          groupData.setCmdtyCode(resultSet.getString("cmdtycode"));
          groupData.setIndividualCode(resultSet.getString("individualcode"));
          groupData.setGroupCode(groupCode);
          groupData.setSpecificationName(resultSet.getString("specificationname"));
          groupData.setColorFlg(resultSet.getString("colorflg"));
        }
        
        SICmdtyCompositionGroupDetail groupDetail = new SICmdtyCompositionGroupDetail();
        groupDetail.setShopCode(resultSet.getString("shopcode"));
        groupDetail.setCmdtyCode(resultSet.getString("cmdtycode"));
        groupDetail.setIndividualCode(resultSet.getString("individualcode"));
        groupDetail.setGroupCode(groupCode);
        groupDetail.setDetailCmdtyCode(resultSet.getString("detailCmdtyCode"));
        groupDetail.setDetailIndividualCode(resultSet.getString("detailIndividualCode"));
        groupDetail.setDetailIndividualName(resultSet.getString("detailIndividualName"));
        groupDetail.setCompositionCount(resultSet.getString("compositionCount"));
        groupDetail.setDispOrder(resultSet.getString("dispOrder"));
        groupDetail.setFlagShipproductFlg(resultSet.getInt("flagShipproductFlg"));
        groupDetail.setBgPrice(resultSet.getString("unitprice"));
        groupDetail.setBgPriceWithoutTax(resultSet.getString("unitpricewithouttax"));
        groupDetail.setCmdtyName(resultSet.getString("cmdtyname"));
        groupDetail.setAddPointRate(regPointIndividual.getCmdtyPointRate(lConnection, groupDetail.getDetailCmdtyCode(), groupDetail.getDetailIndividualCode()));
        // EDBTG003-00 mng-paku add start
        groupDetail.setUnitPrice(resultSet.getString("unitprice"));
        groupDetail.setUsedNewFlg(resultSet.getString("usednewflg"));
        groupDetail.setTaxFlg(resultSet.getString("taxflg"));
        groupDetail.setAmountFlg(resultSet.getString("amountflg"));
        groupDetail.setCost(resultSet.getString("purchaseprice"));
        // EDBTG003-00 mng-paku add end
        
        groupDetailList.add(groupDetail);
      }
      
      if (groupData != null) {
        groupData.setCompositionGroupDetail(groupDetailList);
        this.getCompositionGroupList().add(groupData);
      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(resultSet, statement);
    }
    
    cmdtyGroupCountRefresh();
  }
  
  /**
   * 添付商品情報を取得します。
   * @param lConnection
   * @throws SIDBAccessException
   */
  public void getcompositionAppended(Connection lConnection) throws SIDBAccessException {
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    // 出力項目
    sqlStatement.append("SELECT ");
    sqlStatement.append(" aa.*, ");
    sqlStatement.append(" bb.cmdtyname ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" , bb.usednewflg, bb.amountflg ");
    // EDBTG003-00 mng-paku add end
    sqlStatement.append("FROM appendedcmdtytbl aa, ");
    sqlStatement.append(" cmdtyunittbl bb ");
    sqlStatement.append("WHERE ");
    sqlStatement.append(" aa.shopcode = '0' ");
    sqlStatement.append(" AND aa.cmdtyCode = ").append(SIDBUtil.SQL2Str(getCmdtyCode()));
    sqlStatement.append(" AND aa.individualcode = ").append(SIDBUtil.SQL2Str(getIndividualCode()));
    sqlStatement.append(" AND aa.shopcode = bb.shopcode ");
    sqlStatement.append(" AND aa.detailindividualcode = bb.individualcode ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" ORDER BY aa.disporder ");
    // EDBTG003-00 mng-paku add end
    
    try {
      statement = lConnection.createStatement();
      log.debug("SQL=" + sqlStatement.toString());
      resultSet = statement.executeQuery(sqlStatement.toString());
      setCompositionAppendedList(new ArrayList());
      
      // 商品構成レコードのセットの作成
      while (resultSet.next()) {
        SICmdtyCompositionAppended appended = new SICmdtyCompositionAppended();
        appended.setShopCode(resultSet.getString("shopcode"));
        appended.setCmdtyCode(resultSet.getString("cmdtycode"));
        appended.setIndividualCode(resultSet.getString("individualCode"));
        appended.setDetailCmdtyCode(resultSet.getString("detailCmdtyCode"));
        appended.setDetailIndividualCode(resultSet.getString("detailIndividualCode"));
        appended.setSetCount(resultSet.getString("setCount"));
        appended.setAppendedCount(resultSet.getString("appendedCount"));
        appended.setDispOrder(resultSet.getString("dispOrder"));
        appended.setCmdtyName(resultSet.getString("cmdtyName"));
        // EDBTG003-00 mng-paku add start
        appended.setUsedNewFlg(resultSet.getString("usednewflg"));
        appended.setAmountFlg(resultSet.getString("amountflg"));
        // EDBTG003-00 mng-paku add end
        
        getCompositionAppendedList().add(appended);
      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(resultSet, statement);
    }
  }
  
  /**
   * オプション情報を取得します
   * @param lConnection
   * @throws SIDBAccessException
   */
  public void getCompositionOption(Connection lConnection) throws SIDBAccessException {
    Statement statement = null;
    ResultSet resultSet = null;
    StringBuffer sqlStatement = new StringBuffer();
    
    // 出力項目
    sqlStatement.append("SELECT ");
    sqlStatement.append(" aa.*, ");
    sqlStatement.append(" bb.cmdtyname, bb.unitprice ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" , bb.usednewflg, bb.amountflg, bb.taxflg, cc.purchaseprice ");
    // EDBTG003-00 mng-paku add end
    sqlStatement.append("FROM compositionoptiontbl aa, ");
    sqlStatement.append(" cmdtyunittbl bb ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" , individualtbl cc ");
    // EDBTG003-00 mng-paku add end
    sqlStatement.append("WHERE ");
    sqlStatement.append(" aa.shopcode = '0' ");
    sqlStatement.append(" AND aa.cmdtyCode = ").append(SIDBUtil.SQL2Str(getCmdtyCode()));
    sqlStatement.append(" AND aa.individualcode = ").append(SIDBUtil.SQL2Str(getIndividualCode()));
    sqlStatement.append(" AND aa.shopcode = bb.shopcode ");
    sqlStatement.append(" AND aa.detailindividualcode = bb.individualcode ");
    // EDBTG003-00 mng-paku add start
    sqlStatement.append(" AND aa.individualcode = cc.individualcode ");
    sqlStatement.append(" ORDER BY aa.disporder ");
    // EDBTG003-00 mng-paku add end
    
    try {
      statement = lConnection.createStatement();
      log.debug("SQL=" + sqlStatement.toString());
      resultSet = statement.executeQuery(sqlStatement.toString());
      setCompositionOptionList(new ArrayList());
      UIRegPointIndividual regPointIndividual = new UIRegPointIndividual();
      
      // 商品構成レコードのセットの作成
      while (resultSet.next()) {
        SICmdtyCompositionOption option = new SICmdtyCompositionOption();
        
        option.setShopCode(resultSet.getString("shopcode"));
        option.setCmdtyCode(resultSet.getString("cmdtycode"));
        option.setIndividualCode(resultSet.getString("individualCode"));
        option.setDetailCmdtyCode(resultSet.getString("detailCmdtyCode"));
        option.setDetailIndividualCode(resultSet.getString("detailIndividualCode"));
        option.setCompositionCount(resultSet.getString("compositioncount"));
        option.setDispOrder(resultSet.getString("dispOrder"));
        option.setNotices(resultSet.getString("notices"));
        option.setCmdtyName(resultSet.getString("cmdtyName"));
        option.setBgPrice(resultSet.getString("unitprice"));
        option.setAddPointRate(regPointIndividual.getCmdtyPointRate(lConnection, option.getDetailCmdtyCode(), option.getDetailIndividualCode()));
        // EDBTG003-00 mng-paku add start
        option.setAmountFlg(resultSet.getString("amountflg"));
        option.setTaxFlg(resultSet.getString("taxflg"));
        option.setUsedNewFlg(resultSet.getString("usednewflg"));
        option.setUnitPrice(resultSet.getString("unitprice"));
        option.setCost(resultSet.getString("purchaseprice"));
        // EDBTG003-00 mng-paku add end
        
        getCompositionOptionList().add(option);
      }
    } catch (Exception ex) {
      log.debug("exception sql = " + sqlStatement.toString());
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(resultSet, statement);
    }
  }
  
  /**
   * 商品構成情報に関係する入力チェックを行います
   * ※商品構成確定ボタン押下時の処理
   *
   * @param lRequest
   * @param lConnection
   * @return
   */
  public boolean cmdtyCompositionValidate(HttpServletRequest lRequest, Connection lConnection) {
    return cmdtyCompositionValidate(lRequest, lConnection, false);
  }
  
  /**
   * 商品構成情報に関係する入力チェックを行います
   * ※商品構成確定ボタン押下時の処理
   * @param lRequest
   * @param lConnection
   * @param lCsvCheck
   * @return
   */
  public boolean cmdtyCompositionValidate(HttpServletRequest lRequest, Connection lConnection, boolean lCsvCheck) {
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    boolean valiablePriceItemFlg = false;
    
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lSqlBuf = new StringBuffer("");
    
    SICheckValid.checkValid(errors, "商品種別", this.getCmdtySetFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "商品種別", this.getCmdtySetFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_CMDTY_SET_FLG_INX);
    
    SICheckValid.checkValid(errors, "中古・新品", this.getUsedNewFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    SICheckValid.checkValid(errors, "セットコード", this.getIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "セットコード", this.getIndividualCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
    
    if (SIUtil.isNotNull(this.getIndividual2())) SICheckValid.checkValid(errors, "セットコード1", this.getIndividual1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "セットコード1", this.getIndividual1(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "セットコード1", this.getIndividual1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    if (SIUtil.isNotNull(this.getIndividual1())) SICheckValid.checkValid(errors, "セットコード2", this.getIndividual2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "セットコード2", this.getIndividual2(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "セットコード2", this.getIndividual2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE, 4, 4);
    
    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.getTenureofuse(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "使用年数", this.getTenureofuse(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "使用年数", this.getTenureofuse(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    
    SICheckValid.checkValid(errors, "保証期間", this.getGuaranteedTerm(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "保証期間", this.getGuaranteedTerm(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    
    SICheckValid.checkValid(errors, "数量単位", this.getUnitQuantity(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "数量単位", this.getUnitQuantity(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 20);
    
    SICheckValid.checkValid(errors, "よりどり点数", this.getSectionCount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "よりどり点数", this.getSectionCount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
    
    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.getInitDatetime(), SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    
    // 構成商品設定がおかしい
    compositionInfo();
    if (SIUtil.isNotNull(getCmdtySetFlg()) && getCmdtySetFlg().equals("1")) { // 仕様指定品の場合
      if (getCompositionGroupList() == null || getCompositionGroupList().size() != 1) {
        errors.addError(new SICustomError("manager.message.freeword","仕様指定品の場合、構成グループは1つのみ設定できます。"));
      }
    } else if (getCmdtyCompositionFlg().equals("-1")){
      errors.addError(new SICustomError("database.query.notexist","構成パターン"));
    }
    
    // 構成グループのチェック
    boolean chkGroupFlg = false;
    String addpointTmp = "";
    boolean addPointErr=false;
    boolean firstPointFlg = false;
    boolean chkIndividualCodeFlg = false;
    List individualList = new ArrayList();
    if (getCompositionGroupList() == null) setCompositionGroupList(new ArrayList());
    
    for (int i = 0; i < getCompositionGroupList().size(); i++){
      SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
      
      if (groupData != null) {
        
        chkGroupFlg = true;
        String groupName = "構成グループ" + String.valueOf(i+1);
        
        SICheckValid.checkValid(errors, groupName + "のグループ項番", groupData.getGroupCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        SICheckValid.checkValid(errors, groupName + "のグループ項番", groupData.getGroupCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, groupName + "のグループ項番", groupData.getGroupCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
        
        if (SIUtil.isNotNull(getCmdtyCode())) {
          SICheckValid.checkValid(errors, groupName + "の親コード", groupData.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
          SICheckValid.checkValid(errors, groupName + "の親コード", groupData.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
          SICheckValid.checkValid(errors, groupName + "の親コード", groupData.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 13);
        }
        
        if (SIUtil.isNotNull(getShopCode())) {
          if (lLogin.isMall() || lCsvCheck) {
            SICheckValid.checkValid(errors, groupName + "のショップコード", groupData.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
          } else if (lLogin.isMall()) {
            SICheckValid.checkValid(errors, groupName + "のショップ名", groupData.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
          }
        }
        
        if (SIUtil.isNotNull(getIndividualCode())) {
          SICheckValid.checkValid(errors, groupName + "のセットコード", groupData.getIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
          SICheckValid.checkValid(errors, groupName + "のセットコード", groupData.getIndividualCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
        }
        
        SICheckValid.checkValid(errors, groupName + "の仕様名称", groupData.getSpecificationName(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
        SICheckValid.checkValid(errors, groupName + "の仕様名称", groupData.getSpecificationName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
        
        if (SIUtil.isNotNull(groupData.getColorFlg())) {
          SICheckValid.checkValid(errors, groupName + "のカラー選択", groupData.getColorFlg(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        }
        SICheckValid.checkValid(errors, groupName + "のカラー選択", groupData.getColorFlg(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 1);
        
        List dispOrder = new ArrayList();
        boolean dispOrderUniqueFlg = false;
        boolean chkGroupDetailFlg = false;
        
        if (groupData.getCompositionGroupDetail() == null) groupData.setCompositionGroupDetail(new ArrayList());
        
        for (int j = 0; j < groupData.getCompositionGroupDetail().size(); j++){
          SICmdtyCompositionGroupDetail groupDetail = (SICmdtyCompositionGroupDetail) groupData.getCompositionGroupDetail().get(j);
          
          if (groupDetail != null) {
            
            // ポイントエラーチェック用
            if (!firstPointFlg) {
              addpointTmp = groupDetail.getAddPointRate();
              firstPointFlg = true;
            } else {
              if (!addpointTmp.equals(groupDetail.getAddPointRate())){
                addPointErr = true;
              }
            }
            
            chkGroupDetailFlg = true;
            String groupDetailName = groupName + "の明細" + String.valueOf(j+1) + "行目";
            
            SICheckValid.checkValid(errors, groupDetailName + "のグループ項番", groupDetail.getGroupCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
            SICheckValid.checkValid(errors, groupDetailName + "のグループ項番", groupDetail.getGroupCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
            SICheckValid.checkValid(errors, groupDetailName + "のグループ項番", groupDetail.getGroupCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
            
            if (SIUtil.isNotNull(getCmdtyCode()) && SIUtil.isNotNull(groupDetail.getDetailIndividualCode())) {
              SICheckValid.checkValid(errors, groupDetailName + "の親コード", groupDetail.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
              SICheckValid.checkValid(errors, groupDetailName + "の親コード", groupDetail.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
              SICheckValid.checkValid(errors, groupDetailName + "の親コード", groupDetail.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 13);
            }
            
            if (SIUtil.isNotNull(getShopCode())) {
              if (lLogin.isMall() || lCsvCheck) {
                SICheckValid.checkValid(errors, groupDetailName + "のショップコード", groupDetail.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
              } else if (lLogin.isMall()) {
                SICheckValid.checkValid(errors, groupDetailName + "のショップ名", groupDetail.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
              }
            }
            
            if (SIUtil.isNotNull(getIndividualCode())) {
              SICheckValid.checkValid(errors, groupDetailName + "のセットコード", groupDetail.getIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
              SICheckValid.checkValid(errors, groupDetailName + "のセットコード", groupDetail.getIndividualCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
            }
            
            SICheckValid.checkValid(errors, groupDetailName + "の在庫コード", groupDetail.getDetailIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
            SICheckValid.checkValid(errors, groupDetailName + "の在庫コード", groupDetail.getDetailIndividualCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
            
            if (SIUtil.isNotNull(groupDetail.getDetailIndividualCode())) {
              SICheckValid.checkValid(errors, groupDetailName + "の明細親コード", groupDetail.getDetailCmdtyCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
              SICheckValid.checkValid(errors, groupDetailName + "の明細親コード", groupDetail.getDetailCmdtyCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
              SICheckValid.checkValid(errors, groupDetailName + "の明細親コード", groupDetail.getDetailCmdtyCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 13);
            }
            
            if (SIUtil.isNotNull(groupDetail.getShopCode()) && SIUtil.isNotNull(groupDetail.getDetailIndividualCode())) {
              lSqlBuf = new StringBuffer("");
              lSqlBuf.append("SELECT individualcode FROM cmdtyunittbl ");
              lSqlBuf.append("WHERE CmdtyCode=" + SIDBUtil.SQL2Str(groupDetail.getDetailCmdtyCode(), " "));
              lSqlBuf.append("AND ShopCode=" + SIDBUtil.SQL2Str(groupDetail.getShopCode(), " "));
              lSqlBuf.append("AND individualcode=" + SIDBUtil.SQL2Str(groupDetail.getDetailIndividualCode(), " "));
              lSqlBuf.append("AND cmdtycompositionflg =" + SIDBUtil.SQL2Str(SIConfig.CMDTY_COMPOSITION_NORMAL, " "));
              SICheckValid.checkExist(errors, lConnection, groupDetailName + "の在庫コード", lSqlBuf.toString());
            }
            
            if (SIUtil.isNotNull(groupData.getColorFlg()) && !groupData.getColorFlg().equals("1")) {
              SICheckValid.checkValid(errors, groupDetailName + "の選択仕様名称", groupDetail.getDetailIndividualName(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
            }
            
            if (SIUtil.isNotNull(groupDetail.getDetailIndividualCode())) {
              SICheckValid.checkValid(errors, groupDetailName + "のBG卸価", groupDetail.getBgPrice(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
            }
            
            SICheckValid.checkValid(errors, groupName + "の選択仕様名称", groupDetail.getDetailIndividualName(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
            SICheckValid.checkValid(errors, groupName + "の選択仕様名称", groupDetail.getDetailIndividualName(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 100);
            
            SICheckValid.checkValid(errors, groupDetailName + "の構成数", groupDetail.getCompositionCount(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
            SICheckValid.checkValid(errors, groupDetailName + "の構成数", groupDetail.getCompositionCount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
            SICheckValid.checkValid(errors, groupDetailName + "の構成数", groupDetail.getCompositionCount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
            SICheckValid.checkValid(errors, groupDetailName + "の構成数", groupDetail.getCompositionCount(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, 1 , 999);
            
            SICheckValid.checkValid(errors, groupDetailName + "の表示順", groupDetail.getDispOrder(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
            SICheckValid.checkValid(errors, groupDetailName + "の表示順", groupDetail.getDispOrder(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
            SICheckValid.checkValid(errors, groupDetailName + "の表示順", groupDetail.getDispOrder(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
            SICheckValid.checkValid(errors, groupDetailName + "の表示順", groupDetail.getDispOrder(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, 1 , 9999);
            
            // 表示順がユニークになっているか
            if (dispOrder.contains(groupDetail.getDispOrder())){
              dispOrderUniqueFlg = true;
            } else {
              dispOrder.add(groupDetail.getDispOrder());
            }
            
            // すでに他の行で同じ在庫コードが指定されているか
            if (individualList.contains(groupDetail.getDetailIndividualCode())) {
              chkIndividualCodeFlg = true;
            } else {
              individualList.add(groupDetail.getDetailIndividualCode());
            }
            
            for (int k=0;k<SIConfig.VARIABLE_CMDTY_CODE.length;k++) {
              if (SIConfig.VARIABLE_CMDTY_CODE[k].equals(groupDetail.getDetailIndividualCode())) valiablePriceItemFlg = true;
            }
            
          }
        }
        
        // 商品構成グループ明細
        if (!chkGroupDetailFlg) {
          errors.addError(new SICustomError("manager.message.error.empty.setting", groupName +"の構成商品","1つ以上"));
        }
        
        // 表示順ユニーク
        if (dispOrderUniqueFlg) {
          errors.addError(new SICustomError("input.data.forbidden", groupName +"内の表示順に同じ値"));
        }
      }
    }
    
    // 構成商品重複
    if (chkIndividualCodeFlg) {
      errors.addError(new SICustomError("manager.message.error.area.duplicate.cmdtycode", "構成グループ"));
    }
    
    // 構成グループのチェック
    if (!chkGroupFlg) {
      errors.addError(new SICustomError("manager.message.error.empty.setting","構成グループ","1つ以上"));
    }
    
    // 添付品
    SICheckValid.checkValid(errors, "添付商品の有無", this.getAppendedCmdtyFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "添付商品の有無", this.getAppendedCmdtyFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_APPEND_CMDTY_FLG_INX);
    
    if (this.getAppendedCmdtyFlg() != null && this.getAppendedCmdtyFlg().equals("1")){
      List individualApdList = new ArrayList();
      boolean chkIndividualCodeApdFlg = false;
      
      if (getCompositionAppendedList() == null) setCompositionAppendedList(new ArrayList());
      
      for (int i = 0; i < getCompositionAppendedList().size(); i++) {
        SICmdtyCompositionAppended appended = (SICmdtyCompositionAppended) getCompositionAppendedList().get(i);
        
        if (appended != null) {
          String appendName = "添付商品" + String.valueOf(i + 1);
          
          if (SIUtil.isNotNull(getCmdtyCode())){
            SICheckValid.checkValid(errors, appendName + "の親コード", appended.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
            SICheckValid.checkValid(errors, appendName + "の親コード", appended.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
            SICheckValid.checkValid(errors, appendName + "の親コード", appended.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 13);
          }
          
          if (SIUtil.isNotNull(getShopCode())){
            if (lLogin.isMall() || lCsvCheck) {
              SICheckValid.checkValid(errors, appendName + "のショップコード", appended.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
            } else if (lLogin.isMall()) {
              SICheckValid.checkValid(errors, appendName + "のショップ名", appended.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
            }
          }
          
          if (SIUtil.isNotNull(getIndividualCode())){
            SICheckValid.checkValid(errors, appendName + "のセットコード", appended.getIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
            SICheckValid.checkValid(errors, appendName + "のセットコード", appended.getIndividualCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
          }
          
          SICheckValid.checkValid(errors, appendName + "の在庫コード", appended.getDetailIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
          SICheckValid.checkValid(errors, appendName + "の在庫コード", appended.getDetailIndividualCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
          
          if (SIUtil.isNotNull(appended.getShopCode()) && SIUtil.isNotNull(appended.getDetailIndividualCode())) {
            lSqlBuf = new StringBuffer("");
            lSqlBuf.append("SELECT individualcode FROM cmdtyunittbl ");
            lSqlBuf.append("WHERE ShopCode=" + SIDBUtil.SQL2Str(appended.getShopCode(), " "));
            lSqlBuf.append("AND individualcode=" + SIDBUtil.SQL2Str(appended.getDetailIndividualCode(), " "));
            lSqlBuf.append("AND cmdtycompositionflg =" + SIDBUtil.SQL2Str(SIConfig.CMDTY_COMPOSITION_NORMAL, " "));
            SICheckValid.checkExist(errors, lConnection, appendName + "の在庫コード", lSqlBuf.toString());
          }
          
          SICheckValid.checkValid(errors, appendName + "セット数", appended.getSetCount(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
          SICheckValid.checkValid(errors, appendName + "セット数", appended.getSetCount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
          SICheckValid.checkValid(errors, appendName + "セット数", appended.getSetCount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
          SICheckValid.checkValid(errors, appendName + "セット数", appended.getSetCount(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, 1 , 999);
          
          SICheckValid.checkValid(errors, appendName + "添付数", appended.getAppendedCount(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
          SICheckValid.checkValid(errors, appendName + "添付数", appended.getAppendedCount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
          SICheckValid.checkValid(errors, appendName + "添付数", appended.getAppendedCount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
          SICheckValid.checkValid(errors, appendName + "添付数", appended.getAppendedCount(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, 1 , 999);
          
          SICheckValid.checkValid(errors, appendName + "の表示順", appended.getDispOrder(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
          SICheckValid.checkValid(errors, appendName + "の表示順", appended.getDispOrder(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
          SICheckValid.checkValid(errors, appendName + "の表示順", appended.getDispOrder(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
          SICheckValid.checkValid(errors, appendName + "の表示順", appended.getDispOrder(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, 1 , 9999);
          
          if (SIUtil.isNotNull(appended.getDetailIndividualCode())){
            // すでに他の行で同じ在庫コードが指定されているか
            if (individualApdList.contains(appended.getDetailIndividualCode())) {
              chkIndividualCodeApdFlg = true;
            } else {
              individualApdList.add(appended.getDetailIndividualCode());
            }
          }
        }
        for (int j=0;j<SIConfig.VARIABLE_CMDTY_CODE.length;j++) {
          if (SIConfig.VARIABLE_CMDTY_CODE[j].equals(appended.getDetailIndividualCode())) valiablePriceItemFlg = true;
        }
      }
      
      // 構成商品重複
      if (chkIndividualCodeApdFlg) {
        errors.addError(new SICustomError("manager.message.error.area.duplicate.cmdtycode", "添付商品"));
      }
    }
    
    // オプション
    List individualOptList = new ArrayList();
    boolean chkIndividualCodeOptFlg = false;
    if (getCompositionOptionList() == null) setCompositionOptionList(new ArrayList());
    for (int i = 0; i < getCompositionOptionList().size(); i++) {
      SICmdtyCompositionOption option = (SICmdtyCompositionOption) getCompositionOptionList().get(i);
      
      if (option != null) {
        String optionName = "オプションの" + String.valueOf(i + 1) + "行目";
        
        // ポイントエラーチェック用
        if (!addpointTmp.equals(option.getAddPointRate())){
          addPointErr = true;
        }
        
        if (SIUtil.isNotNull(getCmdtyCode())){
          SICheckValid.checkValid(errors, optionName + "の親コード", option.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
          SICheckValid.checkValid(errors, optionName + "の親コード", option.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
          SICheckValid.checkValid(errors, optionName + "の親コード", option.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 13);
        }
        
        if (SIUtil.isNotNull(getShopCode())){
          if (lLogin.isMall() || lCsvCheck) {
            SICheckValid.checkValid(errors, optionName + "のショップコード", option.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
          } else if (lLogin.isMall()) {
            SICheckValid.checkValid(errors, optionName + "のショップ名", option.getShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
          }
        }
        
        if (SIUtil.isNotNull(getIndividualCode())){
          SICheckValid.checkValid(errors, optionName + "のセットコード", option.getIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
          SICheckValid.checkValid(errors, optionName + "のセットコード", option.getIndividualCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 10);
        }
        
        SICheckValid.checkValid(errors, optionName + "の在庫コード", option.getDetailIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, optionName + "の在庫コード", option.getDetailIndividualCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
        
        if (SIUtil.isNotNull(option.getShopCode()) && SIUtil.isNotNull(option.getDetailIndividualCode())) {
          lSqlBuf = new StringBuffer("");
          lSqlBuf.append("SELECT individualcode FROM cmdtyunittbl ");
          lSqlBuf.append("WHERE ShopCode=" + SIDBUtil.SQL2Str(option.getShopCode(), " "));
          lSqlBuf.append("AND individualcode=" + SIDBUtil.SQL2Str(option.getDetailIndividualCode(), " "));
          lSqlBuf.append("AND cmdtycompositionflg =" + SIDBUtil.SQL2Str(SIConfig.CMDTY_COMPOSITION_NORMAL, " "));
          SICheckValid.checkExist(errors, lConnection, optionName + "の在庫コード", lSqlBuf.toString());
        }
        /*
        if (!option.getAmountFlg().equals("0")) {
          errors.addError(new SICustomError("manager.message.freeword",optionName + "の在庫コード「" + option.getDetailIndividualCode() + "」は受注発注商品でないため指定できません。"));
        }
        */
        if (SIUtil.isNotNull(option.getDetailIndividualCode())) {
          SICheckValid.checkValid(errors, optionName + "のBG卸価", option.getBgPrice(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        }
        
        SICheckValid.checkValid(errors, optionName + "の構成数", option.getCompositionCount(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        SICheckValid.checkValid(errors, optionName + "の構成数", option.getCompositionCount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, optionName + "の構成数", option.getCompositionCount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 3);
        SICheckValid.checkValid(errors, optionName + "の構成数", option.getCompositionCount(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, 1 , 999);
        
        SICheckValid.checkValid(errors, optionName + "の表示順", option.getDispOrder(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
        SICheckValid.checkValid(errors, optionName + "の表示順", option.getDispOrder(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, optionName + "の表示順", option.getDispOrder(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 4);
        SICheckValid.checkValid(errors, optionName + "の表示順", option.getDispOrder(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, 1 , 9999);
        
        SICheckValid.checkValid(errors, optionName + "の特記事項", option.getNotices(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
        SICheckValid.checkValid(errors, optionName + "の特記事項", option.getNotices(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 500);
        
        if (SIUtil.isNotNull(option.getDetailIndividualCode())){
          // すでに他の行で同じ在庫コードが指定されているか
          if (individualOptList.contains(option.getDetailIndividualCode())) {
            chkIndividualCodeOptFlg = true;
          } else {
            individualOptList.add(option.getDetailIndividualCode());
          }
        }
        
        for (int j=0;j<SIConfig.VARIABLE_CMDTY_CODE.length;j++) {
          if (SIConfig.VARIABLE_CMDTY_CODE[j].equals(option.getDetailIndividualCode())) valiablePriceItemFlg = true;
        }
      }
    }
    
    // 構成商品重複
    if (chkIndividualCodeOptFlg) {
      errors.addError(new SICustomError("manager.message.error.area.duplicate.cmdtycode", "オプション"));
    }
    
    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, "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.getSalonPrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "サロン価", this.getSalonPrice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    
    SICheckValid.checkValid(errors, "セット値引き", this.getSetDiscount(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "セット値引き", this.getSetDiscount(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    if (SIUtil.isNotNull(this.getSetDiscount())){
      SICheckValid.checkValid(errors, "セット値引き", this.getSetDiscount(), SICheckDataConf.SICHECK_DATA_NUMBER_BETWEEN_TYPE, 0 , 99999999);
      if (getCmdtySetFlg().equals("1") && !this.getSetDiscount().equals("0")){
        errors.addError(new SICustomError("manager.message.error.specified.no","商品種別の仕様指定品","セット値引き"));
      }
    }
    
    if (addPointErr){
      errors.addError(new SICustomError("manager.message.freeword","ポイント付与率が違う構成商品は設定できません。"));
    }
    
    if (valiablePriceItemFlg) {
      errors.addError(new SICustomError("manager.message.freeword","可変価格商品（張替え）は構成商品に設定できません。"));
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    
    return errors.isEmpty();
  }
  
  /**
   * 商品情報に関係する入力チェックを行います
   * ※構成商品確定ボタンの入力チェック、金額チェック以外のチェック
   *
   * @param lRequest
   * @param lConnection
   * @return
   */
  public boolean cmdtyValidate(HttpServletRequest lRequest, Connection lConnection) {
    return cmdtyValidate(lRequest, lConnection, false);
  }
  
  /**
   * 商品情報に関係する入力チェックを行います
   * ※構成商品確定ボタンの入力チェック、金額チェック以外のチェック
   * @param lRequest
   * @param lConnection
   * @param lCsvCheck
   * @return
   */
  public boolean cmdtyValidate(HttpServletRequest lRequest, Connection lConnection, boolean lCsvCheck) {
    SICustomErrors errors = (SICustomErrors) lRequest.getAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    if (errors == null) errors = new SICustomErrors();
    
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    StringBuffer lSqlBuf = new StringBuffer("");
    
    SICheckValid.checkValid(errors, "親コード", this.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "親コード", this.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "親コード", this.getCmdtyCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 13);
    
    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());
      }
    }
    
    if (this.getIndividualCode().length() > 9) {
      if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
        lSqlBuf = new StringBuffer();
        // 重複レコードの存在をチェックします
        lSqlBuf.append("SELECT individualcode FROM individualtbl ");
        lSqlBuf.append("WHERE ShopCode=" + SIDBUtil.SQL2Str(this.getShopCode(), " "));
        lSqlBuf.append("AND individualcode like" + SIDBUtil.SQL2Str(this.getIndividualCode().substring(0, 9) + "%", " "));
        SICheckValid.checkDuplicate(errors, lConnection, "セットコード", lSqlBuf.toString());
      } else {
        if (SIUtil.isNotNull(this.getShopCode()) && SIUtil.isNotNull(this.getCmdtyCode())) {
          lSqlBuf = new StringBuffer("");
          lSqlBuf.append("SELECT individualcode FROM individualtbl ");
          lSqlBuf.append("WHERE CmdtyCode=" + SIDBUtil.SQL2Str(this.getCmdtyCode(), " "));
          lSqlBuf.append("AND ShopCode=" + SIDBUtil.SQL2Str(this.getShopCode(), " "));
          lSqlBuf.append("AND individualcode=" + SIDBUtil.SQL2Str(this.getIndividualCode(), " "));
          SICheckValid.checkExist(errors, lConnection, "セットコード", lSqlBuf.toString());
        }
      }
    }
    
    // 新規登録時の対象カテゴリ存在チェック
    if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())) {
      lSqlBuf = new StringBuffer();
      // 重複レコードの存在でかどうかをチェックします
      lSqlBuf.append("SELECT ctgrycode FROM ctgrymtbl ");
      lSqlBuf.append("WHERE ctgrycode=" + SIDBUtil.SQL2Str(this.getIndividual1(), " "));
      SICheckValid.checkExist(errors, lConnection, "カテゴリ", lSqlBuf.toString());
      boolean editableFlg = false;
      for(int i=0;i<SIConfig.INVISIBLECTGRYS.length;i++){
        if (SIConfig.INVISIBLECTGRYS[i].equals(this.getIndividual1())||"SF".equals(this.getIndividual1())||"ZM".equals(this.getIndividual1())) {
          for(int j=0;j<SIConfig.EDITABLECTGRYS.length;j++){
            if (SIConfig.EDITABLECTGRYS[j].equals(this.getIndividual1())) editableFlg=true;
          }
          if (!editableFlg){
            errors.addError(new SICustomError("manager.message.freeword","このカテゴリ("+this.getIndividual1()+")には商品を登録できません"));
            break;
          }
        }
      }
    }
    
    SICheckValid.checkValid(errors, "ＢＧ卸価フロント表示", this.getBgPriceDispFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "ＢＧ卸価フロント表示", this.getBgPriceDispFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_BGPRICE_DISP_INX);
    
    SICheckValid.checkValid(errors, "フロント表示", this.getFrontDispFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "フロント表示", this.getFrontDispFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_FRONT_DISP_FLG_INX);
    
    SICheckValid.checkValid(errors, "問合せ区分", this.getInquiryFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "問合せ区分", this.getInquiryFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_INQUIRY_FLG_INX);
    
    SICheckValid.checkValid(errors, "値下げ表示", this.getPriceDownFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "値下げ表示", this.getPriceDownFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_PRICE_DOWN_FLG_INX);
    
    SICheckValid.checkValid(errors, "VIP会員値引", this.getMemberDiscountFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "VIP会員値引", this.getMemberDiscountFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_MEMBER_DISCOUNT_TYPE_INX);
    
    SICheckValid.checkValid(errors, "キャンペーン設定フラグ", this.getSpCampaignFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "キャンペーン設定フラグ", this.getSpCampaignFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_SPCAMPAIGN_INX);
    
    if (!this.getSpCampaignFlg().equals("0")) SICheckValid.checkValid(errors, "通常価格", this.getNomalPrice(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "通常価格", this.getNomalPrice(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "通常価格", this.getNomalPrice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    
    SICheckValid.checkValid(errors, "キャンペーン特価区分", this.getCampaignPriceFlg(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "キャンペーン特価区分", this.getCampaignPriceFlg(), SICheckDataConf.SICHECK_FLAG_TYPE, SIFlagConf.SIFLAG_CAMPAIGNPRICE_FLG_INX);
    
    if (this.getCommodityExplanation().indexOf("http")>=0) errors.addError(new SICustomError("manager.message.freeword","商品説明にURLは入力できません"));
    
    SICheckValid.checkValid(errors, "商品説明拡張１タイトル", this.getExpansionComment1Title(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "商品説明拡張１タイトル", this.getExpansionComment1Title(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    if(SIUtil.isNotNull(this.getExpansionComment1Text())){
      SICheckValid.checkValid(errors, "商品説明拡張１タイトル", this.getExpansionComment1Title(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      if (this.getExpansionComment1Text().indexOf("http")>=0) errors.addError(new SICustomError("manager.message.freeword","商品説明拡張１にURLは入力できません"));
    }
    SICheckValid.checkValid(errors, "商品説明拡張２タイトル", this.getExpansionComment2Title(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "商品説明拡張２タイトル", this.getExpansionComment2Title(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    if(SIUtil.isNotNull(this.getExpansionComment2Text())){
      SICheckValid.checkValid(errors, "商品説明拡張２タイトル", this.getExpansionComment2Title(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      if (this.getExpansionComment2Text().indexOf("http")>=0) errors.addError(new SICustomError("manager.message.freeword","商品説明拡張２にURLは入力できません"));
    }
    SICheckValid.checkValid(errors, "商品説明拡張３タイトル", this.getExpansionComment3Title(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "商品説明拡張３タイトル", this.getExpansionComment3Title(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    if(SIUtil.isNotNull(this.getExpansionComment3Text())){
      SICheckValid.checkValid(errors, "商品説明拡張３タイトル", this.getExpansionComment3Title(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      if (this.getExpansionComment3Text().indexOf("http")>=0) errors.addError(new SICustomError("manager.message.freeword","商品説明拡張３にURLは入力できません"));
    }
    SICheckValid.checkValid(errors, "商品説明拡張４タイトル", this.getExpansionComment4Title(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "商品説明拡張４タイトル", this.getExpansionComment4Title(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    if(SIUtil.isNotNull(this.getExpansionComment4Text())){
      SICheckValid.checkValid(errors, "商品説明拡張４タイトル", this.getExpansionComment4Title(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    // EDBTG005-00 kamata add start
    SICheckValid.checkValid(errors, "商品説明拡張５タイトル", this.getExpansionComment5Title(), SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors, "商品説明拡張５タイトル", this.getExpansionComment5Title(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    if(SIUtil.isNotNull(this.getExpansionComment5Text())){
      SICheckValid.checkValid(errors, "商品説明拡張５タイトル", this.getExpansionComment5Title(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    // EDBTG005-00 kamata add end
    SICheckValid.checkValid(errors, "備考", this.getRemarks(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 1000);
    
    SICheckValid.checkValid(errors, "画像タイトル１", this.getImageName1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル２", this.getImageName2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル３", this.getImageName3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル４", this.getImageName4(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル５", this.getImageName5(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル６", this.getImageName6(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル７", this.getImageName7(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル８", this.getImageName8(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル９", this.getImageName9(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル１０", this.getImageName10(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    SICheckValid.checkValid(errors, "画像タイトル１１", this.getImageName11(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 50);
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    
    return errors.isEmpty();
  }
  
  /**
   * 商品構成の金額に関係する入力チェックを行います。
   *
   * @param lRequest
   * @param lConnection
   * @return
   */
  public boolean calcValidate(HttpServletRequest lRequest, Connection lConnection) {
    return calcValidate(lRequest, lConnection, false);
  }
  
  /**
   * 商品構成の金額に関係する入力チェックを行います。
   *
   * @param lRequest
   * @param lConnection
   * @param lCsvCheck
   * @return
   */
  public boolean calcValidate(HttpServletRequest lRequest, Connection lConnection, boolean lCsvCheck) {
    SICustomErrors errors = (SICustomErrors) lRequest.getAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    if (errors == null) errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "ＢＧ卸価", this.getBgPrice(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "ＢＧ卸価", this.getBgPrice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    if (SIUtil.isNotNull(this.getBgPrice()) && this.getBgPrice().equals("0")) errors.addError((new SICustomError("input.data.instock.less", "ＢＧ卸価", "1")));
    
    SICheckValid.checkValid(errors, "セット値引き前のＢＧ卸価", this.getBeforeBgprice(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "セット値引き前のＢＧ卸価", this.getBeforeBgprice(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    if (SIUtil.isNotNull(this.getBeforeBgprice()) && this.getBeforeBgprice().equals("0")) errors.addError((new SICustomError("input.data.instock.less", "セット値引き前のＢＧ卸価", "1")));
    
    if (!this.getBgPrice().equals(this.getNomalPrice())) {
      SICheckValid.checkValid(errors, "通常価格", "BG卸価", this.getNomalPrice(), this.getBgPrice(), SICheckDataConf.SICHECK_DATA_VALUE_GREATER_TYPE);
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    
    return errors.isEmpty();
  }
  
  /**
   * 構成グループの明細構成商品をソートします
   */
  public void sortCompositionGroupData(){
    if (getCompositionGroupList() == null) return;
    
    for (int i = 0; i < getCompositionGroupList().size(); i++){
      SICmdtyCompositionGroupData groupData = (SICmdtyCompositionGroupData) getCompositionGroupList().get(i);
      if (groupData == null || groupData.getCompositionGroupDetail() == null) continue;
      
      Collections.sort(groupData.getCompositionGroupDetail(), new Comparator() {
        public int compare(Object o1, Object o2) {
          SICmdtyCompositionGroupDetail gDetail1 = (SICmdtyCompositionGroupDetail) o1;
          SICmdtyCompositionGroupDetail gDetail2 = (SICmdtyCompositionGroupDetail) o2;
          
          if (SIUtil.isNull(gDetail1.getDispOrder()) && SIUtil.isNull(gDetail2.getDispOrder())) return 0;
          if (SIUtil.isNull(gDetail1.getDispOrder())) return 1;
          if (SIUtil.isNull(gDetail2.getDispOrder())) return -1;
          
          int o1Int = Integer.parseInt(gDetail1.getDispOrder());
          int o2Int = Integer.parseInt(gDetail2.getDispOrder());
          if (o1Int == o2Int) {
            return 0;
          } else if (o1Int < o2Int){
            return -1;
          }
          return 1;
        }
      });
      getCompositionGroupList().set(i, groupData);
    }
  }
  
  /**
   * オプション明細構成商品をソートします
   */
  public void sortCompositionOption(){
    if (getCompositionOptionList() == null) return;
    
    Collections.sort(getCompositionOptionList(), new Comparator() {
      public int compare(Object o1, Object o2) {
        SICmdtyCompositionOption option1 = (SICmdtyCompositionOption) o1;
        SICmdtyCompositionOption option2 = (SICmdtyCompositionOption) o2;
        
        if (SIUtil.isNull(option1.getDispOrder()) && SIUtil.isNull(option2.getDispOrder())) return 0;
        if (SIUtil.isNull(option1.getDispOrder())) return 1;
        if (SIUtil.isNull(option2.getDispOrder())) return -1;
        
        int o1Int = Integer.parseInt(option1.getDispOrder());
        int o2Int = Integer.parseInt(option2.getDispOrder());
        if (o1Int == o2Int) {
          return 0;
        } else if (o1Int < o2Int){
          return -1;
        }
        return 1;
      }
    });
  }
  
  /**
   * 添付商品明細構成商品をソートします
   */
  public void sortCompositionAppended(){
    if (getCompositionAppendedList() == null) return;
    
    Collections.sort(getCompositionAppendedList(), new Comparator() {
      public int compare(Object o1, Object o2) {
        SICmdtyCompositionAppended appended1 = (SICmdtyCompositionAppended) o1;
        SICmdtyCompositionAppended appended2 = (SICmdtyCompositionAppended) o2;
        
        if (SIUtil.isNull(appended1.getDispOrder()) && SIUtil.isNull(appended2.getDispOrder())) return 0;
        if (SIUtil.isNull(appended1.getDispOrder())) return 1;
        if (SIUtil.isNull(appended2.getDispOrder())) return -1;
        
        int o1Int = Integer.parseInt(appended1.getDispOrder());
        int o2Int = Integer.parseInt(appended2.getDispOrder());
        if (o1Int == o2Int) {
          return 0;
        } else if (o1Int < o2Int){
          return -1;
        }
        return 1;
      }
    });
  }
  
  public String getFirstDispFlg() {
    return this.firstDispFlg;
  }
  
  public void setFirstDispFlg(String firstDispFlg) {
    this.firstDispFlg = firstDispFlg;
  }
  
  public List getCompositionGroupList() {
    return this.compositionGroupList;
  }
  
  public void setCompositionGroupList(List compositionGroupList) {
    if (compositionGroupList == null) compositionGroupList = new ArrayList();
    this.compositionGroupList = compositionGroupList;
  }
  
  public List getCompositionAppendedList() {
    return this.compositionAppendedList;
  }
  
  public void setCompositionAppendedList(List compositionAppendedList) {
    if (compositionAppendedList == null) compositionAppendedList = new ArrayList();
    this.compositionAppendedList = compositionAppendedList;
  }
  
  public List getCompositionOptionList() {
    return this.compositionOptionList;
  }
  
  public void setCompositionOptionList(List compositionOptionList) {
    if (compositionOptionList == null) compositionOptionList = new ArrayList();
    this.compositionOptionList = compositionOptionList;
  }
  
  public boolean isLoginFlg() {
    return this.loginFlg;
  }
  
  public void setLoginFlg(boolean loginFlg) {
    this.loginFlg = loginFlg;
  }
  
  public String getIndividual4() {
    return this.individual4;
  }
  
  public void setIndividual4(String individual4) {
    if (SIUtil.isNull(individual4)) individual4 = "";
    this.individual4 = individual4;
  }
  
  public String getGCount() {
    return this.gCount;
  }
  
  public void setGCount(String gCount) {
    if (SIUtil.isNull(gCount)) gCount = "0";
    this.gCount = gCount;
  }
  
  public String getColorFlgChgGroup() {
    return this.colorFlgChgGroup;
  }
  
  public void setColorFlgChgGroup(String colorFlgChgGroup) {
    if (SIUtil.isNull(colorFlgChgGroup)) colorFlgChgGroup = "";
    this.colorFlgChgGroup = colorFlgChgGroup;
  }
  
  public String getUsedNewFlg() {
    return this.usedNewFlg;
  }
  
  public String getCmdtyName() {
    return this.cmdtyName;
  }
  
  public String getMakerCode() {
    return this.makerCode;
  }
  
  public String getTenureofuse() {
    return this.tenureofuse;
  }
  
  public String getGuaranteedTerm() {
    return this.guaranteedTerm;
  }
  
  public String getDisableFlg() {
    return this.disableFlg;
  }
  
  public void setUsedNewFlg(String usedNewFlg) {
    if (SIUtil.isNull(usedNewFlg)) usedNewFlg = "";
    this.usedNewFlg = usedNewFlg;
  }
  
  public void setCmdtyName(String cmdtyName) {
    if (SIUtil.isNull(cmdtyName)) cmdtyName = "";
    this.cmdtyName = cmdtyName;
  }
  
  public void setMakerCode(String makerCode) {
    if (SIUtil.isNull(makerCode)) makerCode = "";
    this.makerCode = makerCode;
  }
  
  public void setTenureofuse(String tenureofuse) {
    if (SIUtil.isNull(tenureofuse)) tenureofuse = "";
    this.tenureofuse = tenureofuse;
  }
  
  public void setGuaranteedTerm(String guaranteedTerm) {
    if (SIUtil.isNull(guaranteedTerm)) guaranteedTerm = "";
    this.guaranteedTerm = guaranteedTerm;
  }
  
  public void setDisableFlg(String disableFlg) {
    if (SIUtil.isNull(disableFlg)) disableFlg = "0";
    this.disableFlg = disableFlg;
  }
  
  public String getFrontDispFlg() {
    return this.frontDispFlg;
  }
  
  public String getBgPriceDispFlg() {
    return this.bgPriceDispFlg;
  }
  
  public String getInquiryFlg() {
    return this.inquiryFlg;
  }
  
  public String getPriceDownFlg() {
    return this.priceDownFlg;
  }
  
  public String getMemberDiscountFlg() {
    return this.memberDiscountFlg;
  }
  
  public String getSpCampaignFlg() {
    return this.spCampaignFlg;
  }
  
  public String getNomalPrice() {
    return this.nomalPrice;
  }
  
  public String getCampaignPriceFlg() {
    return this.campaignPriceFlg;
  }
  
  public String getCommodityExplanation() {
    return this.commodityExplanation;
  }
  
  public String getExpansionComment1Title() {
    return this.expansionComment1Title;
  }
  
  public String getExpansionComment1Text() {
    return this.expansionComment1Text;
  }
  
  public String getExpansionComment2Title() {
    return this.expansionComment2Title;
  }
  
  public String getExpansionComment2Text() {
    return this.expansionComment2Text;
  }
  
  public String getExpansionComment3Title() {
    return this.expansionComment3Title;
  }
  
  public String getExpansionComment3Text() {
    return this.expansionComment3Text;
  }
  
  public String getExpansionComment4Title() {
    return this.expansionComment4Title;
  }
  
  public String getExpansionComment4Text() {
    return this.expansionComment4Text;
  }
  
  //EDBTG005-00 kamata add start
  public String getExpansionComment5Title() {
    return expansionComment5Title;
  }
  
  public String getExpansionComment5Text() {
    return expansionComment5Text;
  }
  //EDBTG005-00 kamata add end
  
  public String getRemarks() {
    return this.remarks;
  }
  
  public void setFrontDispFlg(String frontDispFlg) {
    if (SIUtil.isNull(frontDispFlg)) frontDispFlg = "0";
    this.frontDispFlg = frontDispFlg;
  }
  
  public void setBgPriceDispFlg(String bgPriceDispFlg) {
    if (SIUtil.isNull(bgPriceDispFlg)) bgPriceDispFlg = "0";
    this.bgPriceDispFlg = bgPriceDispFlg;
  }
  
  public void setInquiryFlg(String inquiryFlg) {
    if (SIUtil.isNull(inquiryFlg)) inquiryFlg = "0";
    this.inquiryFlg = inquiryFlg;
  }
  
  public void setPriceDownFlg(String priceDownFlg) {
    if (SIUtil.isNull(priceDownFlg)) priceDownFlg = "0";
    this.priceDownFlg = priceDownFlg;
  }
  
  public void setMemberDiscountFlg(String memberDiscountFlg) {
    if (SIUtil.isNull(memberDiscountFlg)) memberDiscountFlg = "0";
    this.memberDiscountFlg = memberDiscountFlg;
  }
  
  public void setSpCampaignFlg(String spCampaignFlg) {
    if (SIUtil.isNull(spCampaignFlg)) spCampaignFlg = "0";
    this.spCampaignFlg = spCampaignFlg;
  }
  
  public void setNomalPrice(String nomalPrice) {
    if (SIUtil.isNull(nomalPrice)) nomalPrice = "";
    this.nomalPrice = nomalPrice;
  }
  
  public void setCampaignPriceFlg(String campaignPriceFlg) {
    if (SIUtil.isNull(campaignPriceFlg)) campaignPriceFlg = "";
    this.campaignPriceFlg = campaignPriceFlg;
  }
  
  public void setCommodityExplanation(String commodityExplanation) {
    if (SIUtil.isNull(commodityExplanation)) commodityExplanation = "";
    this.commodityExplanation = commodityExplanation;
  }
  
  public void setExpansionComment1Title(String expansionComment1Title) {
    if (SIUtil.isNull(expansionComment1Title)) expansionComment1Title = "";
    this.expansionComment1Title = expansionComment1Title;
  }
  
  public void setExpansionComment1Text(String expansionComment1Text) {
    if (SIUtil.isNull(expansionComment1Text)) expansionComment1Text = "";
    this.expansionComment1Text = expansionComment1Text;
  }
  
  public void setExpansionComment2Title(String expansionComment2Title) {
    if (SIUtil.isNull(expansionComment2Title)) expansionComment2Title = "";
    this.expansionComment2Title = expansionComment2Title;
  }
  
  public void setExpansionComment2Text(String expansionComment2Text) {
    if (SIUtil.isNull(expansionComment2Text)) expansionComment2Text = "";
    this.expansionComment2Text = expansionComment2Text;
  }
  
  public void setExpansionComment3Title(String expansionComment3Title) {
    if (SIUtil.isNull(expansionComment3Title)) expansionComment3Title = "";
    this.expansionComment3Title = expansionComment3Title;
  }
  
  public void setExpansionComment3Text(String expansionComment3Text) {
    if (SIUtil.isNull(expansionComment3Text)) expansionComment3Text = "";
    this.expansionComment3Text = expansionComment3Text;
  }
  
  public void setExpansionComment4Title(String expansionComment4Title) {
    if (SIUtil.isNull(expansionComment4Title)) expansionComment4Title = "";
    this.expansionComment4Title = expansionComment4Title;
  }
  
  public void setExpansionComment4Text(String expansionComment4Text) {
    if (SIUtil.isNull(expansionComment4Text)) expansionComment4Text = "";
    this.expansionComment4Text = expansionComment4Text;
  }
  //EDBTG005-00 kamata add start
  public void setExpansionComment5Title(String expansionComment5Title) {
    if (SIUtil.isNull(expansionComment5Title)) expansionComment5Title = "";
    this.expansionComment5Title = expansionComment5Title;
  }
  
  public void setExpansionComment5Text(String expansionComment5Text) {
    if (SIUtil.isNull(expansionComment5Text)) expansionComment5Text = "";
    this.expansionComment5Text = expansionComment5Text;
  }
  //EDBTG005-00 kamata add end
  public void setRemarks(String remarks) {
    if (SIUtil.isNull(remarks)) remarks = "";
    this.remarks = remarks;
  }
  
  public String getIndividual1() {
    return this.individual1;
  }
  
  public String getIndividual2() {
    return this.individual2;
  }
  
  public String getIndividual3() {
    return this.individual3;
  }
  
  public void setIndividual1(String individual1) {
    if (SIUtil.isNull(individual1)) individual1 = "";
    this.individual1 = individual1;
  }
  
  public void setIndividual2(String individual2) {
    if (SIUtil.isNull(individual2)) individual2 = "";
    this.individual2 = individual2;
  }
  
  public void setIndividual3(String individual3) {
    if (SIUtil.isNull(individual3)) individual3 = "";
    this.individual3 = individual3;
  }
  
  public String getNewFixedPrice() {
    return this.newFixedPrice;
  }
  
  public void setNewFixedPrice(String newFixedPrice) {
    if (SIUtil.isNull(newFixedPrice)) newFixedPrice = "";
    this.newFixedPrice = newFixedPrice;
  }
  
  public String getImageName1() {
    return this.imageName1;
  }
  
  public String getImageName2() {
    return this.imageName2;
  }
  
  public String getImageName3() {
    return this.imageName3;
  }
  
  public String getImageName4() {
    return this.imageName4;
  }
  
  public String getImageName5() {
    return this.imageName5;
  }
  
  public String getImageName6() {
    return this.imageName6;
  }
  
  public String getImageName7() {
    return this.imageName7;
  }
  
  public String getImageName8() {
    return this.imageName8;
  }
  
  public String getImageName9() {
    return this.imageName9;
  }
  
  public String getImageName10() {
    return this.imageName10;
  }
  
  public String getImageName11() {
    return this.imageName11;
  }
  
  public void setImageName1(String imageName1) {
    this.imageName1 = imageName1;
  }
  
  public void setImageName2(String imageName2) {
    this.imageName2 = imageName2;
  }
  
  public void setImageName3(String imageName3) {
    this.imageName3 = imageName3;
  }

  public void setImageName4(String imageName4) {
    this.imageName4 = imageName4;
  }
  
  public void setImageName5(String imageName5) {
    this.imageName5 = imageName5;
  }
  
  public void setImageName6(String imageName6) {
    this.imageName6 = imageName6;
  }
  
  public void setImageName7(String imageName7) {
    this.imageName7 = imageName7;
  }
  
  public void setImageName8(String imageName8) {
    this.imageName8 = imageName8;
  }
  
  public void setImageName9(String imageName9) {
    this.imageName9 = imageName9;
  }
  
  public void setImageName10(String imageName10) {
    this.imageName10 = imageName10;
  }
  
  public void setImageName11(String imageName11) {
    this.imageName11 = imageName11;
  }
  
  public String getActionGroup() {
    return this.actionGroup;
  }
  
  public void setActionGroup(String actionGroup) {
    if (SIUtil.isNull(actionGroup)) actionGroup = "";
    this.actionGroup = actionGroup;
  }
  
  public String getActionLen() {
    return this.actionLen;
  }
  
  public void setActionLen(String actionLen) {
    if (SIUtil.isNull(actionLen)) actionLen = "";
    this.actionLen = actionLen;
  }
  
  public String getTaxFlg() {
    return this.taxFlg;
  }
  
  public void setTaxFlg(String taxFlg) {
    if (SIUtil.isNull(taxFlg)) taxFlg = "2";
    this.taxFlg = taxFlg;
  }
  
  public String getBgPrice() {
    return this.bgPrice;
  }
  
  public String getBgPriceWithoutTax() {
    return this.bgPriceWithoutTax;
  }
  
  public String getPurchaseprice() {
    return this.purchaseprice;
  }
  
  public String getProcessingexpence() {
    return this.processingexpence;
  }
  
  public void setBgPrice(String bgPrice) {
    if (SIUtil.isNull(bgPrice)) bgPrice = "";
    this.bgPrice = bgPrice;
  }
  
  public void setBgPriceWithoutTax(String bgPriceWithoutTax) {
    if (SIUtil.isNull(bgPriceWithoutTax)) bgPriceWithoutTax = "";
    this.bgPriceWithoutTax = bgPriceWithoutTax;
  }
  
  public void setPurchaseprice(String purchaseprice) {
    if (SIUtil.isNull(purchaseprice)) purchaseprice = "";
    this.purchaseprice = purchaseprice;
  }
  
  public void setProcessingexpence(String processingexpence) {
    if (SIUtil.isNull(processingexpence)) processingexpence = "";
    this.processingexpence = processingexpence;
  }
  
  public String getCmdtyCompositionFlg() {
    return this.cmdtyCompositionFlg;
  }
  
  public void setCmdtyCompositionFlg(String cmdtyCompositionFlg) {
    if (SIUtil.isNull(cmdtyCompositionFlg)) cmdtyCompositionFlg = SIConfig.CMDTY_COMPOSITION_NORMAL;
    this.cmdtyCompositionFlg = cmdtyCompositionFlg;
  }
  
  public String getCollId() {
    return this.collId;
  }
  
  public void setCollId(String collId) {
    if (SIUtil.isNull(collId)) collId = "";
    this.collId = collId;
  }
  
  public String getDispCarriageFreeFlg() {
    return this.dispCarriageFreeFlg;
  }
  
  public void setDispCarriageFreeFlg(String lDispCarriageFreeFlg) {
    if (SIUtil.isNull(lDispCarriageFreeFlg)) lDispCarriageFreeFlg = "";
    this.dispCarriageFreeFlg = lDispCarriageFreeFlg;
  }
  
  public String getDiscountDispFlg() {
    return discountDispFlg;
  }
  
  public void setDiscountDispFlg(String discountDispFlg) {
    if (SIUtil.isNull(discountDispFlg)) discountDispFlg = "1";
    this.discountDispFlg = discountDispFlg;
  }
  
  /**
   * @return catchcopy
   */
  public String getCatchcopy() {
    return catchcopy;
  }

  /**
   * @param catchcopy セットする catchcopy
   */
  public void setCatchcopy(String catchcopy) {
    this.catchcopy = catchcopy;
  }

  /**
   * @return specification
   */
  public String getSpecification() {
    return specification;
  }

  /**
   * @param specification セットする specification
   */
  public void setSpecification(String specification) {
    this.specification = specification;
  }

  /**
   * @return activeingredient
   */
  public String getActiveingredient() {
    return activeingredient;
  }

  /**
   * @param activeingredient セットする activeingredient
   */
  public void setActiveingredient(String activeingredient) {
    this.activeingredient = activeingredient;
  }

  /**
   * @return component
   */
  public String getComponent() {
    return component;
  }

  /**
   * @param component セットする component
   */
  public void setComponent(String component) {
    this.component = component;
  }

  /**
   * @return precaution
   */
  public String getPrecaution() {
    return precaution;
  }

  /**
   * @param precaution セットする precaution
   */
  public void setPrecaution(String precaution) {
    this.precaution = precaution;
  }

  /**
   * @return othernotice
   */
  public String getOthernotice() {
    return othernotice;
  }

  /**
   * @param othernotice セットする othernotice
   */
  public void setOthernotice(String othernotice) {
    this.othernotice = othernotice;
  }
  
  public String getSearchIndividualCodeTxt() {
    return this.searchIndividualCodeTxt;
  }
  
  public void setSearchIndividualCodeTxt(String searchIndividualCodeTxt) {
    if (SIUtil.isNull(searchIndividualCodeTxt)) searchIndividualCodeTxt = "";
    this.searchIndividualCodeTxt = SIUtil.changeTo(searchIndividualCodeTxt.trim(), this.encode);
  }
  
  public String getCtgryName() {
    return ctgryName;
  }
  
  public void setCtgryName(String ctgryName) {
    if (SIUtil.isNull(ctgryName)) ctgryName = "";
    this.ctgryName = ctgryName;
  }
  
  public String getSalonPrice() {
    return salonPrice;
  }
  
  public void setSalonPrice(String salonPrice) {
    if (SIUtil.isNull(salonPrice)) salonPrice = "";
    this.salonPrice = salonPrice;
  }
  
  /**
   * <b>getCmdtyCompositionGroupDetail</b> 構成品選択商品情報取得
   *
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  public SICmdty getCmdtyCompositionGroupDetail(HttpServletRequest lRequest, Connection lConnection, String lBranchCode, String lShopCode, String lCmdtyCode, String lIndividualCode) throws SIDBAccessException {
    // 返却変数
    SICmdty lCmdty = new SICmdty();
    
    String amountBranch = lBranchCode;
    if(SIUtil.isNull(amountBranch)) {
      amountBranch="999";
    }
    SIUserInfo lUserInfo = new SIUserInfo();
    if (lRequest != null) {
      lUserInfo = SIHTMLUtil.getUserInfo(lRequest);
    }
    
    StringBuffer lCmdtySqlBuf = new StringBuffer();// 商品レコード
    lCmdtySqlBuf.append("SELECT a1.ShopCode,a1.cmdtycode,a1.individualcode,a1.cmdtyname,a1.usedNewFlg,a1.taxFlg, a1.amountFlg ");
    lCmdtySqlBuf.append(",CASE ");
    lCmdtySqlBuf.append(" WHEN a1.cmdtycompositionflg = 0 THEN a1.unitprice ");
    lCmdtySqlBuf.append(" ELSE getSetCmdtyPrice(a1.ShopCode,a1.cmdtycode,a1.individualcode,a1.cmdtycompositionflg,a1.unitprice) ");
    lCmdtySqlBuf.append(" END AS unitprice,a1.unitPriceWithoutTax ");
    lCmdtySqlBuf.append(",a1.amount-a1.bgpamount AS amount ,ss.amount AS amount2,b1.colorname,COALESCE((SELECT TaxRate FROM TaxVW),0) AS TaxRate, a1.memberdiscountflg ");
    lCmdtySqlBuf.append(",a1.cmdtycompositionflg ");
    lCmdtySqlBuf.append("FROM cmdtyunittbl a1,colortbl b1 ");
    lCmdtySqlBuf.append(",(SELECT individualcode,amount FROM storestocktbl WHERE branchCode = ").append(SIDBUtil.SQL2Str(amountBranch,") ss "));
    lCmdtySqlBuf.append("WHERE a1.colorcode=b1.colorcode AND shopCode='0' ");
    lCmdtySqlBuf.append("AND a1.individualcode=ss.individualcode ");
    lCmdtySqlBuf.append("AND a1.shopcode=").append(SIDBUtil.SQL2Str(lShopCode," "));
    lCmdtySqlBuf.append("AND a1.cmdtycode=").append(SIDBUtil.SQL2Str(lCmdtyCode," "));
    lCmdtySqlBuf.append("AND a1.individualcode=").append(SIDBUtil.SQL2Str(lIndividualCode," "));
    
    if(SIUtil.isNotNull(lBranchCode)) {
      lCmdtySqlBuf.append(" AND CASE WHEN a1.amountFlg='0' THEN true ");
      lCmdtySqlBuf.append(" WHEN a1.individualcode IN(SELECT individualcode FROM storestocktbl WHERE amount<>0 AND branchcode=").append(SIDBUtil.SQL2Str(lBranchCode,") "));
      lCmdtySqlBuf.append(" THEN true ELSE false END ");
    }
    
    // 出力順
    log.debug("lSqlBuf=" + lCmdtySqlBuf.toString());
    
    Statement lStatement = null;
    ResultSet lResultSet = null;
    // 実行
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lCmdtySqlBuf.toString());
      
      // 商品レコードのセットの作成
      while (lResultSet.next()) {
        lCmdty.setEncode(SIConfig.SIENCODE_NONE);
        lCmdty.setShopCode(lResultSet.getString("ShopCode"));
        lCmdty.setCmdtyCode(lResultSet.getString("CmdtyCode"));
        lCmdty.setIndividualCode(lResultSet.getString("IndividualCode"));
        lCmdty.setCmdtyName(lResultSet.getString("CmdtyName"));
        lCmdty.setUsedNewFlg(lResultSet.getInt("UsedNewFlg"));
        lCmdty.setColorName(lResultSet.getString("ColorName"));
        lCmdty.setUnitPrice(lResultSet.getString("UnitPrice"));
        lCmdty.setUnitPriceWithoutTax(lResultSet.getString("UnitPriceWithoutTax"));
        lCmdty.setTaxFlg(lResultSet.getString("taxFlg"));
        if (SIUtil.isNull(lBranchCode)) {
          lCmdty.setAmount(lResultSet.getString("amount"));
        } else {
          lCmdty.setAmount(lResultSet.getString("amount2"));
        }
        lCmdty.setTaxRate(lResultSet.getString("taxRate"));
        lCmdty.setAmountFlg(lResultSet.getString("amountFlg"));
        if (lCmdty.getAmountFlg().equals("0")) {
          lCmdty.setBranchName("在庫管理なし");
        } else {
          lCmdty.setBranchName(SIBGUtil.getBranchStockTxt(lConnection, lCmdty.getCmdtyCode(), lCmdty.getIndividualCode(), "", "<br>"));
        }
        lCmdty.setMemberDiscountFlg(lResultSet.getString("memberdiscountflg"));
        lCmdty.setMemberDiscountRate(lUserInfo.getDiscountRate());
        lCmdty.setCalcUnitPrice(lResultSet.getString("UnitPrice"));
        lCmdty.setCmdtyCompositionFlg(lResultSet.getString("cmdtycompositionflg"));
      }
    } catch (Exception ex) {
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lCmdty;
  }
  
  /**
   * 仕様指定品かどうか
   * @return 仕様指定品の場合、TRUEを返します。
   */
  public boolean isSpecification(){
    if (SIUtil.isNull(getCmdtyCompositionFlg())) setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_NORMAL);
    if (getCmdtyCompositionFlg().equalsIgnoreCase(SIConfig.CMDTY_COMPOSITION_SPECIFICATION)){
      return true;
    }
    return false;
  }
  
  /**
   * セット品かどうか
   * @return セット品の場合、TRUEを返します。
   */
  public boolean isSet(){
    if (SIUtil.isNull(getCmdtyCompositionFlg())) setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_NORMAL);
    if (getCmdtyCompositionFlg().equalsIgnoreCase(SIConfig.CMDTY_COMPOSITION_SELECTION_SET)
     || getCmdtyCompositionFlg().equalsIgnoreCase(SIConfig.CMDTY_COMPOSITION_VARIATION_SET)
     || getCmdtyCompositionFlg().equalsIgnoreCase(SIConfig.CMDTY_COMPOSITION_FIXED_SET))
    {
      return true;
    }
    return false;
  }
  
  /**
   * 構成商品かどうか
   * @return 構成商品の場合、TRUEを返します。
   */
  public boolean isCmdtyComposition(){
    if (isSpecification() || isSet()){
      return true;
    }
    return false;
  }

  /**
   * 新品定価を返します(税考慮あり）
   * @return
   */
  public String getNewFixedPriceIncTax() {
    String lTax = "0";
    try {
      if (getTaxFlg().equals("1")) {
        lTax = SIUtil.multi_LD(getNewFixedPrice(), SIUtil.div_DL("1", "100"));
      }
    } catch (SIFatalException e) {
      e.printStackTrace();
    }
    return SIUtil.add_LL(getNewFixedPrice(), lTax);
  }

 // EDBTG003-00 [不具合管理票-No23] 2013/03/14 nagayoshi add start
 public int getFixedSetAmount(Connection lConnection) {
   return SIBGUtil.getSetAmount(lConnection, this.getShopCode(), this.getCmdtyCode(), this.getIndividualCode());
 }
 // EDBTG003-00 [不具合管理票-No23] 2013/03/14 nagayoshi add end
 
 public boolean validateIndividualSearch(HttpServletRequest lRequest, Connection lConnection) {
   lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
   StringBuffer lSqlBuf = new StringBuffer();
   SICustomErrors errors = new SICustomErrors();
   try{
     if (SICheckValid.checkValid(errors, "検索用コード", this.getSearchIndividualCodeTxt(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE)) {
       lSqlBuf = new StringBuffer("SELECT individualCode FROM individualTbl WHERE individualCode=");
       lSqlBuf.append(SIDBUtil.SQL2Str(this.getSearchIndividualCodeTxt()));
       SICheckValid.checkExist(errors, lConnection, "在庫コード", lSqlBuf.toString());
     }
   }catch(Exception e){
     e.printStackTrace();
   }
   
   if (!errors.isEmpty()) {
     lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
   }
   return errors.isEmpty();
 }
 
 public void individualCopy(Connection lConnection) {
   Statement lStatement = null;
   ResultSet lResultSet = null;
   
   StringBuffer lSqlBuf = new StringBuffer();
   lSqlBuf.append("SELECT * FROM individualtbl WHERE individualcode = ").append(SIDBUtil.SQL2Str(this.getSearchIndividualCodeTxt()));
   try {
     lStatement = lConnection.createStatement();
     lResultSet = lStatement.executeQuery(lSqlBuf.toString());
     
     if (lResultSet.next()) {
       this.setIndividual1(lResultSet.getString("individualcode").substring(0, 2));
       this.setTenureofuse(lResultSet.getString("tenureofuse"));
       this.setGuaranteedTerm(lResultSet.getString("guaranteedTerm"));
       this.setCampaignPriceFlg(lResultSet.getString("campaignPriceFlg"));
       this.setCommodityExplanation(lResultSet.getString("commodityExplanation"));
       this.setSpCampaignFlg(lResultSet.getString("spcampaignflg"));
       this.setNomalPrice(lResultSet.getString("nomalprice"));
       this.setBgPrice(lResultSet.getString("bgPrice"));
       this.setBgPriceWithoutTax(lResultSet.getString("bgPriceWithoutTax"));
       this.setBgPriceDispFlg(lResultSet.getString("bgPriceDispFlg"));
       this.setFrontDispFlg(lResultSet.getString("frontDispFlg"));
       this.setInquiryFlg(lResultSet.getString("inquiryFlg"));
       this.setRemarks(lResultSet.getString("remarks"));
       this.setExpansionComment1Text(lResultSet.getString("expansionComment1Text"));
       this.setExpansionComment1Title(lResultSet.getString("expansionComment1Title"));
       this.setExpansionComment2Text(lResultSet.getString("expansionComment2Text"));
       this.setExpansionComment2Title(lResultSet.getString("expansionComment2Title"));
       this.setExpansionComment3Text(lResultSet.getString("expansionComment3Text"));
       this.setExpansionComment3Title(lResultSet.getString("expansionComment3Title"));
       this.setExpansionComment4Text(lResultSet.getString("expansionComment4Text"));
       this.setExpansionComment4Title(lResultSet.getString("expansionComment4Title"));
       this.setExpansionComment5Text(lResultSet.getString("expansionComment5Text"));
       this.setExpansionComment5Title(lResultSet.getString("expansionComment5Title"));
       this.setCatchcopy(lResultSet.getString("catchcopy"));
       this.setSpecification(lResultSet.getString("specification"));
       this.setActiveingredient(lResultSet.getString("activeingredient"));
       this.setComponent(lResultSet.getString("component"));
       this.setPrecaution(lResultSet.getString("precaution"));
       this.setOthernotice(lResultSet.getString("othernotice"));
     }
   } catch (Exception e) {
     e.printStackTrace();
   } finally {
     SIDBUtil.close(lStatement, lResultSet);
   }
 }
}