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

import java.sql.Connection;
import java.util.HashMap;

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

import jp.co.sint.basic.SIFrontBasic;
import jp.co.sint.basic.SIOrderDetail;
import jp.co.sint.basic.SIOrderDetailPK;
import jp.co.sint.basic.SIWrapping;
import jp.co.sint.config.SIConfig;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @version $Id: UIWrapping.java,v 1.0 2003/11/20 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/20 16:39:43  Original
 */
public class UIWrapping extends SIFrontBasic{

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

  //ショップコード
  private String shopCode="";

  //商品コード
  private String cmdtyCode="";

  //規格1
  private String stndrdCode1="";

  //エレメント1
  private String elementCode1="";

  //規格2
  private String stndrdCode2="";

  //エレメント2
  private String elementCode2="";

  //アドレス帳コード
  private String addressCode="";

  //選択
  private String wrappingCodeRdo="";

  private boolean closeWindow=false;

  public void setCloseWindow(boolean lCloseWindow){
    this.closeWindow =lCloseWindow;
  }

  //setter of ショップコード
  public void setShopCode(String lShopCode){
    if (SIUtil.isNull(lShopCode)) lShopCode="";
    this.shopCode=SIUtil.changeTo(lShopCode.trim(),this.encode);
  }

  //setter of 商品コード
  public void setCmdtyCode(String lCmdtyCode){
    if (SIUtil.isNull(lCmdtyCode)) lCmdtyCode="";
    this.cmdtyCode=SIUtil.changeTo(lCmdtyCode.trim(),this.encode);
  }

  //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 アドレス帳コード
  public void setAddressCode(String lAddressCode){
    if (SIUtil.isNull(lAddressCode)) lAddressCode="";
    this.addressCode=SIUtil.changeTo(lAddressCode.trim(),this.encode);
  }

  public void setWrappingCodeRdo(String lWrappingCodeRdo){
    if (SIUtil.isNull(lWrappingCodeRdo)) lWrappingCodeRdo="";
    this.wrappingCodeRdo=SIUtil.changeTo(lWrappingCodeRdo.trim(),this.encode);
  }

  //getter of ショップコード
  public String getShopCode(){
    return this.shopCode;
  }

  //getter of 商品コード
  public String getCmdtyCode(){
    return this.cmdtyCode;
  }

  //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 アドレス帳コード
  public String getAddressCode(){
    return this.addressCode;
  }

  public String getWrappingCodeRdo(){
    return this.wrappingCodeRdo;
  }

  public boolean getCloseWindow(){
    return this.closeWindow;
  }
  /**
   * <b>init</b>
   * 初期化処理
   */
  //7.1.1 ST0236 修正　ここから
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest,lUrlParam);
    this.setShopCode((String)lUrlParam.getParam("shc"));//ショップコード
    this.setCmdtyCode((String)lUrlParam.getParam("cmc"));//商品コード
    this.setStndrdCode1((String)lUrlParam.getParam("snc1"));//規格1
    this.setElementCode1((String)lUrlParam.getParam("ec1"));//エレメント1
    this.setStndrdCode2((String)lUrlParam.getParam("snc2"));//規格2
    this.setElementCode2((String)lUrlParam.getParam("ec2"));//エレメント2
    this.setAddressCode((String)lUrlParam.getParam("ac"));//アドレス帳コード
    this.setWrappingCodeRdo((String)lUrlParam.getParam("wrappingCodeRdo"));//選択
  }
  //7.1.1 ST0236 修正　ここまで

  /**
   * <b>validate</b>
   * 受注明細にラッピングをセットする
   * @param lRequest
   * @param lConnection
   * @return boolean
   */
  public boolean validate(HttpServletRequest lRequest,Connection lConnection){
    log.debug("getWrappingCodeRdo="+getWrappingCodeRdo());

    HttpSession session=lRequest.getSession(true);//セッションの取得
    HashMap detailMap=(HashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);//受注明細レコード

    SIOrderDetailPK lPk=new SIOrderDetailPK(getShopCode(),
                                              getCmdtyCode(),
                                              getStndrdCode1(),
                                              getElementCode1(),
                                              getStndrdCode2(),
                                              getElementCode2(),
                                              getAddressCode());//受注明細コードの取得
    SIOrderDetail lOrderDetail=(SIOrderDetail)detailMap.get(lPk.getOrderDetailCode());

    if (lOrderDetail==null){//見つからない
      log.error("not find the order detail code in cart.orderDetailCode="+lPk.getOrderDetailCode());
    }else{//修正
      //ラッピングが選択されているとき
      if (SIUtil.isNotNull(this.getWrappingCodeRdo())){
        //ラッピングデータの取得
        SIWrapping lWrapping=new SIWrapping(getShopCode(),getWrappingCodeRdo());
        lWrapping.reset(lConnection);
        //受注明細のデータの設定
        log.debug("getWrappingCode="+lWrapping.getWrappingCode()+",lWrapping.getWrappingName()="+lWrapping.getWrappingName());
        lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
        lOrderDetail.setWrappingCode(lWrapping.getWrappingCode());
        lOrderDetail.setWrappingName(lWrapping.getWrappingName());
        lOrderDetail.setWrappingTaxFlg(lWrapping.getTaxFlg());
        lOrderDetail.setWrappingPrice(lWrapping.getPrice());
      //未選択を選択したとき
      }else{
        lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
        lOrderDetail.setWrappingCode("");
        lOrderDetail.setWrappingName("");
        lOrderDetail.setWrappingTaxFlg("0");
        lOrderDetail.setWrappingPrice("");
      }
      detailMap.put(lPk.getOrderDetailCode(),lOrderDetail);
      session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME,detailMap);
      jp.co.sint.beans.front.UICasher.reset(lRequest);//7.1.1 ST0154 追加
    }

    setCloseWindow(true);
    return true;
  }
}
