/**
 * 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.database.SIDBUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id: SIStoreStock.java,v 1.0 Exp $
 * @author  Tsuyoshi Yagi
 * <br>Description: 支店別在庫マスタ用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>
 * T.yagi       2005/08/16  Original
 */
public class SIStoreStock  extends SIBasic {
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  //ショップコード
  private String shopCode="";
  //親コード
  private String cmdtyCode="";
  //在庫コード
  private String individualCode="";
  //支店コード
  private String branchCode="";
  //販売優先順位
  private String salesPriorityFlg="";
  //在庫数量
  private String amount="";
  //登録日時
  private String initDateTime="";
  //更新日時
  private String updateDateTime="";
  //支店名
  private String branchName="";
  //支店フラグ
  private String branchFlg="";
  //引当情報
  private String allocation="";
  //総数
  private String total="";
  //変更後数量
  private String after="";
  //帳簿在庫数量
  private String realAmount="";
  //キープ数量
  private String keepAmount="";
  //出荷待ち受注数量
  private String orderAmount="";
  //割当済予約数量
  private String reserveAmount="";
  //未承認出庫数量
  private String shipHistoryAmount="";
  /**
   * @return after を戻します。
   */
  public String getAfter() {
    return after;
  }
  /**
   * @param after after を設定。
   */
  public void setAfter(String after) {
    this.after = after;
  }
  /**
   * @return amount を戻します。
   */
  public String getAmount() {
    return amount;
  }
  /**
   * @param amount amount を設定。
   */
  public void setAmount(String amount) {
    this.amount = amount;
  }
  /**
   * @return branchCode を戻します。
   */
  public String getBranchCode() {
    return branchCode;
  }
  /**
   * @param branchCode branchCode を設定。
   */
  public void setBranchCode(String branchCode) {
    this.branchCode = branchCode;
  }
  /**
   * @return branchName を戻します。
   */
  public String getBranchName() {
    return branchName;
  }
  /**
   * @param branchName branchName を設定。
   */
  public void setBranchName(String branchName) {
    this.branchName = branchName;
  }
  /**
   * @return cmdtyCode を戻します。
   */
  public String getCmdtyCode() {
    return cmdtyCode;
  }
  /**
   * @param cmdtyCode cmdtyCode を設定。
   */
  public void setCmdtyCode(String cmdtyCode) {
    this.cmdtyCode = cmdtyCode;
  }
  /**
   * @return individualCode を戻します。
   */
  public String getIndividualCode() {
    return individualCode;
  }
  /**
   * @param individualCode individualCode を設定。
   */
  public void setIndividualCode(String individualCode) {
    this.individualCode = individualCode;
  }
  /**
   * @return initDateTime を戻します。
   */
  public String getInitDateTime() {
    return initDateTime;
  }
  /**
   * @param initDateTime initDateTime を設定。
   */
  public void setInitDateTime(String initDateTime) {
    this.initDateTime = initDateTime;
  }
  /**
   * @return salesPriorityFlg を戻します。
   */
  public String getSalesPriorityFlg() {
    return salesPriorityFlg;
  }
  /**
   * @param salesPriorityFlg salesPriorityFlg を設定。
   */
  public void setSalesPriorityFlg(String salesPriorityFlg) {
    this.salesPriorityFlg = salesPriorityFlg;
  }
  /**
   * @return shopCode を戻します。
   */
  public String getShopCode() {
    return shopCode;
  }
  /**
   * @param shopCode shopCode を設定。
   */
  public void setShopCode(String shopCode) {
    this.shopCode = shopCode;
  }
  /**
   * @return updateDateTime を戻します。
   */
  public String getUpdateDateTime() {
    return updateDateTime;
  }
  /**
   * @param updateDateTime updateDateTime を設定。
   */
  public void setUpdateDateTime(String updateDateTime) {
    this.updateDateTime = updateDateTime;
  }
  /**
   * @return branchFlg を戻します。
   */
  public String getBranchFlg() {
    return branchFlg;
  }
  /**
   * @param branchFlg branchFlg を設定。
   */
  public void setBranchFlg(String branchFlg) {
    this.branchFlg = branchFlg;
  }
  
