/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.basic;

import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashMap;

import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SIBGUtil;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id: SICartCmdty.java,v 1.0 2003/12/05 Exp $
 * @author  Jinwang Chen
 * <br>Description:
 * <p>History</p>
 * <p>Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason</p>p;&nbsp;===========================<br>
 * Jinwang Chen   2003/12/05 13:30:27  Original
 */
public class SICartCmdty extends SICmdty{
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  //規格1
  private String stndrdCode1="";
  
  //エレメント1
  private String elementCode1="";
  
  //規格2
  private String stndrdCode2="";
  
  //エレメント2
  private String elementCode2="";
  
  //規格名1
  private String stndrdName1="";
  
  //エレメント名1
  private String elementName1="";
  
  //規格名2
  private String stndrdName2="";
  
  //エレメント名2
  private String elementName2="";
  
  //在庫コード
  private String individualCode="";
  
  //ショップギフトフラグ
  private String shopGiftFlg="0";
  
  // EDBTG003-00 nagayoshi add start
  /************* 受注時のセット品セット番号 ***************/
  
  // 構成数
  private String setCompositionCount = "";
  
  // 構成数(添付品で使用)
  private String setCount = "";
  
  // 明細区分
  private String setDetailFlg = "";
  
  // セット番号
  private String setCode = "0";
  
  // セット商品コード
  private String setCmdtyCode = "";
  
  // セット在庫コード
  private String setIndividualCode = "";
  
  // セット明細番号
  private String setDetailCode = "";
  
  /************* 受注時のセット品セット番号 ***************/
  
  /************* 受注時のセット品のヘッダ情報ここから ***************/
  
  // セット値引金額
  private String setDiscountPrice = "0";
  
  // セット品最終単価
  private String setFinalUnitPrice = "0";
  
  // セット品Key情報
  private String cmdtyCompositionKeySet = "";
  
  // セット構成品情報Map
  private LinkedHashMap cartsCmdtyCompositionDetailMap = new LinkedHashMap();
  
  /************* 受注時のセット品のヘッダ情報ここまで ***************/
  
  // EDBTG003-00 nagayoshi add end
  // EDBTG003-00 elecs-matsushima add start
  // 受注明細項番(受注修正引き回し用）
  private String detailCode = "";
  // DBセット番号(受注修正引き回し用）
  private String oldSetCode = "";
  // DB引当先変更情報(受注修正引き回し用）
  private LinkedHashMap allocationMap = new LinkedHashMap();
  //EDBTG003-00 elecs-matsushima add end
  
  public SICartCmdty(){
  }
  
  /**
   * <b>SICartCmdty</b>
   * コンストラクタ
   * @param  shopcode ショップコード
   * @param  cmdtyCode 商品コード
   * @return
   * @throws なし
   */
  public SICartCmdty(String lShopCode,String lCmdtyCode){
    super(lShopCode,lCmdtyCode);
  }
  
  public SICartCmdty(String lShopCode,String lCmdtyCode,String lStndrdCode1,String lElementCode1,String lStndrdCode2,String lElementCode2){
    setShopCode(lShopCode);
    setCmdtyCode(lCmdtyCode);
    setStndrdCode1(lStndrdCode1);
    setElementCode1(lElementCode1);
    setStndrdCode2(lStndrdCode2);
    setElementCode2(lElementCode2);
  }
  
  public SICartCmdty(String lShopCode,String lCmdtyCode,String lIndividualCode,String lStndrdCode1,String lElementCode1,String lStndrdCode2,String lElementCode2){
    setShopCode(lShopCode);
    setCmdtyCode(lCmdtyCode);
    setIndividualCode(lIndividualCode);
    setStndrdCode1(lStndrdCode1);
    setElementCode1(lElementCode1);
    setStndrdCode2(lStndrdCode2);
    setElementCode2(lElementCode2);
  }
  
