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

import java.sql.Connection;

import javax.servlet.http.HttpServletRequest;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.tools.SIFatalException;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id: SIEstimate.java,v 1.0 ExpDescription: 見積ヘッダBean
 * <p>
 * History
 * </p>
 * <p>
 * Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason
 * </p>
 * ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * Tsuyoshi Yagi 2005/12/02 Original
 */
public class SIEstimate extends SIBasic {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  // 見積番号
  private String estimataCode = "";
  // キープ番号
  private String keepNumber = "";
  // 顧客コード
  private String custCode = "";
  // 顧客名
  private String custName = "";
  // 顧客名カナ
  private String custPronName = "";
  // EMAIL
  private String email = "";
  // 宛名
  private String estimateAddrressee = "";
  // 郵便番号1
  private String postCode1 = "";
  // 郵便番号2
  private String postCode2 = "";
  // 住所1
  private String address1 = "";
  // 住所2
  private String address2 = "";
  // 住所3
  private String address3 = "";
  // 会社名
  private String companyName = "";
  // 電話番号
  private String tel = "";
  // 店舗電話番号
  private String storeTel = "";
  // FAX番号
  private String fax = "";
  // 支払方法名称
  private String payMethodName = "";
  // 見積日時
  private String initDateTime = "";
  // 修正日時
  private String updateDateTime = "";
  // 先後払いフラグ
  private String paymentFlg = "";
  // 手数料
  private String fee = "0";
  // 税率
  private String taxRate = "";
  // 値引合計
  private String sumOfDiscount = "0";
  // メール送信フラグ
  private String sendMailFlg = "";
  // 見積状態
  private String status = "";
  // 手数料消費税フラグ
  private String feeTaxFlg = "";
  // 連絡事項
  private String contactMsg = "";
  // 備考
  private String memo = "";
  // ポイント使用フラグ
  private String pointEnableFlg = "";
  // 更新者ショップコード
  private String updateMallShopCode = "";
  // 更新管理者ID
  private String updateUserCode = "";
  // 営業形態
  private String businessForm = "";
  // 受注経路
  private String orderRoute = "";
  // 対応支店
  private String brarnchCode = "";
  // 担当者
  private String chargeCode = "";
  
  private String sumOfA = "0";
  
  private String sumOfB = "0";
  // 使用ポイント額
  private String sumByPoint = "0";
  // 有効ポイント
  private String maxPoint = "0";
  // 合計金額
  private String sumOfC = "0";
  // 値引金額
  private String sumOfE = "0";
  
  // 合計金額
  private String sumOfF = "0";
  
  // 手数料計算用お支払額
  private String calcFee = "0";
  
  private String PayMethodNameBack = "";
  
  private String fullPointFlg = "";
  
  // 送料調整額
  private String discountFee = "0";
  
  // 手数料調整額
  private String discountDeliveryFee = "0";
  
  private String memberLevelCode = "0";
  
  // EDBTG003-00 elecs-tani add start
  // セット値引金額
  private String sumOfSetDiscount = "0";
  // EDBTG003-00 elecs-tani add end
  
  public String getFeeIncTax() {
    log.debug("getFeeIncTax:getFeeTaxFlg()=" + getFeeTaxFlg() + ",");
    if (getFeeTaxFlg().equals("0") || getFeeTaxFlg().equals("2")) return getFee();
    
    String lTax = "0";
    try {
      lTax = SIUtil.multi_LD(getFee(), SIUtil.div_DL(getTaxRate(), "100"));
    } catch (SIFatalException e) {
      e.printStackTrace();
    }
    return SIUtil.add_LL(getFee(), lTax);
  }
  
  /**
   * <b>getFullPointFlg</b> 全額ポイントで支払うかどうかをチェックします
   * 
   * @param なし
   * @return なし
   * @throws なし
   */
  public boolean getFullPointFlg() {
    if (SIUtil.isNotNull(sumByPoint) && sumByPoint.equals("0")) {
      return false;
    } else if (SIUtil.isNotNull(getCalcFee()) && Integer.parseInt(getCalcFee()) <= 0) {
      return true;
    } else {
      return false;
    }
  }
  
