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

import javax.servlet.http.*;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;
import java.sql.*;
import jp.co.sint.database.*;
import jp.co.sint.basic.*;
import jp.co.sint.config.*;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIFatalException;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

/**
 * @version $Id: UIStockHistory.java,v 1.0 Exp $
 * @author Jinwang Chen <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>
 * Naotaka Ohsugi 2003/03/31 Original
 */

public class UIStockHistory extends SIBasic {
  
  // 親コード
  private String cmdtyCode = "";
  
  // 在庫コード
  private String individualCode = "";
  
  // 新規入出庫支店
  private String newBranch = "";
  
  // 新規入出庫担当者
  private String newCharge = "";
  
  // 新規入出庫数量
  private String newAmount = "";
  
  // 入出庫仕入総額
  private String purchasePrice = "";
  
  // 入出庫加工総額
  private String processingExpence = "";
  
  // 入出庫区分
  private String type = "";
  
  // 入出庫コメント
  private String comment = "";
  
  // 削除用入出庫番号
  private String deleteNo = "";
  
  // 予約番号
  private String reserveCode = "";
  
  // 予約数量
  private String reserveAmount = "";
  
  // 予約割当支店
  private String reserveBranch = "";
  
  // 移動入庫支店
  private String moveBranchTo = "";
  
  // 移動入庫支店(複数)
  private String[] moveBranchToList = null;
  
  // 移動出庫支店
  private String moveBranchFrom = "";
  
  // 移動入出庫担当者
  private String moveCharge = "";
  
  // 移動入出庫数量
  private String moveAmount = "";
  
  // 移動出庫数量(複数)
  private String[] moveAmountList = null;
  
  // 仕入入庫支店（複数）
  private String[] storeBranchList = null;
  
  // 仕入入庫数量（複数）
  private String[] storeAmountList = null;
  
  // 予約フラグ
  private boolean reserveFlg = false;
  
  // 未承認フラグ
  private boolean neverApproveFlg = false;
  
  // 入出庫番号
  private String number = "";
  
  // 訂正用入出庫番号
  private String correctNo = "";
  
  // 訂正用数量
  private String correctAmount = "";
  
  // 訂正用仕入単価
  private String correctPurchasePrice = "";
  
  // 在庫しないフラグ
  private boolean isNoStock = false;
  
  //ページ番号
  protected String pageNumberTxtNew="1";
  
  // 支払方法
  private String paymentType = "";
  
  private String initDateTime = "";
  
  private String realAmountFlg="0";
  
  private String orderCode = "";
  
  // getter of 親コード
  public String getCmdtyCode() {
    return cmdtyCode;
  }
  
  // getter of 在庫コード
  public String getIndividualCode() {
    return individualCode;
  }
  
  // getter of 新規入出庫支店
  public String getNewBranch() {
    return newBranch;
  }
  
  // getter of 新規入出庫担当者
  public String getNewCharge() {
    return newCharge;
  }
  
  // getter of 新規入出庫数量
  public String getNewAmount() {
    return newAmount;
  }
  
  // getter of 入出庫仕入価格
  public String getPurchasePrice() {
    return purchasePrice;
  }
  
  // getter of 入出庫加工価格
  public String getProcessingExpence() {
    return processingExpence;
  }
  
  // getter of 入出庫区分
  public String getType() {
    return type;
  }
  
  // getter of 入出庫コメント
  public String getComment() {
    return comment;
  }
  
  // getter of 削除用入出庫番号
  public String getDeleteNo() {
    return deleteNo;
  }
  
  // getter of 予約番号
  public String getReserveCode() {
    return reserveCode;
  }
  
  // getter of 予約数量
  public String getReserveAmount() {
    return reserveAmount;
  }
  
  // getter of 予約割当支店
  public String getReserveBranch() {
    return reserveBranch;
  }
  
  // getter of 移動入庫支店
  public String getMoveBranchTo() {
    return moveBranchTo;
  }
  
  // getter of 移動入庫支店(複数)
  public String[] getMoveBranchToList() {
    return moveBranchToList;
  }
  
  // getter of 移動出庫支店
  public String getMoveBranchFrom() {
    return moveBranchFrom;
  }
  
  // getter of 移動入出庫担当者
  public String getMoveCharge() {
    return moveCharge;
  }
  
  // getter of 移動入出庫数量
  public String getMoveAmount() {
    return moveAmount;
  }
  
  // getter of 移動入出庫数量(複数)
  public String[] getMoveAmountList() {
    return moveAmountList;
  }
  
  // getter of 予約フラグ
  public boolean isReserveFlg() {
    return reserveFlg;
  }
  
  // getter of 未承認フラグ
  public boolean isNeverApproveFlg() {
    return neverApproveFlg;
  }
  
  // getter of 入出庫番号
  public String getNumber() {
    return number;
  }
  
  // setter of 親コード
  public void setCmdtyCode(String cmdtyCode) {
    this.cmdtyCode = cmdtyCode;
  }
  
  // setter of 在庫コード
  public void setIndividualCode(String individualCode) {
    this.individualCode = individualCode;
  }
  
  // setter of 新規入出庫支店
  public void setNewBranch(String newBranch) {
    this.newBranch = newBranch;
  }
  
  // setter of 新規入出庫担当者
  public void setNewCharge(String newCharge) {
    this.newCharge = newCharge;
  }
  
  // setter of 新規入出庫数量
  public void setNewAmount(String newAmount) {
    this.newAmount = newAmount;
  }
  
  // setter of 入出庫仕入価格
  public void setPurchasePrice(String purchasePrice) {
    this.purchasePrice = purchasePrice;
  }
  
  // setter of 入出庫加工価格
  public void setProcessingExpence(String processingExpence) {
    this.processingExpence = processingExpence;
  }
  
  // setter of 入出庫区分
  public void setType(String type) {
    this.type = type;
  }
  
  // setter of 入出庫コメント
  public void setComment(String comment) {
    this.comment = comment;
  }
  
  // setter of 削除用入出庫番号
  public void setDeleteNo(String deleteNo) {
    this.deleteNo = deleteNo;
  }
  
  // setter of 予約番号
  public void setReserveCode(String reserveCode) {
    this.reserveCode = reserveCode;
  }
  
  // setter of 予約数量
  public void setReserveAmount(String reserveAmount) {
    this.reserveAmount = reserveAmount;
  }
  
  // setter of 予約割当支店
  public void setReserveBranch(String reserveBranch) {
    this.reserveBranch = reserveBranch;
  }
  
  // setter of 移動入庫支店
  public void setMoveBranchTo(String moveBranchTo) {
    this.moveBranchTo = moveBranchTo;
  }
  
  // setter of 移動入庫支店(複数)
  public void setMoveBranchToList(String[] moveBranchToList) {
    this.moveBranchToList = moveBranchToList;
  }
  
  // setter of 移動出庫支店
  public void setMoveBranchFrom(String moveBranchFrom) {
    this.moveBranchFrom = moveBranchFrom;
  }
  
  // setter of 移動入出庫担当者
  public void setMoveCharge(String moveCharge) {
    this.moveCharge = moveCharge;
  }
  
  // setter of 移動入出庫数量
  public void setMoveAmount(String moveAmount) {
    this.moveAmount = moveAmount;
  }
  
  // setter of 移動入出庫数量(複数)
  public void setMoveAmountList(String[] moveAmountList) {
    this.moveAmountList = moveAmountList;
  }
  
  // setter of 予約フラグ
  public void setNeverApproveFlg(boolean neverApproveFlg) {
    this.neverApproveFlg = neverApproveFlg;
  }
  
  // setter of 未承認フラグ
  public void setReserveFlg(boolean reserveFlg) {
    this.reserveFlg = reserveFlg;
  }
  
  // setter of 入出庫番号
  public void setNumber(String number) {
    this.number = number;
  }
  
  // getter of correctAmount
  public String getCorrectAmount() {
    return this.correctAmount;
  }
  
  // getter of correctNo
  public String getCorrectNo() {
    return this.correctNo;
  }
  
  // getter of correctPurchasePrice
  public String getCorrectPurchasePrice() {
    return this.correctPurchasePrice;
  }
  
  // getter of isNoStock
  public boolean isNoStock() {
    return this.isNoStock;
  }
  
  // setter of correctAmount
  public void setCorrectAmount(String correctAmount) {
    if (SIUtil.isNull(correctAmount)) correctAmount = "";
    this.correctAmount = SIUtil.changeTo(correctAmount.trim(), this.encode);
  }
  
  // setter of correctNo
  public void setCorrectNo(String correctNo) {
    if (SIUtil.isNull(correctNo)) correctNo = "";
    this.correctNo = SIUtil.changeTo(correctNo.trim(), this.encode);
  }
  
  // setter of correctPurchasePrice
  public void setCorrectPurchasePrice(String correctPurchasePrice) {
    if (SIUtil.isNull(correctPurchasePrice)) correctPurchasePrice = "";
    this.correctPurchasePrice = SIUtil.changeTo(correctPurchasePrice.trim(), this.encode);
  }
  