  //setter of 規格分類1コード
  public void setStndrdCode1(String lStndrdCode1){
    if (SIUtil.isNull(lStndrdCode1)) lStndrdCode1="";
    this.stndrdCode1=SIUtil.changeTo(lStndrdCode1.trim(),this.encode);
  }
  
  //setter of 規格1コード
  public void setElementCode1(String lElementCode1){
    if (SIUtil.isNull(lElementCode1)) lElementCode1="";
    this.elementCode1=SIUtil.changeTo(lElementCode1.trim(),this.encode);
  }
  
  //setter of 規格分類2コード
  public void setStndrdCode2(String lStndrdCode2){
    if (SIUtil.isNull(lStndrdCode2)) lStndrdCode2="";
    this.stndrdCode2=SIUtil.changeTo(lStndrdCode2.trim(),this.encode);
  }
  
  //setter of 規格2コード
  public void setElementCode2(String lElementCode2){
    if (SIUtil.isNull(lElementCode2)) lElementCode2="";
    this.elementCode2=SIUtil.changeTo(lElementCode2.trim(),this.encode);
  }
  
  //setter of 規格分類1
  public void setStndrdName1(String lStndrdName1){
    if (SIUtil.isNull(lStndrdName1)) lStndrdName1="";
    this.stndrdName1=SIUtil.changeTo(lStndrdName1.trim(),this.encode);
  }
  
  //setter of 規格1
  public void setElementName1(String lElementName1){
    if (SIUtil.isNull(lElementName1)) lElementName1="";
    this.elementName1=SIUtil.changeTo(lElementName1.trim(),this.encode);
  }
  
  //setter of 規格分類2
  public void setStndrdName2(String lStndrdName2){
    if (SIUtil.isNull(lStndrdName2)) lStndrdName2="";
    this.stndrdName2=SIUtil.changeTo(lStndrdName2.trim(),this.encode);
  }
  
  //setter of 規格2
  public void setElementName2(String lElementName2){
    if (SIUtil.isNull(lElementName2)) lElementName2="";
    this.elementName2=SIUtil.changeTo(lElementName2.trim(),this.encode);
  }
  
  //setter of ショップギフトフラグ
  public void setShopGiftFlg(String lShopGiftFlg){
    if (SIUtil.isNull(lShopGiftFlg)) lShopGiftFlg="0";
    this.shopGiftFlg=SIUtil.changeTo(lShopGiftFlg.trim(),this.encode);
  }
  
  // EDBTG003-00 nagayoshi add start
  
  // setter of 構成数
  public void setSetCompositionCount(String lSetCompositionCount) {
    this.setCompositionCount = lSetCompositionCount;
  }
  
  // setter of セット数(添付品で使用)
  public void setSetCount(String lSetCount) {
    this.setCount = lSetCount;
  }
  
  // setter of 明細区分
  public void setSetDetailFlg(String lSetDetailFlg) {
    this.setDetailFlg = lSetDetailFlg;
  }
  
  // setter of セット番号
  public String setSetCode(String lSetCode) {
    if (SIUtil.isNull(lSetCode)) lSetCode="0";
    return this.setCode = lSetCode;
  }
  
  // setter of セット商品コード
  public void setSetCmdtyCode(String lSetCmdtyCode) {
    this.setCmdtyCode = lSetCmdtyCode;
  }
  
  // setter of セット在庫コード
  public void setSetIndividualCode(String lSetIndividualCode) {
    this.setIndividualCode = lSetIndividualCode;
  }
  
  // setter of セット明細番号
  public void setSetDetailCode(String lSetDetailCode) {
    this.setDetailCode = lSetDetailCode;
  }
  
  //setter of セット品値引金額
  public void setSetDiscountPrice(String lSetDiscountPrice) {
    if (SIUtil.isNull(lSetDiscountPrice)) lSetDiscountPrice = "0";
    this.setDiscountPrice = lSetDiscountPrice;
  }
  
  // setter of セット品最終単価
  public String setSetFinalUnitPrice(String lSetFinalUnitPrice) {
    if (SIUtil.isNull(lSetFinalUnitPrice)) lSetFinalUnitPrice="0";
    return this.setFinalUnitPrice = lSetFinalUnitPrice;
  }
  