  /**
   * <b>setPayMethodFee</b> 支払フラグ、支払料金の設定を行います
   * 
   * @param Connection
   * @return なし
   * @throws なし
   */
  public void setPayMethodFee(HttpServletRequest request, Connection lConnection) {
    
    SILogin lLogin = SIHTMLUtil.getLogin(request);
    
    // 手数料計算金額が０の時は支払方法をリセット
    if (SIUtil.isNotNull(this.getPayMethodName())) {
      if (this.getPayMethodName().equals(SIConfig.SIPointPayName) || this.getPayMethodName().equals(SIConfig.SIZeroPayName)) {
        if (SIUtil.isNotNull(this.getPayMethodNameBack())) {
          this.setEncode(SIConfig.SIENCODE_NONE);
          this.setPayMethodName(this.getPayMethodNameBack());// 支払フラグの設定
          this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
        } else {
          this.setPayMethodName("");// 支払フラグの設定
          this.setPaymentFlg("");// 支払フラグの設定
          this.setFee("");// 支払い料金の設定
          this.setFeeTaxFlg("");// 支払い料金税区分の設定
        }
      }
    }
    
    // ポイント全額支払
    if ((SIUtil.isNotNull(this.getSumByPoint()) && !this.getSumByPoint().equals("0"))
        && (SIUtil.isNull(this.getCalcFee()) || (SIUtil.isNotNull(this.getCalcFee()) && Integer.parseInt(this.getCalcFee()) <= 0))) {
      this.setEncode(SIConfig.SIENCODE_NONE);
      this.setPayMethodName(SIConfig.SIPointPayName);// 支払フラグの設定
      this.setPaymentFlg(SIFlagConf.SIFLAG_PAYMENTFLG_POINT);// 支払フラグの設定
      this.setFee(SIConfig.SIPointPayFee);// 支払い料金の設定
      this.setFeeTaxFlg("0");// 支払い料金税区分の設定
      this.setDiscountFee("0");// 手数料調整額の設定
      this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
      // 送料＋商品合計が0円
    } else if ((SIUtil.isNull(this.getSumByPoint()) || this.getSumByPoint().equals("0")) && (SIUtil.isNull(this.getCalcFee()) || this.getCalcFee().equals("0"))) {
      this.setEncode(SIConfig.SIENCODE_NONE);
      this.setPayMethodName(SIConfig.SIZeroPayName);// 支払フラグの設定
      this.setPaymentFlg(SIFlagConf.SIFLAG_PAYMENTFLG_POINT);// 支払フラグの設定
      this.setFee(SIConfig.SIPointPayFee);// 支払い料金の設定
      this.setFeeTaxFlg("0");// 支払い料金税区分の設定
      this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
      // ポイント全額支払以外
    } else {
      // 支払フラグと支払料金の設定
      SIPayMethod lPayMethod = new SIPayMethod();
      lPayMethod.setEncode(SIConfig.SIENCODE_NONE);
      
      if (SIUtil.isNull(lLogin.getMallShopCode())) {// モール一括決済
        lPayMethod.setMallShopCode(SIConfig.SIMALL.getMallShopCode());
      } else {// ショップ決済
        lPayMethod.setMallShopCode(lLogin.getMallShopCode());
      }
      
      lPayMethod.setPayMethodName(this.getPayMethodName());
      lPayMethod.setPrice(this.getCalcFee());
      lPayMethod.resetPayMethodName(lConnection);//
      
      this.setPaymentFlg(lPayMethod.getPaymentFlg());// 支払フラグの設定
      this.setFee(lPayMethod.getFee());// 支払い料金の設定
    }
  }
  
  /*
   * getter of address1.
   */
  public String getAddress1() {
    return address1;
  }
  
  /*
   * setter of address1
   */
  public void setAddress1(String address1) {
    this.address1 = address1;
  }
  
  /*
   * getter of address2.
   */
  public String getAddress2() {
    return address2;
  }
  
  /*
   * setter of address2
   */
  public void setAddress2(String address2) {
    this.address2 = address2;
  }
  
  /*
   * getter of address3.
   */
  public String getAddress3() {
    return address3;
  }
  
  /*
   * setter of address3
   */
  public void setAddress3(String address3) {
    this.address3 = address3;
  }
  
  /*
   * getter of brarnchCode.
   */
  public String getBrarnchCode() {
    return brarnchCode;
  }
  
