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

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import jp.co.sint.beans.mallmgr.UIOrderBasic;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIInsertRec;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id: SIOrderDelivery.java,v 1.0 2003/11/06 Exp $
 * @author  Jinwang Chen
* <br>Description:
 * <p>History</p>
 * <p>Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason</p>
 *  ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * Jinwang Chen   2003/11/06 17:04:04  Original
 */
public class SIOrderSetCmdty extends UIOrderBasic{

  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  public SIOrderSetCmdty(){
  }

  // 受注番号
  private String orderCode = "";

  // 受注番号枝番
  private String orderBranchCode = "";

  // セット番号
  private String setCode = "";

  // セット商品コード
  private String setCmdtyCode = "";

  // セット在庫コード
  private String setIndividualCode = "";

  // セット商品名
  private String cmdtyName = "";

  // セット値引
  private String setDiscount = "";

  // セット数量
  private String setAmount = "";

  public String getOrderCode() {
    return orderCode;
  }

  public void setOrderCode(String orderCode) {
    this.orderCode = orderCode;
  }

  public String getOrderBranchCode() {
    return orderBranchCode;
  }

  public void setOrderBranchCode(String orderBranchCode) {
    this.orderBranchCode = orderBranchCode;
  }

  public String getSetCode() {
    return setCode;
  }

  public void setSetCode(String setCode) {
    this.setCode = setCode;
  }

  public String getSetCmdtyCode() {
    return setCmdtyCode;
  }

  public void setSetCmdtyCode(String setCmdtyCode) {
    this.setCmdtyCode = setCmdtyCode;
  }

  public String getSetIndividualCode() {
    return setIndividualCode;
  }

  public void setSetIndividualCode(String setIndividualCode) {
    this.setIndividualCode = setIndividualCode;
  }

  public String getCmdtyName() {
    return cmdtyName;
  }

  public void setCmdtyName(String cmdtyName) {
    this.cmdtyName = cmdtyName;
  }

  public String getSetDiscount() {
    return setDiscount;
  }

  public void setSetDiscount(String setDiscount) {
    this.setDiscount = setDiscount;
  }

  public String getSetAmount() {
    return setAmount;
  }

  public void setSetAmount(String setAmount) {
    this.setAmount = setAmount;
  }

  public void setInfo(SICart lCart, int lSetCount) {
    // セット番号
//    this.setSetCode(lCart.getCartCmdty().getSetCode());
    this.setSetCode(String.valueOf(lSetCount));
    // セット商品コード
    this.setSetCmdtyCode(lCart.getCartCmdty().getCmdtyCode());
    // セット在庫コード
    this.setSetIndividualCode(lCart.getCartCmdty().getIndividualCode());
    // セット商品名
    this.setCmdtyName(lCart.getCartCmdty().getCmdtyName());
    // セット値引
    this.setSetDiscount(lCart.getCmdty().getSetDiscountPrice(lCart.getCartCmdty().getSetDiscountPrice()));
    // セット数量
    this.setSetAmount(lCart.getAmount());
  }

  public Collection getOrderSetCmdty(HttpServletRequest lRequest) {
    // 返却変数
    Collection rec = new ArrayList();
    // セッションの取得
    HttpSession session=lRequest.getSession(true);
    // 受注明細情報の取得
    LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    // 受注セット品セッションの取得
    LinkedHashMap lOrderSetCmdty = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
    // 受注明細情報よりKeyセット生成
    Map keyMap = new HashMap();
    Iterator lDetailIta=detailMap.values().iterator();
    while(lDetailIta.hasNext()) {
      SIOrderDetail lOrderDetail = (SIOrderDetail)lDetailIta.next();
      // Key生成
      String keySet = lOrderDetail.getSetCode() + SIConfig.SIWEBSHOPPING_TOKEN
                    + lOrderDetail.getSetCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                    + lOrderDetail.getSetIndividualCode();
      if (!keyMap.containsKey(keySet)) {
        // Keyが存在しない場合(KeyMapへ追加)
        keyMap.put(keySet, keySet);
      }
    }
    // 受注セット品コレクションの生成
    Iterator ite = keyMap.values().iterator();
    while(ite.hasNext()) {
      // Key取得
      String key = (String)ite.next();
      // 受注セット品1件分の情報を取得
      SIOrderSetCmdty lSet = (SIOrderSetCmdty)lOrderSetCmdty.get(key);
      if (lSet != null) {
        // 受注セット商品情報1件取得し、返却コレクションへ追加
        rec.add(lSet);
      }
    }
    return rec;
  }

// EDBTG003-00 nagayoshi add start
  public String getSetDisCountPrice(HttpServletRequest lRequest) {
    // セット値引算出金額
    String calcSetDisCountPrice = "0";
    // セッションの取得
    HttpSession session=lRequest.getSession(true);
    // 受注セット品情報の取得
    LinkedHashMap cartSetCmdty = (LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
    // Iterator設定
    Iterator ite = cartSetCmdty.values().iterator();
    // 値引計算
    while (ite.hasNext()) {
      // セット情報1件取得
      SIOrderSetCmdty orderSetCmdty = (SIOrderSetCmdty)ite.next();
      // セット値引金額計算
      calcSetDisCountPrice = SIUtil.add_LL(calcSetDisCountPrice, SIUtil.multi_LL(orderSetCmdty.getSetDiscount(), orderSetCmdty.getSetAmount()));
    }
    return calcSetDisCountPrice;
  }
// EDBTG003-00 nagayoshi add end
}