  // setter of isNoStock
  public void setNoStock(boolean isNoStock) {
    this.isNoStock = isNoStock;
  }
  
  //getter of pageNumberTxtNew
  public String getPageNumberTxtNew() {
    return this.pageNumberTxtNew;
  }
  
  //setter of pageNumberTxtNew
  public void setPageNumberTxtNew(String pageNumberTxtNew) {
    if (SIUtil.isNull(pageNumberTxtNew)) pageNumberTxtNew = "1";
    this.pageNumberTxtNew = SIUtil.changeTo(pageNumberTxtNew.trim(), this.encode);
  }
  
  //setter of 仕入入庫支店（複数）
  public String[] getStoreBranchList() {
    return storeBranchList;
  }
  
  //getter of 仕入入庫支店（複数）
  public void setStoreBranchList(String[] storeBranchList) {
    this.storeBranchList = storeBranchList;
  }
  
  //setter of 仕入入庫支店（複数）
  public String[] getStoreAmountList() {
    return storeAmountList;
  }
  
  //setter of 仕入入庫支店（複数）
  public void setStoreAmountList(String[] storeAmountList) {
    this.storeAmountList = storeAmountList;
  }
  
  public String getPaymentType() {
    return paymentType;
  }
  
  public void setPaymentType(String paymentType) {
    if (SIUtil.isNull(paymentType)) paymentType = "";
    this.paymentType = paymentType;
  }
  
  public String getInitDateTime() {
    return initDateTime;
  }
  
  public void setInitDateTime(String initDateTime) {
    if (SIUtil.isNull(initDateTime)) initDateTime = "";
    this.initDateTime = initDateTime;
  }
  
  public String getRealAmountFlg() {
    return realAmountFlg;
  }
  
  public void setRealAmountFlg(String realAmountFlg) {
    if (SIUtil.isNull(realAmountFlg)) realAmountFlg = "0";
    this.realAmountFlg = realAmountFlg;
  }
  
  public String getOrderCode() {
    return orderCode;
  }
  
  public void setOrderCode(String orderCode) {
    if (SIUtil.isNull(orderCode)) orderCode = "";
    this.orderCode = orderCode;
  }
  
  /**
   * UIStockHistory コンストラクタ
   * 
   * @param なし
   * @return なし
   * @throws なし
   */
  public UIStockHistory() {}
  
  /**
   * UIStockHistory コンストラクタ
   * 
   * @param lCmdtyCode
   * @param lIndividualCode
   * @return なし
   * @throws なし
   */
  public UIStockHistory(String lCmdtyCode, String lIndividualCode) {
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    this.setCmdtyCode(lCmdtyCode);
    this.setIndividualCode(lIndividualCode);
  }
  
  /**
   * UIStockHistory コンストラクタ
   * 
   * @param lRequest リクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public UIStockHistory(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
  }
  
  /**
   * <b>init</b> 入力したデータを基づいて、このbeansを設定します。
   * 
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    super.init(lRequest, lUrlParam);
    this.setCmdtyCode((String) lUrlParam.getParam("cmdtyCode"));
    this.setIndividualCode((String) lUrlParam.getParam("individualCode"));
    this.setProcessingExpence("0");
    this.setPageNumberTxtNew((String) lUrlParam.getParam("pageNumberTxtNew"));
    this.setRealAmountFlg((String) lUrlParam.getParam("realAmountFlg"));
  }
  
  public void initDelete(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setDeleteNo((String) lUrlParam.getParam("deleteNo"));
  }
  
  public boolean initReserve(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setReserveCode((String) lUrlParam.getParam("reserveCode"));
    this.setReserveAmount((String) lUrlParam.getParam("reserveAmount" + this.reserveCode));
    this.setReserveBranch((String) lUrlParam.getParam("reserveBranch" + this.reserveCode));
    return lUrlParam.getParam("mailflg").equals("true");
  }
  
  public void initMove(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setMoveBranchFrom((String) lUrlParam.getParam("moveBranchFrom"));
    this.setMoveCharge((String) lUrlParam.getParam("moveCharge"));
    this.setMoveAmount((String) lUrlParam.getParam("moveAmount"));
    this.setMoveBranchTo((String) lUrlParam.getParam("moveBranchTo"));
  }
  
  public void initMoveFull(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setMoveBranchFrom((String) lUrlParam.getParam("moveBranchFrom"));
    this.setMoveCharge((String) lUrlParam.getParam("moveCharge"));
    this.setMoveAmount((String) lUrlParam.getParam("moveAmount"));
    this.setMoveBranchToList(lRequest.getParameterValues("moveBranchToList"));
    this.setMoveAmountList(lRequest.getParameterValues("moveAmountList"));
  }
  
  public void initStoreFull(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setNewCharge((String) lUrlParam.getParam("newCharge"));
    this.setNewAmount((String) lUrlParam.getParam("newAmount"));
    this.setPurchasePrice((String) lUrlParam.getParam("purchasePrice"));
    this.setComment((String) lUrlParam.getParam("comment"));
    this.setProcessingExpence((String) lUrlParam.getParam("processingExpence"));
    this.setStoreBranchList(lRequest.getParameterValues("storeBranchList"));
    this.setStoreAmountList(lRequest.getParameterValues("storeAmountList"));
  }
  
  public void initNewStore(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setNewBranch((String) lUrlParam.getParam("newBranch"));
    this.setNewCharge((String) lUrlParam.getParam("newCharge"));
    this.setNewAmount((String) lUrlParam.getParam("newAmount"));
    this.setPurchasePrice((String) lUrlParam.getParam("purchasePrice"));
    this.setProcessingExpence((String) lUrlParam.getParam("processingExpence"));
    this.setType((String) lUrlParam.getParam("type"));
    this.setPaymentType((String) lUrlParam.getParam("paymentType"));
    this.setComment((String) lUrlParam.getParam("comment"));
    this.setOrderCode((String) lUrlParam.getParam("orderCode"));
  }
  
  public void initNewShip(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setNewBranch((String) lUrlParam.getParam("newBranch"));
    this.setNewCharge((String) lUrlParam.getParam("newCharge"));
    this.setNewAmount((String) lUrlParam.getParam("newAmount"));
    this.setType((String) lUrlParam.getParam("type"));
    this.setPaymentType((String) lUrlParam.getParam("reserveType"));
    this.setComment((String) lUrlParam.getParam("comment"));
    this.setOrderCode((String) lUrlParam.getParam("orderCode"));
  }
  
  public void initApproveStore(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setNumber((String) lUrlParam.getParam("approveNo"));
    this.setPurchasePrice((String) lUrlParam.getParam("purchasePriceAp"));
    this.setProcessingExpence((String) lUrlParam.getParam("processingExpenceAp"));
  }
  
  public void initApproveShip(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setNumber((String) lUrlParam.getParam("approveNo"));
  }
  
  public void initCorrectStore(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setCorrectNo((String) lUrlParam.getParam("correctNo"));
    this.setCorrectAmount((String) lUrlParam.getParam("amountCo"));
    this.setCorrectPurchasePrice((String) lUrlParam.getParam("purchasePriceCo"));
  }
  
  public void initCorrectShip(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    this.init(lRequest, lUrlParam);
    this.setCorrectNo((String) lUrlParam.getParam("correctNo"));
    this.setCorrectPurchasePrice((String) lUrlParam.getParam("purchasePriceCo"));
  }
  
  /**
   * <b>getHistoryData</b> 入出庫データを取り込みます
   * 
   * @param lConnection コネクション
   * @param lCmdtyCode 親コード
   * @param lIndividualCode 在庫コード
   * @param lNumber 入庫番号、出庫番号
   * @param isShip 出荷データかどうか
   * @return lStock 入出庫データ
   * @throws なし
   */
  public SIStockHistory getHistoryData(Connection lConnection, String lCmdtyCode, String lIndividualCode, String lNumber, boolean store) {
    SIStockHistory lStock = new SIStockHistory();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlBuf = new StringBuffer();
    
    this.setCmdtyCode(lCmdtyCode);
    this.setIndividualCode(lIndividualCode);
    lStock.setNumber(lNumber);
    
    if (store) {
      lSqlBuf.append("SELECT * FROM storehistorytbl ");
      lSqlBuf.append("WHERE individualcode=").append(SIDBUtil.SQL2Str(lIndividualCode," "));
      lSqlBuf.append("AND cmdtycode=").append(SIDBUtil.SQL2Str(lCmdtyCode," "));
      lSqlBuf.append("AND storenumber=").append(SIDBUtil.SQL2Str(lNumber));
    } else {
      lSqlBuf.append("SELECT * FROM shiphistorytbl ");
      lSqlBuf.append("WHERE individualcode=").append(SIDBUtil.SQL2Str(lIndividualCode," "));
      lSqlBuf.append("AND cmdtycode=").append(SIDBUtil.SQL2Str(lCmdtyCode," "));
      lSqlBuf.append("AND shipnumber=").append(SIDBUtil.SQL2Str(lNumber));
    }
    
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      lResultSet.next();
      if (store) {
        lStock.setBranch(lResultSet.getString("storebranch"));
        lStock.setCharge(lResultSet.getString("storecharge"));
        lStock.setType(lResultSet.getString("storetype"));
      } else {
        lStock.setBranch(lResultSet.getString("shipbranch"));
        lStock.setCharge(lResultSet.getString("shipcharge"));
        lStock.setType(lResultSet.getString("shiptype"));
      }
      lStock.setAmount(lResultSet.getString("amount"));
      lStock.setPurchasePrice(lResultSet.getString("purchaseprice"));
      lStock.setProcessingExpence(lResultSet.getString("processingexpence"));
      lStock.setComment(lResultSet.getString("comment"));
      lStock.setOrderCode(lResultSet.getString("ordercode"));
      lStock.setDelFlg(lResultSet.getString("delflg"));
      lStock.setInitDate(lResultSet.getString("initdatetime"));
      
    } catch (SQLException ex) {
      ex.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lStock;
  }
  