  /*
   * setter of brarnchCode
   */
  public void setBrarnchCode(String brarnchCode) {
    this.brarnchCode = brarnchCode;
  }
  
  /*
   * getter of buisnessForm.
   */
  public String getBusinessForm() {
    return businessForm;
  }
  
  /*
   * setter of buisnessForm
   */
  public void setBusinessForm(String buisnessForm) {
    this.businessForm = buisnessForm;
  }
  
  /*
   * getter of chargeCode.
   */
  public String getChargeCode() {
    return chargeCode;
  }
  
  /*
   * setter of chargeCode
   */
  public void setChargeCode(String chargeCode) {
    this.chargeCode = chargeCode;
  }
  
  /*
   * getter of companyName.
   */
  public String getCompanyName() {
    return companyName;
  }
  
  /*
   * setter of companyName
   */
  public void setCompanyName(String companyName) {
    this.companyName = companyName;
  }
  
  /*
   * getter of contactMsg.
   */
  public String getContactMsg() {
    return contactMsg;
  }
  
  /*
   * setter of contactMsg
   */
  public void setContactMsg(String contactMsg) {
    this.contactMsg = contactMsg;
  }
  
  /*
   * getter of custCode.
   */
  public String getCustCode() {
    return custCode;
  }
  
  /*
   * setter of custCode
   */
  public void setCustCode(String custCode) {
    this.custCode = custCode;
  }
  
  /*
   * getter of custName.
   */
  public String getCustName() {
    return custName;
  }
  
  /*
   * setter of custName
   */
  public void setCustName(String custName) {
    this.custName = custName;
  }
  
  /*
   * getter of custPronName.
   */
  public String getCustPronName() {
    return custPronName;
  }
  
  /*
   * setter of custPronName
   */
  public void setCustPronName(String custPronName) {
    this.custPronName = custPronName;
  }
  
  /*
   * getter of email.
   */
  public String getEmail() {
    return email;
  }
  
  /*
   * setter of email
   */
  public void setEmail(String email) {
    this.email = email;
  }
  
  /*
   * getter of estimataCode.
   */
  public String getEstimataCode() {
    return estimataCode;
  }
  
  /*
   * setter of estimataCode
   */
  public void setEstimataCode(String estimataCode) {
    this.estimataCode = estimataCode;
  }
  
  /*
   * getter of fax.
   */
  public String getFax() {
    return fax;
  }
  
  /*
   * setter of fax
   */
  public void setFax(String fax) {
    this.fax = fax;
  }
  
  /*
   * getter of fee.
   */
  public String getFee() {
    if (SIUtil.isNotNull(this.fee)) {
      return fee;
    } else {
      return "0";
    }
  }
  
  /*
   * setter of fee
   */
  public void setFee(String fee) {
    this.fee = fee;
  }
  
  /*
   * getter of feeTaxFlg.
   */
  public String getFeeTaxFlg() {
    return feeTaxFlg;
  }
  
  /*
   * setter of feeTaxFlg
   */
  public void setFeeTaxFlg(String feeTaxFlg) {
    this.feeTaxFlg = feeTaxFlg;
  }
  
  /*
   * getter of initDateTime.
   */
  public String getInitDateTime() {
    return initDateTime;
  }
  
  /*
   * setter of initDateTime
   */
  public void setInitDateTime(String initDateTime) {
    this.initDateTime = initDateTime;
  }
  
  /*
   * getter of keepNumber.
   */
  public String getKeepNumber() {
    return keepNumber;
  }
  
  /*
   * setter of keepNumber
   */
  public void setKeepNumber(String keepNumber) {
    this.keepNumber = keepNumber;
  }
  
  /*
   * getter of memo.
   */
  public String getMemo() {
    return memo;
  }
  
  /*
   * setter of memo
   */
  public void setMemo(String memo) {
    this.memo = memo;
  }
  
  /*
   * getter of orderAddrressee.
   */
  public String getEstimateAddrressee() {
    return estimateAddrressee;
  }
  
  /*
   * setter of orderAddrressee
   */
  public void setEstimateAddrressee(String orderAddrressee) {
    this.estimateAddrressee = orderAddrressee;
  }
  
  /*
   * getter of orderRoute.
   */
  public String getOrderRoute() {
    return orderRoute;
  }
  