  //setter of カート内セット品情報Key
  public void setCmdtyCompositionKeySet(String lCmdtyCompositionKeySet) {
    this.cmdtyCompositionKeySet=SIUtil.changeTo(lCmdtyCompositionKeySet.trim(),this.encode);
  }
  
  //setter of カート内セット構成品情報
  public void setCartsCmdtyCompositionDetailMap(LinkedHashMap lCartsCmdtyCompositionDetailMap) {
    this.cartsCmdtyCompositionDetailMap = lCartsCmdtyCompositionDetailMap;
  }
  
  // EDBTG003-00 nagayoshi add end
  
  //getter of 規格分類1コード
  public String getStndrdCode1(){
    return this.stndrdCode1;
  }
  
  //getter of 規格1コード
  public String getElementCode1(){
    return this.elementCode1;
  }
  
  //getter of 規格分類2コード
  public String getStndrdCode2(){
    return this.stndrdCode2;
  }
  
  //getter of 規格2コード
  public String getElementCode2(){
    return this.elementCode2;
  }
  
  //getter of 規格分類1
  public String getStndrdName1(){
    return this.stndrdName1;
  }
  
  //getter of 規格1
  public String getElementName1(){
    return this.elementName1;
  }
  
  //getter of 規格分類2
  public String getStndrdName2(){
    return this.stndrdName2;
  }
  
  //getter of 規格2
  public String getElementName2(){
    return this.elementName2;
  }
  
  //getter of ショップギフトフラグ
  public String getShopGiftFlg(){
    return this.shopGiftFlg;
  }
  
  // EDBTG003-00 nagayoshi add start
  
  // getter of 構成数
  public String getSetCompositionCount() {
    return this.setCompositionCount;
  }
  
  // getter of セット数(添付品で使用)
  public String getSetCount() {
    return this.setCount;
  }
  
  // getter of 明細区分
  public String getSetDetailFlg() {
    return setDetailFlg;
  }
  
  // getter of セット番号
  public String getSetCode() {
    return this.setCode;
  }
  
  // getter of セット商品コード
  public String getSetCmdtyCode() {
    return setCmdtyCode;
  }
  
  // getter of セット在庫コード
  public String getSetIndividualCode() {
    return setIndividualCode;
  }
  
  // getter of セット明細番号
  public String getSetDetailCode() {
    return setDetailCode;
  }
  
  // getter of セット品値引金額
  public String getSetDiscountPrice() {
    return this.setDiscountPrice;
  }
  
  // getter of セット品最終単価
  public String getSetFinalUnitPrice() {
    return this.setFinalUnitPrice;
  }
  
  // getter of カート内セット品情報Key
  public String getCmdtyCompositionKeySet() {
    return this.cmdtyCompositionKeySet;
  }
  
  // getter of カート内セット品構成情報
  public LinkedHashMap getCartsCmdtyCompositionDetailMap() {
    return this.cartsCmdtyCompositionDetailMap;
  }
  
  // EDBTG003-00 nagayoshi add end
  //EDBTG003-00 elecs-matsushima add start
  public String getDetailCode() {
    return this.detailCode;
  }
  
  public void setDetailCode(String detailCode) {
    if (SIUtil.isNull(detailCode)) detailCode = "";
    this.detailCode = detailCode;
  }
  
  public String getOldSetCode() {
    return this.oldSetCode;
  }
  