  /**
   * <b>validateRecord</b> 締処理日付と矛盾しないかチェックします。
   * 
   * @param errors エラー内容
   * @param lConnection コネクション
   * @return なし
   * @throws なし
   */
  
  private static void validateRecord(SICustomErrors errors,Connection lConnection) {
    try{
      if(SIDBUtil.hasData(lConnection, "SELECT season FROM inventorytbl WHERE season||'31' >= to_char(current_date,'YYYYMMDD')")){
        errors.addError(new SICustomError("manager.message.error.recordstoreship"));
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  
  /**
   * <b>validateNewStore</b> 入力した新規入庫データをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @return なし
   * @throws なし
   */
  
  public boolean validateNewStore(HttpServletRequest lRequest, Connection lConnection) {
    return validateNewStore(lRequest,lConnection,false);
  }
  public boolean validateNewStore(HttpServletRequest lRequest, Connection lConnection,boolean lCsvCheck) {
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lSqlBuf = null;
    
    if (lCsvCheck) {
      SICheckValid.checkValid(errors, "在庫コード", this.individualCode, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "在庫コード", this.individualCode, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,8);
      if (SIUtil.isNotNull(this.individualCode) && errors.isEmpty()){
        lSqlBuf = new StringBuffer("SELECT cmdtyCode FROM individualTbl WHERE individualCode=");
        lSqlBuf.append(SIDBUtil.SQL2Str(this.individualCode));
        if(SICheckValid.checkExist(errors,lConnection,"在庫コード",lSqlBuf.toString())){
          try {
            if ("1".equals(SIDBUtil.getFirstData(lConnection, "SELECT count(cmdtyCode) FROM individualTbl WHERE individualCode="+SIDBUtil.SQL2Str(this.individualCode)))){
              this.setCmdtyCode(SIDBUtil.getFirstData(lConnection, lSqlBuf.toString()));
            } else {
              errors.addError(new SICustomError("manager.message.error.duplicate.cmdtycode"));
            }
          } catch (SIDBAccessException e) {
            e.printStackTrace();
            errors.addError(new SICustomError("database.execute.error"));
          }
        }
      }
    }
    validateRecord(errors,lConnection);//当月の締処理がもう終わっている場合、入庫できない
    SICheckValid.checkValid(errors, "入庫数量", this.newAmount, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (this.newAmount.equals("0")) errors.addError(new SICustomError("input.data.instock.less", "入庫数量", "1"));
    SICheckValid.checkValid(errors, "入庫数量", this.newAmount, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    SICheckValid.checkValid(errors, "入庫支店", this.newBranch, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "受注番号", this.orderCode, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (lCsvCheck){
      SICheckValid.checkValid(errors,"入庫支店",this.newBranch,SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors,"入庫支店",this.newBranch,SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,3);
      if (SIUtil.isNotNull(this.newBranch) && errors.isEmpty()){
        lSqlBuf = new StringBuffer("SELECT branchCode FROM branchTbl WHERE branchCode=");
        lSqlBuf.append(SIDBUtil.SQL2Str(this.newBranch));
        SICheckValid.checkExist(errors,lConnection,"入庫支店",lSqlBuf.toString());
      }
    }
    SICheckValid.checkValid(errors, "入庫担当者", this.newCharge, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (lCsvCheck){
      SICheckValid.checkValid(errors, "入庫担当者", this.newCharge, SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "入庫担当者", this.newCharge, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,5);
      if (SIUtil.isNotNull(this.newCharge) && errors.isEmpty()){
        lSqlBuf = new StringBuffer("SELECT chargeCode FROM chargeTbl WHERE chargeCode=");
        lSqlBuf.append(SIDBUtil.SQL2Str(this.newCharge));
        SICheckValid.checkExist(errors,lConnection,"入庫担当者",lSqlBuf.toString());
      }
    }
    SICheckValid.checkValid(errors, "入庫区分", this.type, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (lCsvCheck) {
      if (SICheckValid.checkValid(errors, "入庫区分", this.type, SICheckDataConf.SICHECK_FLAG_TYPE,SIFlagConf.SIFLAG_STORE_TYPE_FLG_INX)) {
        if ("2".equals(this.type) || "3".equals(this.type) || "5".equals(this.type) || "7".equals(this.type) || "9".equals(this.type)) {
          errors.addError(new SICustomError("manager.message.error.illegal.flag"));
        }
      }
    }
    if (errors.isEmpty()) {
      try {
        String stockAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM storestocktbl WHERE cmdtycode='" + this.cmdtyCode + "' AND individualcode='"
            + this.individualCode + "' AND branchcode='" + this.newBranch + "'");
        if (SIUtil.add(stockAmount, this.newAmount).length() > 6) {
          errors.addError(new SICustomError("input.data.less", "入庫数量", "入庫限界数"));
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    
    if (this.type.equals("3")) this.purchasePrice = "0";// 加工依頼品の場合は仕入価格をゼロにする
    
    SICheckValid.checkValid(errors, "仕入価格", this.purchasePrice, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "仕入価格", this.purchasePrice, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    if (SIUtil.isNotNull(this.processingExpence)) {
      SICheckValid.checkValid(errors, "加工価格", this.processingExpence, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "加工価格", this.processingExpence, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
    } else {
      this.setProcessingExpence("0");
    }
    
    if (this.type.equals("1")&&"16".equals(this.newBranch)) {//支店16への買取入庫
      errors.addError(new SICustomError("manager.message.freeword","本社宛に買取の登録はできません"));
    }else if (this.type.equals("1")) {// 買取のとき
      SICheckValid.checkValid(errors, "支払区分", this.paymentType, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "買取先", this.comment, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    /* 0円チェック解除
    if (this.type.equals("13")) {// 保証戻りのとき
      if ("0".equals(this.purchasePrice)&&"0".equals(this.processingExpence)) {}else{
        errors.addError(new SICustomError("manager.message.freeword","「保証戻り」の区分では0円でしか入庫できません"));
      }
    }
    */
    if (this.type.equals("17")) {// 金沢弥生のとき
      if (!"5".equals(this.newBranch)) errors.addError(new SICustomError("manager.message.freeword","「金沢弥生」の区分では金沢以外には入庫できません"));
    }
    
    if (this.type.equals("5")||this.type.equals("11")) {//棚卸差異、在庫差異のとき
      try{
        if (!SIDBUtil.hasData(lConnection, "SELECT season FROM inventorytbl WHERE season >= to_char(current_date + '-1 month'::interval,'YYYYMM')")){
          errors.addError(new SICustomError("manager.message.freeword","前月末の月次処理が終了していないため登録できません"));
        }
      }catch(Exception e){
        e.printStackTrace();
      }
    }
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateNewShip</b> 入力した新規出庫データをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @return なし
   * @throws なし
   */
  public boolean validateNewShip(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    
    validateRecord(errors,lConnection);//当月の締処理がもう終わっている場合、出庫できない
    SICheckValid.checkValid(errors, "出庫数量", this.newAmount, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (this.newAmount.equals("0")) errors.addError(new SICustomError("input.data.instock.less", "出庫数量", "1"));
    SICheckValid.checkValid(errors, "出庫数量", this.newAmount, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    SICheckValid.checkValid(errors, "出庫支店", this.newBranch, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "出庫担当者", this.newCharge, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "出庫区分", this.type, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "受注番号", this.orderCode, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (errors.isEmpty()) {
      try {
        String stockAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM storestocktbl WHERE cmdtycode='" + this.cmdtyCode + "' AND individualcode='"
            + this.individualCode + "' AND branchcode='" + this.newBranch + "'");
        if (Integer.parseInt(stockAmount) < Integer.parseInt(this.newAmount)) {
          errors.addError(new SICustomError("input.data.less", "出庫数量", "在庫数量"));
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    
    if (this.type.equals("13")||this.type.equals("16")) {//支店16の保証対応、運送事故
      if ("16".equals(this.newBranch)) errors.addError(new SICustomError("manager.message.freeword","本社からは「保証対応」「運送事故」の区分では出庫できません"));
    }
    
    if (this.type.equals("18")) {// 販売保留のとき
      SICheckValid.checkValid(errors, "保留内容", this.paymentType, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "備考", this.comment, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if (this.type.equals("17")) {// 金沢弥生のとき
      if (!"5".equals(this.newBranch)) errors.addError(new SICustomError("manager.message.freeword","「金沢弥生」の区分では金沢以外からは出庫できません"));
    }
    
    if (this.type.equals("5")||this.type.equals("11")) {//棚卸差異、在庫差異のとき
      try{
        if (!SIDBUtil.hasData(lConnection, "SELECT season FROM inventorytbl WHERE season >= to_char(current_date + '-1 month'::interval,'YYYYMM')")){
          errors.addError(new SICustomError("manager.message.freeword","前月末の月次処理が終了していないため登録できません"));
        }
      }catch(Exception e){
        e.printStackTrace();
      }
    }
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateMove</b> 入力した移動データをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @return なし
   * @throws なし
   */
  public boolean validateMove(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    
    validateRecord(errors,lConnection);//当月の締処理がもう終わっている場合、移動出庫できない
    SICheckValid.checkValid(errors, "移動出庫支店", this.moveBranchFrom, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "移動出庫担当者", this.moveCharge, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "移動出庫数", this.moveAmount, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (this.moveAmount.equals("0")) errors.addError(new SICustomError("input.data.instock.less", "移動出庫数", "1"));
    SICheckValid.checkValid(errors, "移動出庫数", this.moveAmount, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    SICheckValid.checkValid(errors, "移動入庫支店", this.moveBranchTo, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (errors.isEmpty()) {
      try {
        if (this.moveBranchTo.equals(this.moveBranchFrom)) errors.addError(new SICustomError("manager.message.error.moveunmatch"));
        StringBuffer lSql1 = new StringBuffer();
        lSql1.append("SELECT amount FROM storestocktbl ");
        lSql1.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lSql1.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        lSql1.append("AND branchcode=").append(SIDBUtil.SQL2Str(this.moveBranchTo));
        
        StringBuffer lSql2 = new StringBuffer();
        lSql2.append("SELECT amount FROM storestocktbl ");
        lSql2.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lSql2.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        lSql2.append("AND branchcode=").append(SIDBUtil.SQL2Str(this.moveBranchFrom));
        
        String toAmount = SIDBUtil.getFirstData(lConnection, lSql1.toString());
        String fromAmount = SIDBUtil.getFirstData(lConnection, lSql2.toString());
        if (Integer.parseInt(fromAmount) < Integer.parseInt(this.moveAmount)) errors.addError(new SICustomError("input.data.less", "移動出庫数", "在庫数量"));
        if (SIUtil.add(toAmount, this.moveAmount).length() > 6) errors.addError(new SICustomError("input.data.less", "移動出庫数", "入庫限界数"));
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateMoveFull</b> 入力した移動データ（複数）をチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @return なし
   * @throws なし
   */
  public boolean validateMoveFull(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    String amountTotal = "0";
    
    validateRecord(errors,lConnection);//当月の締処理がもう終わっている場合、移動出庫できない
    SICheckValid.checkValid(errors, "移動出庫支店", this.moveBranchFrom, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "移動出庫担当者", this.moveCharge, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "移動出庫数", this.moveAmount, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (this.moveAmount.equals("0")) errors.addError(new SICustomError("input.data.instock.less", "移動出庫数", "1"));
    for (int i = 0; i < this.moveAmountList.length; i++) {
      if (SIUtil.isNull(this.moveAmountList[i])) this.moveAmountList[i] = "0";
      if (SICheckValid.checkValid(errors, "支店" + this.moveBranchToList[i] + "の移動入庫数", this.moveAmountList[i], SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)
          && SICheckValid.checkValid(errors, "支店" + this.moveBranchToList[i] + "の移動入庫数", this.moveAmountList[i], SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6)) {
        try {
          amountTotal = SIUtil.add(amountTotal, this.moveAmountList[i]);
          if (this.moveBranchToList[i].equals(this.moveBranchFrom) && !this.moveAmountList[i].equals("0")) errors.addError(new SICustomError("manager.message.error.moveunmatch"));
          StringBuffer lSql1 = new StringBuffer();
          lSql1.append("SELECT amount FROM storestocktbl ");
          lSql1.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
          lSql1.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
          lSql1.append("AND branchcode=").append(SIDBUtil.SQL2Str(this.moveBranchToList[i]));
          String toAmount = SIDBUtil.getFirstData(lConnection, lSql1.toString());
          if (SIUtil.add(toAmount, this.moveAmountList[i]).length() > 6)
            errors.addError(new SICustomError("input.data.less", "支店" + this.moveBranchToList[i] + "の移動入庫数", "入庫限界数"));
        } catch (SIDBAccessException e) {
          e.printStackTrace();
          errors.addError(new SICustomError("database.execute.error"));
        }
      }
    }
    if (errors.isEmpty()) {
      try {
        StringBuffer lSql2 = new StringBuffer();
        lSql2.append("SELECT amount FROM storestocktbl ");
        lSql2.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lSql2.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        lSql2.append("AND branchcode=").append(SIDBUtil.SQL2Str(this.moveBranchFrom));
        String fromAmount = SIDBUtil.getFirstData(lConnection, lSql2.toString());
        if (Integer.parseInt(fromAmount) < Integer.parseInt(this.moveAmount)) errors.addError(new SICustomError("input.data.less", "移動出庫数", "在庫数量"));
        if (!amountTotal.equals(this.moveAmount)) errors.addError(new SICustomError("input.data.match", "移動出庫数", "移動入庫数"));
      } catch (SIDBAccessException e) {
        e.printStackTrace();
        errors.addError(new SICustomError("database.execute.error"));
      }
    }
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateStoreFull</b> 入力した仕入データ（複数）をチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @return なし
   * @throws なし
   */
  public boolean validateStoreFull(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    String amountTotal = "0";
    
    validateRecord(errors,lConnection);//当月の締処理がもう終わっている場合、入庫できない
    SICheckValid.checkValid(errors, "入庫担当者", this.newCharge, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "仕入入庫数", this.newAmount, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    if (this.newAmount.equals("0")) errors.addError(new SICustomError("input.data.instock.less", "入庫数", "1"));
    for (int i = 0; i < this.storeAmountList.length; i++) {
      if (SIUtil.isNull(this.storeAmountList[i])) this.storeAmountList[i] = "0";
      if (SICheckValid.checkValid(errors, "支店" + this.storeBranchList[i] + "の仕入入庫数", this.storeAmountList[i], SICheckDataConf.SICHECK_DATA_DIGIT_TYPE)
          && SICheckValid.checkValid(errors, "支店" + this.storeBranchList[i] + "の仕入入庫数", this.storeAmountList[i], SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6)) {
        amountTotal = SIUtil.add(amountTotal, this.storeAmountList[i]);
      }
    }
    if (errors.isEmpty() && !amountTotal.equals(this.newAmount)) 
      errors.addError(new SICustomError("input.data.match", "入庫総数", "各支店の入庫合計数"));
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateReserve</b> 入力した予約割当データをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @return なし
   * @throws なし
   */
  public boolean validateReserve(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "予約割当支店", this.reserveBranch, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    if (errors.isEmpty()) {
      try {
        StringBuffer lSql = new StringBuffer();
        lSql.append("SELECT amount FROM storestocktbl ");
        lSql.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lSql.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        lSql.append("AND branchcode=").append(SIDBUtil.SQL2Str(this.reserveBranch));
        
        String stockAmount = SIDBUtil.getFirstData(lConnection, lSql.toString());
        if (Integer.parseInt(stockAmount) < Integer.parseInt(this.reserveAmount)) errors.addError(new SICustomError("input.data.less", "割当数量", "在庫数量"));
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateDelete</b> 入力した取消データをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @param store 入庫フラグ
   * @return なし
   * @throws なし
   */
  public boolean validateDelete(HttpServletRequest lRequest, Connection lConnection, boolean store) {
    SICustomErrors errors = new SICustomErrors();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    validateRecord(errors,lConnection);//当月の締処理がもう終わっている場合、取消できない
    SICheckValid.checkValid(errors, "取消No", this.deleteNo, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "取消No", this.deleteNo, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 5);
    if (errors.isEmpty()) {
      try {
        StringBuffer lSql = new StringBuffer();
        StringBuffer lConditionSql = new StringBuffer();
        String delflg = "";
        if (store) {
          lSql.append("SELECT delflg FROM storehistorytbl ");
          lConditionSql.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
          lConditionSql.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
          lConditionSql.append("AND storenumber=").append(SIDBUtil.SQL2Str(this.deleteNo));
        } else{
          lSql.append("SELECT delflg FROM shiphistorytbl ");
          lConditionSql.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
          lConditionSql.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
          lConditionSql.append("AND shipnumber=").append(SIDBUtil.SQL2Str(this.deleteNo));
        }
        lSql.append(lConditionSql);
        
        if (SIDBUtil.hasData(lConnection, lSql.toString())) {
          delflg = SIDBUtil.getFirstData(lConnection, lSql.toString());
          if (!delflg.equals("1")) errors.addError(new SICustomError("manager.message.error.stockdelete"));
          if (!store && errors.isEmpty()) {
            lSql = new StringBuffer();
            lSql.append("SELECT ordercode FROM shiphistorytbl ");
            lSql.append(lConditionSql);
            lSql.append(" AND shiptype='0' ");//販売出庫に限る
            if (SIUtil.isNotNull(SIDBUtil.getFirstData(lConnection, lSql.toString()))) errors.addError(new SICustomError("manager.message.error.stockorderdelete"));
          }
        } else if (store) errors.addError(new SICustomError("database.query.notexist", "入庫番号"));
        else if (!store) errors.addError(new SICustomError("database.query.notexist", "出庫番号"));
        
        if (errors.isEmpty()) {
          String deleteRecBranch = "";
          String deleteRecAmount = "";
          String stockAmount = "";
          
          if (store) {
            deleteRecBranch = SIDBUtil.getFirstData(lConnection, "SELECT storebranch FROM storehistorytbl " + lConditionSql.toString());
            deleteRecAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM storehistorytbl " + lConditionSql.toString());
          } else {
            deleteRecBranch = SIDBUtil.getFirstData(lConnection, "SELECT shipbranch FROM shiphistorytbl " + lConditionSql.toString());
            deleteRecAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM shiphistorytbl " + lConditionSql.toString());
          }
          stockAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM storestocktbl WHERE cmdtycode=" + SIDBUtil.SQL2Str(this.cmdtyCode) + " AND individualcode=" + SIDBUtil.SQL2Str(this.individualCode) + " AND branchcode=" + SIDBUtil.SQL2Str(deleteRecBranch));
          if (store && Integer.parseInt(stockAmount) < Integer.parseInt(deleteRecAmount)) errors.addError(new SICustomError("manager.message.error.deletenoamount"));
          if (!store && SIUtil.add(stockAmount, deleteRecAmount).length() > 6) errors.addError(new SICustomError("manager.message.error.deletefullamount"));
        }
        
        if (errors.isEmpty()) {
          if (store) {
            lSql = new StringBuffer();
            lSql.append("SELECT storebranch,amount,purchaseprice,processingexpence,storetype FROM storehistorytbl ");
            lSql.append(lConditionSql);
          } else{
            lSql = new StringBuffer();
            lSql.append("SELECT shipbranch,amount,purchaseprice,processingexpence,shiptype FROM shiphistorytbl ");
            lSql.append(lConditionSql);
          }
          lStatement = lConnection.createStatement();
          lResultSet = lStatement.executeQuery(lSql.toString());
          lResultSet.next();
          if (store) {
            this.setNewBranch(lResultSet.getString("storebranch"));
            this.setType(lResultSet.getString("storetype"));
          } else {
            this.setNewBranch(lResultSet.getString("shipbranch"));
            this.setType(lResultSet.getString("shiptype"));
          }
          this.setNewAmount(lResultSet.getString("amount"));
          this.setPurchasePrice(lResultSet.getString("purchaseprice"));
          this.setProcessingExpence(lResultSet.getString("processingexpence"));
        }
      } catch (Exception e) {
        e.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
    }
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateIndividual</b> 入力した在庫コード/JANコードをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @return なし
   * @throws なし
   */
  public boolean validateIndividual(HttpServletRequest lRequest, Connection lConnection) {
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lCountBuf = new StringBuffer();
    StringBuffer lSqlBuf = new StringBuffer();
    if (SIUtil.isNotNull(lRequest.getParameter("janCodeIndividual"))){
      String janCode = lRequest.getParameter("janCodeIndividual");
      try {
        this.setCmdtyCode(SIDBUtil.getFirstData(lConnection, "SELECT cmdtyCode FROM individualTbl WHERE janCodeIndividual = "+SIDBUtil.SQL2Str(janCode)));
        this.setIndividualCode(SIDBUtil.getFirstData(lConnection, "SELECT individualCode FROM individualTbl WHERE janCodeIndividual = "+SIDBUtil.SQL2Str(janCode)));
      } catch (Exception e) {
        e.printStackTrace();
        errors.addError(new SICustomError("database.query.notexist","商品"));
      }
      if (SIUtil.isNull(this.getCmdtyCode())||SIUtil.isNull(this.getCmdtyCode())) {
        errors.addError(new SICustomError("database.query.notexist","商品"));
      }
    } else {
      SICheckValid.checkValid(errors, "在庫コード（リンク）", this.getIndividualCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "在庫コード（リンク）", this.getIndividualCode(), SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
      
      try {
        if (errors.isEmpty() && SIUtil.isNull(this.getCmdtyCode())) {
          lCountBuf.append("SELECT count(*) FROM individualtbl WHERE individualcode=").append(SIDBUtil.Func2Str(this.getIndividualCode()));
          lSqlBuf.append("SELECT cmdtycode FROM individualtbl WHERE individualcode=").append(SIDBUtil.Func2Str(this.getIndividualCode()));
          if (!SIDBUtil.getFirstData(lConnection, lCountBuf.toString()).equals("1")) {
            errors.addError(new SICustomError("manager.message.error.individual.nothing"));
          } else {
            this.setCmdtyCode(SIDBUtil.getFirstData(lConnection, lSqlBuf.toString()));
          }
        } else if (errors.isEmpty()) { return true; }
      } catch (Exception e) {
        e.printStackTrace();
        errors.addError(new SICustomError("manager.message.error.individual.nothing"));
      }
    }
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateApprove</b> 入力した承認データをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @param store 入庫フラグ
   * @return なし
   * @throws なし
   */
  public boolean validateApprove(HttpServletRequest lRequest, Connection lConnection, boolean store) {
    SICustomErrors errors = new SICustomErrors();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    validateRecord(errors,lConnection);//当月の締処理がもう終わっている場合、承認できない
    try {
      StringBuffer lSql = new StringBuffer();
      if (store) {
        lSql.append("SELECT storebranch,amount,purchaseprice,processingexpence ");
        lSql.append("FROM storehistorytbl ");
        lSql.append("WHERE delflg=0 ");
        lSql.append("AND cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lSql.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        lSql.append("AND storenumber=").append(SIDBUtil.SQL2Str(this.number));
      }else{
        lSql.append("SELECT shipbranch,amount,purchaseprice,processingexpence ");
        lSql.append("FROM shiphistorytbl ");
        lSql.append("WHERE delflg=0 ");
        lSql.append("AND cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lSql.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        lSql.append("AND shipnumber=").append(SIDBUtil.SQL2Str(this.number));
      }
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSql.toString());
      if (!lResultSet.next()) errors.addError(new SICustomError("database.query.notexist", "未承認データ"));
      if (store) this.setNewBranch(lResultSet.getString("storebranch"));
      else {
        this.setNewBranch(lResultSet.getString("shipbranch"));
        this.setPurchasePrice(lResultSet.getString("purchaseprice"));
        this.setProcessingExpence(lResultSet.getString("processingexpence"));
      }
      this.setNewAmount(lResultSet.getString("amount"));
      
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    
    if (this.type.equals("8")) {// 一時出庫のとき
      errors.addError(new SICustomError("manager.message.freeword","この区分は出庫できません"));
    }
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateRejection</b> 入力した却下データをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @param store 入庫フラグ
   * @return なし
   * @throws なし
   */
  public boolean validateRejection(HttpServletRequest lRequest, Connection lConnection, boolean store) {
    SICustomErrors errors = new SICustomErrors();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    validateRecord(errors,lConnection);//当月の締処理がもう終わっている場合、却下できない
    try {
      StringBuffer lSql = new StringBuffer();
      if (store) {
        lSql.append("SELECT storebranch,amount,purchaseprice,processingexpence ");
        lSql.append("FROM storehistorytbl ");
        lSql.append("WHERE delflg=0 ");
        lSql.append("AND cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lSql.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        lSql.append("AND storenumber=").append(SIDBUtil.SQL2Str(this.number));
      }else{
        lSql.append("SELECT shipbranch,amount,purchaseprice,processingexpence ");
        lSql.append("FROM shiphistorytbl ");
        lSql.append("WHERE delflg=0 ");
        lSql.append("AND cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lSql.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        lSql.append("AND shipnumber=").append(SIDBUtil.SQL2Str(this.number));
      }
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSql.toString());
      if (!lResultSet.next()) errors.addError(new SICustomError("database.query.notexist", "未承認データ"));
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  /**
   * <b>validateCorrection</b> 入力した訂正データをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @param store 入庫フラグ
   * @return なし
   * @throws なし
   */
  public boolean validateCorrection(HttpServletRequest lRequest, Connection lConnection, boolean store) {
    SICustomErrors errors = new SICustomErrors();
    
    SICheckValid.checkValid(errors, "訂正No", this.correctNo, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "訂正No", this.correctNo, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 5);
    if (errors.isEmpty()) {
      try {
        StringBuffer lSql = new StringBuffer();
        StringBuffer lConditionSql1 = new StringBuffer();
        StringBuffer lConditionSql2 = new StringBuffer();
        
        lConditionSql1.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
        lConditionSql1.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
        
        //該当の商品マスタに行ロック
        SIDBUtil.hasData(lConnection, "SELECT purchaseprice FROM individualtbl " + lConditionSql1.toString() + "FOR UPDATE");
        
        String purchasePrice = SIDBUtil.getFirstData(lConnection, "SELECT CASE WHEN amountflg='1' THEN purchaseprice ELSE null END FROM individualtbl " + lConditionSql1.toString());
        if (SIUtil.isNull(purchasePrice)) this.setNoStock(true);
        
        String fullAmount = SIDBUtil.getFirstData(lConnection, "SELECT total FROM realstocktotalvw " + lConditionSql1.toString());
        
        String delflg = "";
        if (store) {
          lSql.append("SELECT delflg FROM storehistorytbl ");
          lConditionSql2.append("AND storenumber=").append(SIDBUtil.SQL2Str(this.correctNo));
        } else{
          lSql.append("SELECT delflg FROM shiphistorytbl ");
          lConditionSql2.append("AND shipnumber=").append(SIDBUtil.SQL2Str(this.correctNo));
        }
        lSql.append(lConditionSql1);
        lSql.append(lConditionSql2);
        
        if (SIDBUtil.hasData(lConnection, lSql.toString())) {
          delflg = SIDBUtil.getFirstData(lConnection, lSql.toString());
          if (!delflg.equals("1") && !delflg.equals("4")) errors.addError(new SICustomError("manager.message.error.stockcorrect"));
        } else if (store) errors.addError(new SICustomError("database.query.notexist", "入庫番号"));
        else if (!store) errors.addError(new SICustomError("database.query.notexist", "出庫番号"));
        
        SICheckValid.checkValid(errors, "訂正仕入単価", this.correctPurchasePrice, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        SICheckValid.checkValid(errors, "訂正仕入単価", this.correctPurchasePrice, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 8);
        
        if (!this.isNoStock) {
          
          String correctRecBranch = "";
          String correctRecAmount = "";
          String correctRecPurchase = "";
          String stockAmount = "";
          String newAmount = "";
          String purchaseAll1 = "";
          String purchaseAll2 = "";
          String purchaseAll3 = "";
          String purchaseAll4 = "";
          
          if (store) {
            correctRecBranch = SIDBUtil.getFirstData(lConnection, "SELECT storebranch FROM storehistorytbl " + lConditionSql1.toString() + lConditionSql2.toString());
            correctRecAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM storehistorytbl " + lConditionSql1.toString() + lConditionSql2.toString());
            correctRecPurchase = SIDBUtil.getFirstData(lConnection, "SELECT purchaseprice FROM storehistorytbl " + lConditionSql1.toString() + lConditionSql2.toString());
            stockAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM storestocktbl " + lConditionSql1.toString() + " AND branchcode=" + SIDBUtil.SQL2Str(correctRecBranch));
            newAmount = this.correctAmount;
            
            // 数量入力マスク用
            this.setCorrectAmount(correctRecAmount);
            newAmount = correctRecAmount;
            
            SICheckValid.checkValid(errors, "訂正数量", this.correctAmount, SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
            SICheckValid.checkValid(errors, "訂正数量", this.correctAmount, SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
            
            if (errors.isEmpty()) {
              if (Integer.parseInt(SIUtil.add(stockAmount, this.correctAmount)) < Integer.parseInt(correctRecAmount))
                errors.addError(new SICustomError("manager.message.error.correctnoamount"));
              if (SIUtil.sub(SIUtil.add(stockAmount, this.correctAmount), correctRecAmount).length() > 6)
                errors.addError(new SICustomError("manager.message.error.correctfullamount"));
            }
          } else {
            correctRecBranch = SIDBUtil.getFirstData(lConnection, "SELECT shipbranch FROM shiphistorytbl " + lConditionSql1.toString() + lConditionSql2.toString());
            correctRecAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM shiphistorytbl " + lConditionSql1.toString() + lConditionSql2.toString());
            correctRecPurchase = SIDBUtil.getFirstData(lConnection, "SELECT purchaseprice FROM shiphistorytbl " + lConditionSql1.toString() + lConditionSql2.toString());
            stockAmount = SIDBUtil.getFirstData(lConnection, "SELECT amount FROM storestocktbl " + lConditionSql1.toString() + " AND branchcode=" + SIDBUtil.SQL2Str(correctRecBranch));
            newAmount = correctRecAmount;
          }
          
          if (errors.isEmpty()) {
            purchaseAll1 = SIUtil.multi(purchasePrice, fullAmount);
            purchaseAll2 = SIUtil.multi(this.correctPurchasePrice, newAmount);
            purchaseAll3 = correctRecPurchase;
            
            if ("0".equals(fullAmount)) {
              purchaseAll4 = "0";
            } else if(store) {
              purchaseAll4 = SIUtil.div(SIUtil.sub(SIUtil.add(purchaseAll1, purchaseAll2), purchaseAll3), SIUtil.sub(SIUtil.add(fullAmount, newAmount), correctRecAmount));
            } else {
              purchaseAll4 = SIUtil.div(SIUtil.sub(SIUtil.add(purchaseAll1, purchaseAll3), purchaseAll2), SIUtil.sub(SIUtil.add(fullAmount, correctRecAmount), newAmount));
            }
            if (Integer.parseInt(purchaseAll4) < 0) errors.addError(new SICustomError("manager.message.error.correctnopurchase"));
          }
        } else if(store){
          this.setCorrectAmount(SIDBUtil.getFirstData(lConnection, "SELECT amount FROM storehistorytbl " + lConditionSql1.toString() + lConditionSql2.toString()));
        }
        if(errors.isEmpty() && !store){//入庫履歴に対応する未承認入庫がないかチェック
          StringBuffer storeSearchSql = new StringBuffer();
          storeSearchSql.append("SELECT * FROM storehistorytbl WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode));
          storeSearchSql.append(" AND individualcode = ").append(SIDBUtil.SQL2Str(this.individualCode));
          storeSearchSql.append(" AND ordercode = ").append(SIDBUtil.SQL2Str(this.correctNo));
          storeSearchSql.append(" AND delflg = '0'");
          SICheckValid.checkNotExist(errors, lConnection, "未承認入庫", storeSearchSql.toString());
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    
    if (!errors.isEmpty()) {
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  public boolean isMultiShippment(Connection lConnection) {
    boolean res = false;
    try {
      StringBuffer lSql = new StringBuffer();
      lSql.append("SELECT a.* FROM shiphistorytbl a ");
      lSql.append("WHERE a.cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode));
      lSql.append(" AND a.individualcode=").append(SIDBUtil.SQL2Str(this.individualCode));
      lSql.append(" AND a.shipnumber=").append(SIDBUtil.SQL2Str(this.correctNo));
      lSql.append(" AND EXISTS");
      lSql.append(" (SELECT b.* FROM shiphistorytbl b");
      lSql.append("  WHERE a.cmdtycode=b.cmdtycode");
      lSql.append("   AND a.individualcode=b.individualcode");
      lSql.append("   AND a.ordercode=b.ordercode");
      lSql.append("   AND a.shipbranch!=b.shipbranch");
      lSql.append("   AND b.delflg='1')");
      res = SIDBUtil.hasData(lConnection, lSql.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
    return res;
  }
  
  public String[] getOtherShippmentNumber(Connection lConnection) {
    String[] res = null;
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    try {
      StringBuffer lCountSql = new StringBuffer();
      StringBuffer lListSql = new StringBuffer();
      StringBuffer lBodySql = new StringBuffer();
      
      lCountSql.append("SELECT count(a.shipnumber) ");
      lListSql.append("SELECT a.shipnumber ");
      lBodySql.append("FROM shiphistorytbl a ");
      lBodySql.append("WHERE a.cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode));
      lBodySql.append(" AND a.individualcode=").append(SIDBUtil.SQL2Str(this.individualCode));
      lBodySql.append(" AND EXISTS");
      lBodySql.append(" (SELECT b.* FROM shiphistorytbl b");
      lBodySql.append("  WHERE a.cmdtycode=b.cmdtycode");
      lBodySql.append("   AND a.individualcode=b.individualcode");
      lBodySql.append("   AND a.ordercode=b.ordercode");
      lBodySql.append("   AND a.shipbranch<>b.shipbranch");
      lBodySql.append("   AND b.shipnumber=").append(SIDBUtil.SQL2Str(this.correctNo));
      lBodySql.append("   AND b.delflg='1')");
      lCountSql.append(lBodySql);
      lListSql.append(lBodySql);
      
      res = new String[Integer.parseInt(SIDBUtil.getFirstData(lConnection, lCountSql.toString()))];
      
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lListSql.toString());
      int index = 0;
      
      while (lResultSet.next()) {
        res[index] = lResultSet.getString("shipnumber");
        index++;
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return res;
  }
  
  public Collection getTypeCollection(boolean store) throws SIDBAccessException {
    Collection lTypeColl = new ArrayList();
    lTypeColl.add(new SINameValue("", ""));
    if (store) {
      lTypeColl.add(new SINameValue("買取", "1"));
      lTypeColl.add(new SINameValue("保証戻り", "13"));
    } else {
      lTypeColl.add(new SINameValue("保証対応", "13"));
      //lTypeColl.add(new SINameValue("貸出品", "9"));
      lTypeColl.add(new SINameValue("廃棄", "1"));
      //lTypeColl.add(new SINameValue("加工修理", "2"));
      lTypeColl.add(new SINameValue("講習会", "14"));
      lTypeColl.add(new SINameValue("サンプル", "15"));
      lTypeColl.add(new SINameValue("運送事故", "16"));
      lTypeColl.add(new SINameValue("返品", "8"));
      lTypeColl.add(new SINameValue("一時出庫", "18"));
    }
    //lTypeColl.add(new SINameValue("金沢弥生", "17"));
    lTypeColl.add(new SINameValue("コード替", "12"));
    lTypeColl.add(new SINameValue("在庫差異", "11"));
    //lTypeColl.add(new SINameValue("棚卸差異", "5"));
    return lTypeColl;
  }
  
  public Collection getTypeCollectionAdmin(boolean store) throws SIDBAccessException {
    Collection lTypeColl = new ArrayList();
    lTypeColl.add(new SINameValue("", ""));
    if (store) {
      lTypeColl.add(new SINameValue("買取", "1"));
      lTypeColl.add(new SINameValue("保証戻り", "13"));
    } else {
      lTypeColl.add(new SINameValue("保証対応", "13"));
      //lTypeColl.add(new SINameValue("貸出品", "9"));
      lTypeColl.add(new SINameValue("廃棄", "1"));
      //lTypeColl.add(new SINameValue("加工修理", "2"));
      lTypeColl.add(new SINameValue("講習会", "14"));
      lTypeColl.add(new SINameValue("サンプル", "15"));
      lTypeColl.add(new SINameValue("運送事故", "16"));
      lTypeColl.add(new SINameValue("返品", "8"));
      lTypeColl.add(new SINameValue("一時出庫", "18"));
    }
    //lTypeColl.add(new SINameValue("金沢弥生", "17"));
    lTypeColl.add(new SINameValue("コード替", "12"));
    lTypeColl.add(new SINameValue("在庫差異", "11"));
    lTypeColl.add(new SINameValue("棚卸差異", "5"));
    lTypeColl.add(new SINameValue("その他", "4"));
    lTypeColl.add(new SINameValue("訂正", "6"));
    lTypeColl.add(new SINameValue("評価替え", "10"));
    return lTypeColl;
  }
  
  public Collection getStockCollection(Connection lConnection) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlBuf = new StringBuffer();
    SIStoreStock lStock = new SIStoreStock();
    Collection lStocks = new ArrayList();
    
    if ("1".equals(this.getRealAmountFlg())) {
      lSqlBuf.append("SELECT b.branchcode,b.branchname,a.realamount,a.ecamount From realstockvw AS a, branchtbl AS b ");
      lSqlBuf.append("WHERE a.individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
      lSqlBuf.append("AND a.cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
      lSqlBuf.append("AND a.branchcode=b.branchcode ");
      lSqlBuf.append("ORDER BY a.branchcode ASC");
    }else{
      lSqlBuf.append("SELECT b.branchcode,b.branchname,'' AS realamount,a.amount AS ecamount From storestocktbl AS a, branchtbl AS b ");
      lSqlBuf.append("WHERE a.individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
      lSqlBuf.append("AND a.cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
      lSqlBuf.append("AND a.branchcode=b.branchcode ");
      lSqlBuf.append("ORDER BY a.branchcode ASC");
      
    }
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      while (lResultSet.next()) {
        lStock = new SIStoreStock();
        lStock.setEncode(SIConfig.SIENCODE_NONE);
        lStock.setBranchCode(lResultSet.getString("BranchCode"));
        lStock.setBranchName(lResultSet.getString("BranchName"));
        lStock.setTotal(lResultSet.getString("RealAmount"));
        lStock.setAmount(lResultSet.getString("EcAmount"));
        lStocks.add(lStock);
      }
    } catch (SQLException ex) {
      ex.printStackTrace();
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lStocks;
  }
  
  public Collection getReserveCollection(Connection lConnection) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlBuf = new StringBuffer();
    SIReserveOrder lReserve = new SIReserveOrder();
    Collection lReserves = new ArrayList();
    
    lSqlBuf.append("SELECT reservecode,reservedatetime,custname,amount FROM reserveordertbl ");
    lSqlBuf.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
    lSqlBuf.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
    lSqlBuf.append("AND reserveflg='0' ");
    lSqlBuf.append("ORDER BY reservecode ASC");
    
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      while (lResultSet.next()) {
        lReserve = new SIReserveOrder();
        lReserve.setEncode(SIConfig.SIENCODE_NONE);
        lReserve.setReserveCode(lResultSet.getString("ReserveCode"));
        lReserve.setReserveDateTime(lResultSet.getString("ReserveDateTime"));
        lReserve.setCustName(lResultSet.getString("CustName"));
        lReserve.setAmount(lResultSet.getString("Amount"));
        lReserves.add(lReserve);
      }
    } catch (SQLException ex) {
      ex.printStackTrace();
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lReserves;
  }
  
  public Collection getCollection(Connection lConnection, boolean store, boolean approval) throws SIDBAccessException, SIFatalException {
    if(!approval) return getApprovalCollection(lConnection, store);
    else return getCollection(lConnection, store);
  }
  public Collection getCollection(Connection lConnection, boolean store) throws SIDBAccessException, SIFatalException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lCountSqlBuf = new StringBuffer();
    StringBuffer lItemBuf = new StringBuffer();
    StringBuffer lSqlBuf = new StringBuffer();
    SIStockHistory lStockHistory = new SIStockHistory();
    Collection lStockHistorys = new ArrayList();
    
    if (store) {
      lCountSqlBuf.append("SELECT count(a.storenumber) FROM storehistorytbl a ");
      lItemBuf.append("SELECT a.*,b.branchname,c.chargename ");
      lItemBuf.append(",CASE WHEN a.storetype='0' THEN a.initdatetime ");
      lItemBuf.append("      WHEN a.calcdatetime IS NULL THEN a.initdatetime ");
      lItemBuf.append("      ELSE a.calcdatetime::date END AS calcdate ");
      lItemBuf.append("FROM storehistorytbl AS a ");
      lItemBuf.append("LEFT OUTER JOIN chargetbl AS c ON a.storecharge=c.chargecode ,branchtbl AS b ");
    } else {
      lCountSqlBuf.append("SELECT count(a.shipnumber) FROM shiphistorytbl a ");
      lItemBuf.append("SELECT a.*,b.branchname,c.chargename ");
      lItemBuf.append(",CASE WHEN a.shiptype='0' THEN a.initdatetime ");
      lItemBuf.append("      WHEN a.calcdatetime IS NULL THEN a.initdatetime ");
      lItemBuf.append("      ELSE a.calcdatetime::date END AS calcdate ");
      lItemBuf.append("FROM shiphistorytbl AS a ");
      lItemBuf.append("LEFT OUTER JOIN chargetbl AS c ON a.shipcharge=c.chargecode ,branchtbl AS b ");
    }
    lSqlBuf.append("WHERE a.cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
    lSqlBuf.append("AND a.individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
    lSqlBuf.append("AND NOT a.delflg='0' ");
    if (store) {
      lCountSqlBuf.append(lSqlBuf);
      lSqlBuf.append("AND a.storebranch=b.branchcode ");
      lItemBuf.append(lSqlBuf).append("ORDER BY a.storenumber DESC");
    } else {
      lCountSqlBuf.append(lSqlBuf);
      lSqlBuf.append("AND a.shipbranch=b.branchcode ");
      lItemBuf.append(lSqlBuf).append("ORDER BY a.shipnumber DESC");
    }
    
    try {
      
      String rowCnt = SIDBUtil.getFirstData(lConnection, lCountSqlBuf.toString());
      if (rowCnt.equals("") || rowCnt == null) {
        rowCnt = "0";
      }
      int lRecordCount = Integer.parseInt(rowCnt);// レコード数の取得
      
      int lPageSize = this.getPageSize();// ページサイズ
      int lPageNumber = Integer.parseInt(getPageNumberTxtNew());;// ページ番号
      
      int lMaxPage = lRecordCount / lPageSize;
      if (lRecordCount % lPageSize > 0) {
        lMaxPage++;
      }
      if (lPageNumber > lMaxPage) lPageNumber = lMaxPage;
      
      // 開始レコードの番号の設定
      int lFromInx = (lPageNumber - 1) * lPageSize;
      // 終止のレコード番号の設定
      int lToInx = lFromInx + lPageSize - 1;
      if (lFromInx < 0) lFromInx = 0;
      if (lToInx < 0) lToInx = 0;
      
      lStatement = lConnection.createStatement();
      lItemBuf.append(" LIMIT ").append(lPageSize);
      if(lFromInx>0) lItemBuf.append(" OFFSET ").append(lFromInx);
      lResultSet = lStatement.executeQuery(lItemBuf.toString());
      
      
      for (int jj = 0; jj < lFromInx; jj++)
        lStockHistorys.add(null);
      
      // 入出庫レコードのセットの作成
      int lIndex = 0;
      
      // 入出庫レコードのセットの作成
      while (lResultSet.next() && lIndex < lPageSize) {
        lStockHistory = new SIStockHistory();
        lStockHistory.setEncode(SIConfig.SIENCODE_NONE);
        if (store) {
          lStockHistory.setNumber(lResultSet.getString("StoreNumber"));
          lStockHistory.setType(lResultSet.getString("StoreType"));
          lStockHistory.setBranchCode(lResultSet.getString("StoreBranch"));
        } else {
          lStockHistory.setNumber(lResultSet.getString("ShipNumber"));
          lStockHistory.setType(lResultSet.getString("ShipType"));
          lStockHistory.setBranchCode(lResultSet.getString("ShipBranch"));
        }
        if (lResultSet.getString("Amount").equals("0") || lResultSet.getString("Amount").equals("1")) {
          lStockHistory.setPurchasePrice(lResultSet.getString("PurchasePrice"));
        } else {
          lStockHistory.setPurchasePrice(SIUtil.div(lResultSet.getString("PurchasePrice"), lResultSet.getString("Amount")));
        }
        lStockHistory.setProcessingExpence(lResultSet.getString("ProcessingExpence"));
        lStockHistory.setOrderCode(lResultSet.getString("OrderCode"));
        lStockHistory.setBranch(lResultSet.getString("BranchName"));
        lStockHistory.setCharge(lResultSet.getString("ChargeName"));
        lStockHistory.setAmount(lResultSet.getString("Amount"));
        lStockHistory.setComment(lResultSet.getString("Comment"));
        lStockHistory.setDelFlg(lResultSet.getString("DelFlg"));
        lStockHistory.setInitDate(lResultSet.getString("CalcDate"));
        lStockHistorys.add(lStockHistory);
        lIndex++;
      }
      for (int jj = lFromInx + lPageSize; jj < lRecordCount; jj++) lStockHistorys.add(null);
    } catch (SQLException e1) {
      e1.printStackTrace();
      throw new SIDBAccessException(e1);
    } catch (SIFatalException e2) {
      e2.printStackTrace();
      throw new SIFatalException(e2);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lStockHistorys;
  }
  

  public Collection getApprovalCollection(Connection lConnection, boolean store) throws SIDBAccessException, SIFatalException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlBuf = new StringBuffer();
    SIStockHistory lStockHistory = new SIStockHistory();
    Collection lStockHistorys = new ArrayList();
    
    if (store) {
      lSqlBuf.append("SELECT a.*,b.branchname,c.chargename From storehistorytbl AS a ");
      lSqlBuf.append("LEFT OUTER JOIN chargetbl AS c ON a.storecharge=c.chargecode ,branchtbl AS b ");
    } else {
      lSqlBuf.append("SELECT a.*,b.branchname,c.chargename From shiphistorytbl AS a ");
      lSqlBuf.append("LEFT OUTER JOIN chargetbl AS c ON a.shipcharge=c.chargecode ,branchtbl AS b ");
    }
    lSqlBuf.append("WHERE cmdtycode=").append(SIDBUtil.SQL2Str(this.cmdtyCode," "));
    lSqlBuf.append("AND individualcode=").append(SIDBUtil.SQL2Str(this.individualCode," "));
    lSqlBuf.append("AND delflg='0' ");
    if (store) lSqlBuf.append("AND a.storebranch=b.branchcode ORDER BY a.storenumber DESC");
    else lSqlBuf.append("AND a.shipbranch=b.branchcode ORDER BY a.shipnumber DESC");
    
    try {
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(lSqlBuf.toString());
      
      while (lResultSet.next()) {
        lStockHistory = new SIStockHistory();
        lStockHistory.setEncode(SIConfig.SIENCODE_NONE);
        if (store) {
          lStockHistory.setNumber(lResultSet.getString("StoreNumber"));
          lStockHistory.setType(lResultSet.getString("StoreType"));
          lStockHistory.setBranchCode(lResultSet.getString("StoreBranch"));
          lStockHistory.setProcessingExpence(lResultSet.getString("ProcessingExpence"));
        } else {
          lStockHistory.setNumber(lResultSet.getString("ShipNumber"));
          lStockHistory.setType(lResultSet.getString("ShipType"));
          lStockHistory.setBranchCode(lResultSet.getString("ShipBranch"));
        }
        if (lResultSet.getString("Amount").equals("0") || lResultSet.getString("Amount").equals("1")) {
          lStockHistory.setPurchasePrice(lResultSet.getString("PurchasePrice"));
        } else {
          lStockHistory.setPurchasePrice(SIUtil.div(lResultSet.getString("PurchasePrice"), lResultSet.getString("Amount")));
        }
        lStockHistory.setOrderCode(lResultSet.getString("OrderCode"));
        lStockHistory.setBranch(lResultSet.getString("BranchName"));
        lStockHistory.setCharge(lResultSet.getString("ChargeName"));
        lStockHistory.setAmount(lResultSet.getString("Amount"));
        lStockHistory.setComment(lResultSet.getString("Comment"));
        lStockHistory.setDelFlg(lResultSet.getString("DelFlg"));
        lStockHistory.setInitDate(lResultSet.getString("InitDateTime"));
        lStockHistorys.add(lStockHistory);
      }
    } catch (SQLException e1) {
      e1.printStackTrace();
      throw new SIDBAccessException(e1);
    } catch (SIFatalException e2) {
      e2.printStackTrace();
      throw new SIFatalException(e2);
    } finally {
      SIDBUtil.close(lResultSet, lStatement);
    }
    return lStockHistorys;
  }
  
  
  public void setFlg(Connection lConnection, boolean store) {
    String rsrv = "SELECT * FROM reserveordertbl WHERE cmdtycode=" + SIDBUtil.SQL2Str(this.cmdtyCode) + " AND individualcode=" + SIDBUtil.SQL2Str(this.individualCode) + " AND reserveflg='0'";
    String noAp = "";
    if (store) noAp = "SELECT * FROM storehistorytbl WHERE cmdtycode=" + SIDBUtil.SQL2Str(this.cmdtyCode) + " AND individualcode=" + SIDBUtil.SQL2Str(this.individualCode) + " AND delflg='0'";
    else noAp = "SELECT * FROM shiphistorytbl WHERE cmdtycode=" + SIDBUtil.SQL2Str(this.cmdtyCode) + " AND individualcode=" + SIDBUtil.SQL2Str(this.individualCode) + " AND delflg='0'";
    try {
      this.setReserveFlg(SIDBUtil.hasData(lConnection, rsrv));
      this.setNeverApproveFlg(SIDBUtil.hasData(lConnection, noAp));
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  
  public String getNewStoreNumber(Connection lConnection) {
    String storeNo = "";
    String storeSql = "SELECT MAX(storenumber) FROM storehistorytbl WHERE cmdtycode=" + SIDBUtil.SQL2Str(this.cmdtyCode) + " AND individualcode=" + SIDBUtil.SQL2Str(this.individualCode);
    try {
      if (SIUtil.isNotNull(SIDBUtil.getFirstData(lConnection, storeSql))) storeNo = SIUtil.add(SIDBUtil.getFirstData(lConnection, storeSql), "1");
      else storeNo = "1";
    } catch (Exception e) {
      e.printStackTrace();
    }
    return storeNo;
  }
  
  public String getNewShipNumber(Connection lConnection) {
    String shipNo = "";
    String shipSql = "SELECT MAX(shipnumber) FROM shiphistorytbl WHERE cmdtycode=" + SIDBUtil.SQL2Str(this.cmdtyCode) + " AND individualcode=" + SIDBUtil.SQL2Str(this.individualCode);
    try {
      if (SIUtil.isNotNull(SIDBUtil.getFirstData(lConnection, shipSql))) shipNo = SIUtil.add(SIDBUtil.getFirstData(lConnection, shipSql), "1");
      else shipNo = "1";
    } catch (Exception e) {
      e.printStackTrace();
    }
    return shipNo;
  }
}