  /**
   * @return allocation を戻します。
   */
  public String getAllocation() {
    return allocation;
  }
  /**
   * @param allocation allocation を設定。
   */
  public void setAllocation(String allocation) {
    this.allocation = allocation;
  }
  /**
   * @return total を戻します。
   */
  public String getTotal() {
    return total;
  }
  /**
   * @param total total を設定。
   */
  public void setTotal(String total) {
    this.total = total;
  }
  public String getRealAmount() {
    return realAmount;
  }
  public String getKeepAmount() {
    return keepAmount;
  }
  public String getOrderAmount() {
    return orderAmount;
  }
  public String getReserveAmount() {
    return reserveAmount;
  }
  public String getShipHistoryAmount() {
    return shipHistoryAmount;
  }
  public void setRealAmount(String realAmount) {
    this.realAmount = realAmount;
  }
  public void setKeepAmount(String keepAmount) {
    this.keepAmount = keepAmount;
  }
  public void setOrderAmount(String orderAmount) {
    this.orderAmount = orderAmount;
  }
  public void setReserveAmount(String reserveAmount) {
    this.reserveAmount = reserveAmount;
  }
  public void setShipHistoryAmount(String shipHistoryAmount) {
    this.shipHistoryAmount = shipHistoryAmount;
  }
  public boolean validate(HttpServletRequest lRequest, Connection conn) {
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    StringBuffer lSqlBuf=new StringBuffer("");
    StringBuffer lSqlBufCmdty=new StringBuffer("");
    StringBuffer lSqlBufBranch=new StringBuffer("");
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "ショップコード", this.shopCode,SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,16);
    if(SICheckValid.checkValid(errors, "親コード", this.cmdtyCode,SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE2+SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,13) &&
       SICheckValid.checkValid(errors, "在庫コード", this.individualCode,SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE2+SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,8))
    {
      lSqlBufCmdty.append("SELECT individualcode FROM individualtbl ");
      lSqlBufCmdty.append("WHERE cmdtycode="+SIDBUtil.SQL2Str(this.getCmdtyCode()," "));
      lSqlBufCmdty.append("AND individualcode="+SIDBUtil.SQL2Str(this.getIndividualCode()," "));
      SICheckValid.checkExist(errors,conn,"商品コード",lSqlBufCmdty.toString());
    }
    if(SICheckValid.checkValid(errors, "支店コード", this.branchCode,SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_DIGIT_TYPE+SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,3))
    {
      lSqlBufBranch.append("SELECT branchcode FROM branchtbl ");
      lSqlBufBranch.append("WHERE branchcode="+SIDBUtil.SQL2Str(this.getBranchCode()," "));
      SICheckValid.checkExist(errors,conn,"支店コード",lSqlBufBranch.toString());
    }
    if (errors.isEmpty()){
      if (SIConfig.SIEDIT_MODE_INSERT.equalsIgnoreCase(this.getEditModeTxt().trim())){
        lSqlBuf=new StringBuffer();
        //重複レコードかどうかをチェック
        lSqlBuf.append("SELECT individualcode FROM storestocktbl ");
        lSqlBuf.append("WHERE CmdtyCode="+SIDBUtil.SQL2Str(this.getCmdtyCode()," "));
        lSqlBuf.append("AND ShopCode="+SIDBUtil.SQL2Str(this.getShopCode()," "));
        lSqlBuf.append("AND individualcode="+SIDBUtil.SQL2Str(this.getIndividualCode()," "));
        lSqlBuf.append("AND branchcode="+SIDBUtil.SQL2Str(this.getBranchCode()," "));
        SICheckValid.checkDuplicate(errors,conn,"商品コード",lSqlBuf.toString());
      }else {
        if (SIUtil.isNotNull(this.getShopCode())&&SIUtil.isNotNull(this.getCmdtyCode())){
          lSqlBuf.append("SELECT individualcode FROM storestocktbl ");
          lSqlBuf.append("WHERE CmdtyCode="+SIDBUtil.SQL2Str(this.getCmdtyCode()," "));
          lSqlBuf.append("AND ShopCode="+SIDBUtil.SQL2Str(this.getShopCode()," "));
          lSqlBuf.append("AND individualcode="+SIDBUtil.SQL2Str(this.getIndividualCode()," "));
          lSqlBuf.append("AND branchcode="+SIDBUtil.SQL2Str(this.getBranchCode()," "));
          SICheckValid.checkExist(errors,conn,"商品コード",lSqlBuf.toString());
        }
      }
    }
    SICheckValid.checkValid(errors, "登録日時", this.initDateTime,SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    SICheckValid.checkValid(errors, "更新日時", this.updateDateTime,SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_DATE_TYPE);
    SICheckValid.checkValid(errors, "在庫数量", this.amount,SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_DIGIT_TYPE+SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,6);
    SICheckValid.checkValid(errors, "販売優先順位", this.salesPriorityFlg,SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_DIGIT_TYPE+SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,2);
    if (!errors.isEmpty())
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();

  }
}