  public void setOldSetCode(String oldSetCode) {
    if (SIUtil.isNull(oldSetCode)) oldSetCode = "";
    this.oldSetCode = oldSetCode;
  }
  //EDBTG003-00 elecs-matsushima add end
  /**
   * <b>getCartCmdtyName</b>
   * 商品名にカラー・区分を加えた値を返します
   * @param  なし
   * @return String 商品名＋カラー・区分
   * @throws なし
   */
  public String getCartCmdtyName(){
    String lColorName = getColorName();
    int lUsedNewFlg = getUsedNewFlg();
    String lUsedNewName = "";
    // EDBTG003-00 nagayoshi add start
    String lSetDetailName = "";
    String lSetDetailFlg = this.getSetDetailFlg();
    // EDBTG003-00 nagayoshi add end
    
    if (lUsedNewFlg == 1 || lUsedNewFlg == 6 || lUsedNewFlg == 7) {// 新品
      lUsedNewName = "新品";
    } else if (lUsedNewFlg == 2 || lUsedNewFlg == 4) {// 新古OUTLET
      lUsedNewName = "新古OUTLET";
    } else if (lUsedNewFlg == 3) {// BG認定中古
      lUsedNewName = "BG認定中古";
    } else {// 中古
      lUsedNewName = "中古";
    }
    
    // EDBTG003-00 nagayoshi add start
    if (lSetDetailFlg.equals(SIConfig.SET_DETAIL_FLG_APPENDED)) {
      if (SIUtil.isNotNull(lUsedNewName)) {
        lSetDetailName = "・";
      }
      lSetDetailName = lSetDetailName + "添付品";
    }
    // EDBTG003-00 nagayoshi add end
    
    String str = "";
    if (SIUtil.isNotNull(lColorName)) {
      // EDBTG003-00 nagayoshi mod start
//      str = "(" + lColorName + "・" + lUsedNewName + ")";
      str = "(" + lColorName + "・" + lUsedNewName + lSetDetailName + ")";
      // EDBTG003-00 nagayoshi mod end
    } else {
      // EDBTG003-00 nagayoshi mod start
//      str = "(" + lUsedNewName + ")";
      str = "(" + lUsedNewName + lSetDetailName + ")";
      // EDBTG003-00 nagayoshi mod end
    }
    
    return getCmdtyName() + str;
  }
  
  /**
   * <b>getMakerStockAmount</b>
   * 物流倉庫A在庫を取得します
   * @param なし
   * @return String 物流倉庫A在庫数
   * @throws SQLException
   */ 
  public String getMakerStockAmount(Connection lConnection){
    if (SIUtil.isNotNull(this.getAmountFlg())){
      if(this.getAmountFlg().equals("0")) return "無制限";
    }
    
    String makerStockAmount ="";
    ResultSet lResultSet=null;
    Statement lStatement=null;
    
    StringBuffer lSqlBuf=new StringBuffer();
    lSqlBuf.append("SELECT Amount FROM StoreStockTbl WHERE BranchCode ='999' ");
    lSqlBuf.append("AND CmdtyCode =").append(SIDBUtil.SQL2Str(getCmdtyCode()));
    lSqlBuf.append(" AND IndividualCode =").append(SIDBUtil.SQL2Str(getIndividualCode()));
    
    try{
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      lResultSet.next();
      makerStockAmount = lResultSet.getString("Amount");
      return makerStockAmount;
      
    }catch(Exception e){
      return "0";
    }
  }
  
  /**
   * <b>getCmdtyFullName</b>
   * 商品名に色と新品･中古区分を加えた値を返します
   * @param  なし
   * @return String 商品名＋色名＋新品･中古区分
   * @throws SQLException
   */
  public String getCmdtyFullName(Connection lConnection){
    String lCmdtyCode = this.getCmdtyCode();
    String lIndividualCode = this.getIndividualCode();
    try{
      String cmdtyFullName = SIBGUtil.getCmdtyFullName(lConnection,lCmdtyCode,lIndividualCode);
      return cmdtyFullName;
    }catch(Exception e){
      return getCmdtyName();
    }
  }
  