  /*
   * setter of orderRoute
   */
  public void setOrderRoute(String orderRoute) {
    this.orderRoute = orderRoute;
  }
  
  /*
   * getter of paymentFlg.
   */
  public String getPaymentFlg() {
    return paymentFlg;
  }
  
  /*
   * setter of paymentFlg
   */
  public void setPaymentFlg(String paymentFlg) {
    this.paymentFlg = paymentFlg;
  }
  
  /*
   * getter of payMethodName.
   */
  public String getPayMethodName() {
    return payMethodName;
  }
  
  /*
   * setter of payMethodName
   */
  public void setPayMethodName(String payMethodName) {
    this.payMethodName = payMethodName;
  }
  
  /*
   * getter of pointEnableFlg.
   */
  public String getPointEnableFlg() {
    return pointEnableFlg;
  }
  
  /*
   * setter of pointEnableFlg
   */
  public void setPointEnableFlg(String pointEnableFlg) {
    this.pointEnableFlg = pointEnableFlg;
  }
  
  /*
   * getter of postCode1.
   */
  public String getPostCode1() {
    return postCode1;
  }
  
  /*
   * setter of postCode1
   */
  public void setPostCode1(String postCode1) {
    this.postCode1 = postCode1;
  }
  
  /*
   * getter of postCode2.
   */
  public String getPostCode2() {
    return postCode2;
  }
  
  /*
   * setter of postCode2
   */
  public void setPostCode2(String postCode2) {
    this.postCode2 = postCode2;
  }
  
  /*
   * getter of sendMailFlg.
   */
  public String getSendMailFlg() {
    return sendMailFlg;
  }
  
  /*
   * setter of sendMailFlg
   */
  public void setSendMailFlg(String sendMailFlg) {
    this.sendMailFlg = sendMailFlg;
  }
  
  /*
   * getter of status.
   */
  public String getStatus() {
    return status;
  }
  
  /*
   * setter of status
   */
  public void setStatus(String status) {
    this.status = status;
  }
  
  /*
   * getter of sumOfDiscount.
   */
  public String getSumOfDiscount() {
    
    return sumOfDiscount;
  }
  
  /*
   * setter of sumOfDiscount
   */
  public void setSumOfDiscount(String sumOfDiscount) {
    this.sumOfDiscount = sumOfDiscount;
  }
  
  /*
   * getter of taxRate.
   */
  public String getTaxRate() {
    return taxRate;
  }
  
  /*
   * setter of taxRate
   */
  public void setTaxRate(String taxRate) {
    this.taxRate = taxRate;
  }
  
  /*
   * getter of tel.
   */
  public String getTel() {
    return tel;
  }
  
  /*
   * setter of tel
   */
  public void setTel(String tel) {
    this.tel = tel;
  }
  
  /*
   * getter of updateDateTime.
   */
  public String getUpdateDateTime() {
    return updateDateTime;
  }
  
  /*
   * setter of updateDateTime
   */
  public void setUpdateDateTime(String updateDateTime) {
    this.updateDateTime = updateDateTime;
  }
  
  /*
   * getter of updateMallShopCode.
   */
  public String getUpdateMallShopCode() {
    return updateMallShopCode;
  }
  
  /*
   * setter of updateMallShopCode
   */
  public void setUpdateMallShopCode(String updateMallShopCode) {
    this.updateMallShopCode = updateMallShopCode;
  }
  
  /*
   * getter of updateUserCode.
   */
  public String getUpdateUserCode() {
    return updateUserCode;
  }
  
  /*
   * setter of updateUserCode
   */
  public void setUpdateUserCode(String updateUserCode) {
    this.updateUserCode = updateUserCode;
  }
  
  /*
   * getter of storeTel.
   */
  public String getStoreTel() {
    return storeTel;
  }
  
  /*
   * setter of storeTel
   */
  public void setStoreTel(String storeTel) {
    this.storeTel = storeTel;
  }
  
  /**
   * @return sumOfA を戻します。
   */
  public String getSumOfA() {
    return sumOfA;
  }
  
  /**
   * @param sumOfA sumOfA を設定。
   */
  public void setSumOfA(String sumOfA) {
    this.sumOfA = sumOfA;
  }
  
  /**
   * @return sumOfB を戻します。
   */
  public String getSumOfB() {
    return sumOfB;
  }
  