  /**
   * <b>getCartCmdtyCode</b>
   * 商品コード、規格コード、エレメントコードをトークンでつなげます
   * @param  なし
   * @return String
   * @throws なし
   */
  public String getCartCmdtyCode(){
    return getCmdtyCode()+SIConfig.SIWEBSHOPPING_TOKEN+
    getIndividualCode()+SIConfig.SIWEBSHOPPING_TOKEN+
    getStndrdCode1()+SIConfig.SIWEBSHOPPING_TOKEN+
    getStndrdCode2()+SIConfig.SIWEBSHOPPING_TOKEN+
    getElementCode1()+SIConfig.SIWEBSHOPPING_TOKEN+
    getElementCode2();
  }
  /**
   * <b>getCompCode</b>
   * ショップコード、商品コード、規格コード、エレメントコードをトークンでつなげます
   * @param  なし
   * @return String
   * @throws なし
   */
  public String getCompCode(){
    String lRes=getShopCode()+SIConfig.SIWEBSHOPPING_TOKEN+
    getCmdtyCode()+SIConfig.SIWEBSHOPPING_TOKEN+
    getIndividualCode()+SIConfig.SIWEBSHOPPING_TOKEN+
    getStndrdCode1()+SIConfig.SIWEBSHOPPING_TOKEN+
    getElementCode1()+SIConfig.SIWEBSHOPPING_TOKEN+
    getStndrdCode2()+SIConfig.SIWEBSHOPPING_TOKEN+
    // EDBTG003-00 nagayoshi mod start
//    getElementCode2();
    getElementCode2()+SIConfig.SIWEBSHOPPING_TOKEN+
    getSetCode();
    // EDBTG003-00 nagayoshi mod end
    log.debug("getCompCode():lRes="+lRes);
    return lRes;
  }
  
  /**
   * <b>reset</b>
   * SQLから商品情報を取得しセッターに格納
   * @param Connection
   * @param mode (true:Front false:back)
   * @return boolean 結果が存在するかどうか
   * @throws なし
   */
  public boolean reset(Connection lConnection ,boolean mode){
    return reset(lConnection ,mode ,"");
  }
  