  /**
   * @param sumOfB sumOfB を設定。
   */
  public void setSumOfB(String sumOfB) {
    this.sumOfB = sumOfB;
  }
  
  /**
   * @return maxPoint を戻します。
   */
  public String getMaxPoint() {
    if (SIUtil.isNotNull(this.maxPoint)) {
      return maxPoint;
    } else {
      return "0";
    }
  }
  
  /**
   * @param maxPoint maxPoint を設定。
   */
  public void setMaxPoint(String maxPoint) {
    this.maxPoint = maxPoint;
  }
  
  /**
   * @return sumByPoint を戻します。
   */
  public String getSumByPoint() {
    if (SIUtil.isNotNull(this.sumByPoint)) {
      return sumByPoint;
    } else {
      return "0";
    }
  }
  
  /**
   * @param sumByPoint sumByPoint を設定。
   */
  public void setSumByPoint(String sumByPoint) {
    this.sumByPoint = sumByPoint;
  }
  
  /**
   * @return sumOfC を戻します。
   */
  public String getSumOfC() {
    return sumOfC;
  }
  
  /**
   * @param sumOfC sumOfC を設定。
   */
  public void setSumOfC(String sumOfC) {
    this.sumOfC = sumOfC;
  }
  
  /**
   * @return sumOfE を戻します。
   */
  public String getSumOfE() {
    return sumOfE;
  }
  
  /**
   * @param sumOfE sumOfE を設定。
   */
  public void setSumOfE(String sumOfE) {
    this.sumOfE = sumOfE;
  }
  
  /**
   * @return calcFee を戻します。
   */
  public String getCalcFee() {
    return calcFee;
  }
  
  /**
   * @param calcFee calcFee を設定。
   */
  public void setCalcFee(String lCalcFee) {
    if (SIUtil.isNull(lCalcFee)) lCalcFee = "0";
    this.calcFee = lCalcFee.trim();
  }
  
  /**
   * @return payMethodNameBack を戻します。
   */
  public String getPayMethodNameBack() {
    return PayMethodNameBack;
  }
  
  /**
   * @param payMethodNameBack payMethodNameBack を設定。
   */
  public void setPayMethodNameBack(String payMethodNameBack) {
    PayMethodNameBack = payMethodNameBack;
  }
  
  /**
   * @param fullPointFlg fullPointFlg を設定。
   */
  public void setFullPointFlg(String fullPointFlg) {
    this.fullPointFlg = fullPointFlg;
  }
  
  /**
   * @return sumOfF を戻します。
   */
  public String getSumOfF() {
    return sumOfF;
  }
  
  /**
   * @param sumOfF sumOfF を設定。
   */
  public void setSumOfF(String sumOfF) {
    this.sumOfF = sumOfF;
  }
  
  /**
   * @return discountDeliveryFee を戻します。
   */
  public String getDiscountDeliveryFee() {
    return discountDeliveryFee;
  }
  
  /**
   * @param discountDeliveryFee discountDeliveryFee を設定。
   */
  public void setDiscountDeliveryFee(String discountDeliveryFee) {
    this.discountDeliveryFee = discountDeliveryFee;
  }
  
  /**
   * @return discountFee を戻します。
   */
  public String getDiscountFee() {
    return discountFee;
  }
  
  /**
   * @param discountFee discountFee を設定。
   */
  public void setDiscountFee(String discountFee) {
    this.discountFee = discountFee;
  }
  
  public String getMemberLevelCode() {
    return memberLevelCode;
  }
  
  public void setMemberLevelCode(String memberLevelCode) {
    if (SIUtil.isNull(memberLevelCode)) memberLevelCode = "0";
    this.memberLevelCode = memberLevelCode;
  }
  
  // EDBTG003-00 elecs-tani add start
  /**
   * @return sumOfSetDiscount
   */
  public String getSumOfSetDiscount() {
    return sumOfSetDiscount;
  }

  /**
   * @param sumOfSetDiscount セットする sumOfSetDiscount
   */
  public void setSumOfSetDiscount(String sumOfSetDiscount) {
    if (SIUtil.isNull(sumOfSetDiscount)) sumOfSetDiscount = "0";
    this.sumOfSetDiscount = sumOfSetDiscount;
  }
  // EDBTG003-00 elecs-tani add end
}