  public boolean reset(Connection lConnection ,boolean mode ,String branch){
    boolean lResult=false;
    if (SIUtil.isNull(this.getCmdtyCode())) return lResult;
    
    ResultSet lResultSet=null;
    Statement lStatement=null;
    
    StringBuffer lSqlBuf=new StringBuffer();
    /*
    lSqlBuf.append("SELECT aa.*,bb.FrontShopName,bb.DiscountFromDate,bb.DiscountToDate,bb.DiscountRate,bb.giftflg,COALESCE((SELECT TaxRate FROM TaxVW),0) AS TaxRate,cc.ColorName,");
    lSqlBuf.append("(SELECT StndrdName FROM StndrdNameMTbl WHERE ShopCode=aa.ShopCode AND StndrdCode=").append(SIDBUtil.SQL2Str(getStndrdCode1(),") AS StndrdName1,"));
    lSqlBuf.append("(SELECT StndrdName FROM StndrdNameMTbl WHERE ShopCode=aa.ShopCode AND StndrdCode=").append(SIDBUtil.SQL2Str(getStndrdCode2(),") AS StndrdName2,"));
    lSqlBuf.append("(SELECT ElementName FROM StndrdContentMTbl WHERE ShopCode=aa.ShopCode AND StndrdCode=").append(SIDBUtil.SQL2Str(getStndrdCode1()));
    lSqlBuf.append(" AND ElementCode=").append(SIDBUtil.SQL2Str(getElementCode1())).append(") AS ElementName1,");
    lSqlBuf.append("(SELECT ElementName FROM StndrdContentMTbl WHERE ShopCode=aa.ShopCode AND StndrdCode=").append(SIDBUtil.SQL2Str(getStndrdCode2()));
    lSqlBuf.append(" AND ElementCode=").append(SIDBUtil.SQL2Str(getElementCode2())).append(") AS ElementName2, ");
    lSqlBuf.append("(aa.amount-rakuten.amount) AS amountR ");//rakutenAppend
    lSqlBuf.append("FROM CmdtyVW AS aa,ShopVW AS bb,ColorTbl cc ");
    lSqlBuf.append(" ,(SELECT individualcode,amount FROM storestocktbl WHERE branchcode='19') rakuten ");//rakutenAppend
    lSqlBuf.append("WHERE aa.ShopCode=bb.MallShopCode ");
    lSqlBuf.append("AND aa.ColorCode=cc.ColorCode ");
    lSqlBuf.append("AND aa.individualcode=rakuten.individualcode ");//rakutenAppend
    lSqlBuf.append("AND aa.ShopCode=? ");
    lSqlBuf.append("AND aa.CmdtyCode=? ");
    lSqlBuf.append("AND aa.IndividualCode=? ");
    if (mode){
      lSqlBuf.append(" AND bb.Status='1' ");
    }
    if (mode&&SIDBMultiConf.SIDB_CURRENT_INX==SIDBMultiConf.SIDB_POSTGRESQL_INX){
      lSqlBuf.append(" AND (aa.SellFromDate IS NULL OR aa.SellFromDate <= CURRENT_DATE) ");
      lSqlBuf.append(" AND (aa.SellToDate IS NULL OR aa.SellToDate >= CURRENT_DATE) ");
    }else if (mode){
      lSqlBuf.append(" AND (aa.SellFromDate IS NULL OR aa.SellFromDate <= TO_DATE(sysdate)) ");
      lSqlBuf.append(" AND (aa.SellToDate IS NULL OR aa.SellToDate >= TO_DATE(sysdate)) ");
    }
    */
    lSqlBuf.append("SELECT c.shopcode,c.cmdtycode,c.cmdtyname,c.cmdtysize,c.deliverytypecode,c.taxflg ");
    // EDBTG003-00 nagayoshi add start
    lSqlBuf.append(",c.cmdtyCompositionFlg ");
    // EDBTG003-00 nagayoshi add end
    lSqlBuf.append(",s.frontshopname,s.giftflg,s.discountfromdate,s.discounttodate,s.discountrate ");
    lSqlBuf.append(",i.*,d.deliverytypename,o.colorname,COALESCE((SELECT TaxRate FROM TaxVW),0) AS TaxRate ");
    lSqlBuf.append(",CASE WHEN l.amount IS NOT NULL AND l.amount<t.amountR THEN l.amount ELSE t.amountR END AS amountR ");
    lSqlBuf.append("FROM cmdtymtbl c,individualtbl i,shopvw s,deliverytypemtbl d,colortbl o ");
    lSqlBuf.append(",(SELECT individualcode,amount-bgpamount AS amountR FROM cmdtyunittbl) t ");
    lSqlBuf.append("LEFT OUTER JOIN saleslimittbl l ON t.individualcode=l.individualcode ");
    lSqlBuf.append("WHERE c.shopcode=s.mallshopcode AND c.colorcode=o.colorcode ");
    lSqlBuf.append("AND c.cmdtycode=i.cmdtycode AND c.deliverytypecode=d.deliverytypecode ");
    lSqlBuf.append("AND i.individualcode=t.individualcode ");
    lSqlBuf.append("AND c.shopcode=").append(SIDBUtil.SQL2Str(getShopCode()," "));
    lSqlBuf.append("AND c.cmdtycode=").append(SIDBUtil.SQL2Str(getCmdtyCode()," "));
    lSqlBuf.append("AND i.individualcode=").append(SIDBUtil.SQL2Str(getIndividualCode()," "));
    if (mode){
      lSqlBuf.append(" AND s.status='1' ");
    }
    if (mode){
      lSqlBuf.append(" AND (i.SellFromDate IS NULL OR i.SellFromDate <= CURRENT_DATE) ");
      lSqlBuf.append(" AND (i.SellToDate IS NULL OR i.SellToDate >= CURRENT_DATE) ");
    }
    
    log.debug("reset:lSqlBuf="+lSqlBuf.toString());
    try {
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());//実行
      
      if (lResultSet.next()){
        this.setEncode(SIConfig.SIENCODE_NONE);
        this.setShopCode(lResultSet.getString("shopCode"));//ショップコード
        this.setCmdtyCode(lResultSet.getString("cmdtyCode"));//商品コード
        this.setIndividualCode(lResultSet.getString("individualCode"));//在庫コード
        this.setFrontShopName(lResultSet.getString("frontShopName"));//ショップ名
        this.setCmdtyName(lResultSet.getString("cmdtyName"));//商品名
//        this.setStockUnitPrice(lResultSet.getString("stockUnitPrice"));//仕入れ価格
        this.setStockUnitPrice(lResultSet.getString("purchaseprice"));//仕入れ価格
//        this.setUnitPrice(lResultSet.getString("unitPrice"));//価格
        this.setUnitPrice(lResultSet.getString("bgprice"));//価格
        this.setUnitPriceWithoutTax(lResultSet.getString("bgpricewithouttax"));//価格
//        this.setSalesUnitPrice(lResultSet.getString("SalesUnitPrice"));//特別価格
        this.setSalesUnitPrice(lResultSet.getString("specialprice"));//特別価格
        this.setTaxFlg(lResultSet.getString("taxFlg"));//税区分
        this.setMemberDiscountFlg(lResultSet.getString("memberDiscountFlg"));//会員値引フラグ
        this.setDiscountFlg(lResultSet.getString("discountflg"));//一括値引フラグ
        this.setSalesDiscountFlg(lResultSet.getString("salesdiscountflg"));//特価値引フラグ
        this.setCmdtySize(lResultSet.getString("cmdtySize"));//サイズ
//        this.setCalcUnitPrice(lResultSet.getString("calcUnitPrice"));//勘定価格
        this.setCalcUnitPrice(lResultSet.getString("bgprice"));//勘定価格
        this.setShopGiftFlg(lResultSet.getString("giftflg"));//ショップのギフト設定
        this.setWrappingFlg(lResultSet.getString("wrappingFlg"));//ラッピングフラグ
        this.setTaxRate(lResultSet.getString("taxRate"));//税率
        this.setDiscountFromDate(SIDBUtil.getDate(lResultSet.getTimestamp("discountfromdate")));//値引き期間From
        this.setDiscountToDate(SIDBUtil.getDate(lResultSet.getTimestamp("discounttodate")));//値引き期間To
        this.setDiscountRate(lResultSet.getString("discountRate"));//値引率
//        this.setStndrdName1(lResultSet.getString("stndrdName1"));//規格名1
//        this.setElementName1(lResultSet.getString("elementName1"));//エレメント名1
//        this.setStndrdName2(lResultSet.getString("stndrdName2"));//規格名2
//        this.setElementName2(lResultSet.getString("elementName2"));//エレメント名2
        this.setDeliveryTypeCode(lResultSet.getString("deliveryTypeCode"));//配送種別コード
        this.setDeliveryTypeName(lResultSet.getString("deliveryTypeName"));//配送種別名称
        this.setNoStockFlg(lResultSet.getString("noStockFlg"));//在庫無販売
        this.setAmountFlg(lResultSet.getString("amountFlg"));//商品数量管理フラグ
        this.setRsrvAmount(lResultSet.getString("rsrvAmount"));//予約可能数量
        this.setConsignGoodsFee(lResultSet.getString("consignGoodsFee"));//委託手数料
        this.setBGPriceDispFlg(lResultSet.getString("BGPriceDispFlg"));//BG卸価フロント表示フラグ
        this.setColorName(lResultSet.getString("colorName"));//カラー
        this.setUsedNewFlg(lResultSet.getInt("usedNewFlg"));//中古新品区分
        this.setArrivalScheduleMsg(lResultSet.getString("arrivalScheduleMsg"));
        // EDBTG003-00 nagayoshi add start
        this.setCmdtyCompositionFlg(lResultSet.getString("cmdtyCompositionFlg"));
        // EDBTG003-00 nagayoshi add end
        /*
        if (SIUtil.isNotNull(getElementCode1())||SIUtil.isNotNull(getElementCode2())){
          SICmdtyStndrd lCmdtyStndrd=new SICmdtyStndrd(getShopCode(),getCmdtyCode());
          try {
            lCmdtyStndrd.check(lConnection, getElementCode1(), getElementCode2());
          } catch (SIDBAccessException e) {
            log.debug(e);
            e.printStackTrace();
          }
          this.setAmount(lCmdtyStndrd.getAmount());//規格数量
        } else 
        */
        if(SIUtil.isNull(branch)) {
          this.setAmount(lResultSet.getString("AmountR"));//数量
        } else {
          StringBuffer str = new StringBuffer();
          str.append("SELECT CASE WHEN l.amount IS NOT NULL AND l.amount<s.amount THEN l.amount ELSE s.amount END ");
          str.append("FROM storeStockTbl s LEFT OUTER JOIN saleslimittbl l ON s.individualcode=l.individualcode ");
          str.append("WHERE s.cmdtyCode = ").append(SIDBUtil.SQL2Str(getCmdtyCode()," "));
          str.append("AND s.individualCode = ").append(SIDBUtil.SQL2Str(getIndividualCode()," "));
          str.append("AND s.branchCode = ").append(SIDBUtil.SQL2Str(branch));
          try {
            this.setAmount(SIDBUtil.getFirstData(lConnection, str.toString()));
          } catch (SIDBAccessException e) {
            e.printStackTrace();
            this.setAmount("0");
          }
        }
        lResult=!mode||setCtgryList(lConnection);
      }else {
        log.error("not find record for cmdtyCode="+getCmdtyCode());
        lResult=false;
      }
    }catch(SQLException sqle){
      sqle.printStackTrace();
    }finally{
      if (lStatement!=null)try{lStatement.close();}catch(SQLException sqle){sqle.printStackTrace();}
      if (lResultSet!=null)try{lResultSet.close();}catch(SQLException sqle){sqle.printStackTrace();}
    }
    return lResult;
  }
  
  /**
   * <b>reset</b>
   * SQLから商品情報を取得しセッターに格納
   * @param Connection
   * @return boolean 結果が存在するかどうか
   * @throws なし
   */
  public boolean reset(Connection lConnection){
    return reset(lConnection,false);
  }
  
  /**
   * <b>getAmountWithAllocation</b>
   * 引当分を含む在庫数量を返す
   * @param Connection コネクション
   * @param String 受注番号
   * @return String 在庫数量
   * @throws なし
   */
  public String getAmountWithAllocation(Connection lConnection, String lOrderCode){
    String count="";
    if(SIUtil.isNotNull(lOrderCode)){
      String sql = "SELECT sum(orderallocationnumber) FROM OrderAllocationInfoTbl WHERE ordercode='"
        +lOrderCode+"' AND cmdtycode='"+this.getCmdtyCode()+"' AND individualcode='"+this.getIndividualCode()+"'";
      // EDBTG003-00 elecs-matsushima add start
      // EDBTG003-00 [不具合管理票-No28] 2013/03/15 nagayoshi del start
      /*
      if (SIUtil.isNull(this.getDetailCode())){
        sql += " AND detailcode is null ";
      } else {
        sql += " AND detailcode='" + SIDBUtil.SQL2Str(this.getDetailCode(), " ");
      }
      */
      // EDBTG003-00 [不具合管理票-No28] 2013/03/15 nagayoshi del end
      // EDBTG003-00 elecs-matsushima add end
      try{
        count=SIDBUtil.getFirstData(lConnection,sql);
      }catch(Exception e){
        e.printStackTrace();
      }
    }
    if(SIUtil.isNull(count)) count="0";
    return String.valueOf(Integer.parseInt(count)+Integer.parseInt(this.getAmount()));
  }
  //EDBTG003-00 elecs-matsushima add start
  public LinkedHashMap getAllocationMap() {
    return this.allocationMap;
  }
  
  public void setAllocationMap(LinkedHashMap allocationMap) {
    if (allocationMap==null) allocationMap = new LinkedHashMap();
    this.allocationMap = allocationMap;
  }
  //EDBTG003-00 elecs-matsushima add end
}