/*
 * 作成日: 2006/02/13
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DecimalFormat;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Category;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SILogin;
import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
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.SIHTMLUtil;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

/**
 * @author mmp-hongminjeoug
 *
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
public class UICmdtyKeep extends SIBasic {
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  private String shopCode = "";
  
  private String ctgryCode = "";//カテゴリコード
  
  private String cmdtyName = "";//商品名
  
  private String usedNewFlg = "";//中古・新品区分
  
  private String bgPrice = "";//価格
  
  private String deliveryTypeCode = "";//送料種別
  
  private String cmdtySize = "";//送料ﾗﾝｸ
  
  private String amount = "";//数量（キープ）
  
  private String makerCode = "";//ブランドコード
  
  private String cmdtyCode = "";//親コード 
  
  private String colorCode = "";//色コード
  
  private String individualCode = "";//在庫コード
  
  private String branchCode = "999";//支店コード
  
  private String purchasePrice2 = "";//在庫管理しない場合の仕入価格
  
  private String stockCode = "";//仕入先コード
  
  public void init(HttpServletRequest lRequest, SIURLParameter lUrlParam) {
    super.init(lRequest, lUrlParam);
    SILogin manLogin = SIHTMLUtil.getLogin(lRequest);
    this.setShopCode(manLogin.getMallShopCode());
    this.setCtgryCode((String)lUrlParam.getParam("keepctgryCode"));
    this.setCmdtyName((String)lUrlParam.getParam("keepcmdtyName"));
    this.setUsedNewFlg((String)lUrlParam.getParam("keepusedNewFlg"));
    this.setBgPrice((String)lUrlParam.getParam("bgPrice"));
    this.setDeliveryTypeCode((String)lUrlParam.getParam("deliveryTypeCode"));
    this.setCmdtySize((String)lUrlParam.getParam("cmdtySize"));
    this.setPurchasePrice2((String)lUrlParam.getParam("purchasePrice2"));
    this.setAmount((String)lUrlParam.getParam("amount"));
    this.setStockCode((String)lUrlParam.getParam("stockCode"));
  }
  
  public boolean validate(HttpServletRequest lRequest,Connection conn){
    SICustomErrors errors=new SICustomErrors();
    StringBuffer lSqlBuf = new StringBuffer();
    
    SICheckValid.checkValid(errors,"カテゴリ",this.getCtgryCode(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors,"商品名",this.getCmdtyName(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_CMDTYNAME_TYPE);
    SICheckValid.checkValid(errors,"商品名",this.getCmdtyName(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,100);
    SICheckValid.checkValid(errors,"中古・新品",this.getUsedNewFlg(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors,"仕入単価",this.getPurchasePrice2(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors,"仕入単価",this.getPurchasePrice2(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,8);
    SICheckValid.checkValid(errors,"販売単価",this.getBgPrice(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors,"販売単価",this.getBgPrice(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE,8);
    SICheckValid.checkValid(errors,"数量",this.getAmount(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors,"数量",this.getAmount(),SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 6);
    if(SIUtil.isNotNull(this.getAmount())&&this.getAmount().equals("0")) errors.addError((new SICustomError("input.data.instock.less","数量","1")));
    
    SICheckValid.checkValid(errors,"送料ランク",this.getCmdtySize(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors,"配送種別",this.getDeliveryTypeCode(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    
    if (SIUtil.isNotNull(this.getShopCode())&&SIUtil.isNotNull(this.getDeliveryTypeCode())){
      lSqlBuf=new StringBuffer("SELECT MallShopCode FROM DeliveryTypeMTbl ");
      lSqlBuf.append("WHERE MallShopCode=" + SIDBUtil.SQL2Str(this.getShopCode()," "));
      lSqlBuf.append("AND DeliveryTypeCode="+SIDBUtil.SQL2Str(this.getDeliveryTypeCode()));
      SICheckValid.checkExist(errors,conn,"配送種別",lSqlBuf.toString());
    }
    if("1".equals(this.getUsedNewFlg())||"2".equals(this.getUsedNewFlg())){
      SICheckValid.checkValid(errors,"仕入先",this.getStockCode(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if (!errors.isEmpty()){
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
      return false;
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
      return true;
    }
  }
  
  public String getCmdtyCode(Connection lConnection){
    Statement lStatement=null;
    ResultSet lResultSet=null;
    String maxCmdtyCode = new String();
    maxCmdtyCode = "0";//最大親コード初期値
    StringBuffer sqlBuf = new StringBuffer();
    sqlBuf.append("SELECT max(to_number(cmdtycode,'9999999999999'))+1 as maxcmdtycode FROM CmdtyMTbl");
    try {
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(sqlBuf.toString());
      while (lResultSet.next()){
        maxCmdtyCode = lResultSet.getString("maxcmdtycode");
      }
    } catch (SQLException e) {
      log.debug("exception sql = " + sqlBuf.toString());
      e.printStackTrace();
    } catch (Exception e1) {
      e1.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement,lResultSet);
    }
    this.setCmdtyCode(maxCmdtyCode);
    return maxCmdtyCode;
    
  }
  public String getMakerCode(Connection lConnection){
    Statement lStatement = null;
    ResultSet lResultSet = null;
    String result = new String("1001");
    StringBuffer lSqlBuf=new StringBuffer();
    lSqlBuf.append("SELECT Min(MakerCode) as MakerCode FROM MakerTbl ");
    lSqlBuf.append("WHERE MAKERNAME = "+SIDBUtil.SQL2Str("　"));
    
    try {
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      while(lResultSet.next()){
        result=lResultSet.getString("MakerCode");
      }
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      SIDBUtil.close(lStatement,lResultSet);
    }
    this.setMakerCode(result);
    return result;
    
  }
  
  public String getColorCode(Connection lConnection){
    Statement lStatement = null;
    ResultSet lResultSet = null;
    String result = new String("1");
    StringBuffer lSqlBuf=new StringBuffer();
    lSqlBuf.append("SELECT Min(ColorCode) as ColorCode FROM ColorTbl ");
    try {
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      while(lResultSet.next()){
        result=lResultSet.getString("ColorCode");
      }
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      SIDBUtil.close(lStatement,lResultSet);
    }
    this.setColorCode(result);
    return result;
  }
  
  public String getIndividualCode(Connection lConnection) throws SIDBAccessException{
    String lSql="SELECT substr(individualcode,4,4) as num FROM individualtbl WHERE individualcode LIKE '"+this.getCtgryCode()+"%' ORDER BY num DESC"; 
    DecimalFormat exFormat = new DecimalFormat("0000");
    String num = SIDBUtil.getFirstData(lConnection,lSql);
    String individual = "";
    if (num.equals("9998") || SIUtil.isNull(num)) individual = "0000";
    else individual = exFormat.format(Integer.parseInt(num)+1);
    
    individual = this.getCtgryCode() + "-" + individual+getIndividualTxt();
    this.setIndividualCode(individual);
    return individual;
  }
  
  public String getIndividualTxt(){
    String result = SIConfig.INDIVIDUALTAIL[SIConfig.INDIVIDUALTAIL_USED];
    
    if(usedNewFlg.equals("0")){//中古
      result=SIConfig.INDIVIDUALTAIL[SIConfig.INDIVIDUALTAIL_USED];
    }else if(usedNewFlg.equals("1")){//新品
      result=SIConfig.INDIVIDUALTAIL[SIConfig.INDIVIDUALTAIL_NEW];
    }else if(usedNewFlg.equals("2")){//OUTLET
      result=SIConfig.INDIVIDUALTAIL[SIConfig.INDIVIDUALTAIL_OUTLET];
    }else if(usedNewFlg.equals("3")){//BG認定中古
      result=SIConfig.INDIVIDUALTAIL[SIConfig.INDIVIDUALTAIL_USED];
    }else if(usedNewFlg.equals("4")){//展示品
      result=SIConfig.INDIVIDUALTAIL[SIConfig.INDIVIDUALTAIL_EXHIBITION];
    }else if(usedNewFlg.equals("5")){//展示品（貸与品）
      result=SIConfig.INDIVIDUALTAIL[SIConfig.INDIVIDUALTAIL_RESERVE];
    }else if(usedNewFlg.equals("6")){//キャンペーン
      result=SIConfig.INDIVIDUALTAIL[SIConfig.INDIVIDUALTAIL_CAMPAIGN];
    }
    return result;
  }
  
  /**
   * @return amount を戻します。
   */
  public String getAmount() {
    return amount;
  }
  /**
   * @param amount amount を設定。
   */
  public void setAmount(String amount) {
    this.amount = amount;
  }
  /**
   * @return bgPrice を戻します。
   */
  public String getBgPrice() {
    return bgPrice;
  }
  /**
   * @param bgPrice bgPrice を設定。
   */
  public void setBgPrice(String bgPrice) {
    this.bgPrice = bgPrice;
  }
  /**
   * @return cmdtyName を戻します。
   */
  public String getCmdtyName() {
    return cmdtyName;
  }
  /**
   * @param cmdtyName cmdtyName を設定。
   */
  public void setCmdtyName(String cmdtyName) {
    this.cmdtyName = cmdtyName;
  }
  /**
   * @return cmdtySize を戻します。
   */
  public String getCmdtySize() {
    return cmdtySize;
  }
  /**
   * @param cmdtySize cmdtySize を設定。
   */
  public void setCmdtySize(String cmdtySize) {
    this.cmdtySize = cmdtySize;
  }
  /**
   * @return ctgryCode を戻します。
   */
  public String getCtgryCode() {
    return ctgryCode;
  }
  /**
   * @param ctgryCode ctgryCode を設定。
   */
  public void setCtgryCode(String ctgryCode) {
    this.ctgryCode = ctgryCode;
  }
  /**
   * @return deliveryTypeCode を戻します。
   */
  public String getDeliveryTypeCode() {
    return deliveryTypeCode;
  }
  /**
   * @param deliveryTypeCode deliveryTypeCode を設定。
   */
  public void setDeliveryTypeCode(String deliveryTypeCode) {
    this.deliveryTypeCode = deliveryTypeCode;
  }
  /**
   * @return orderRouteFlg を戻します。
   */
  public String getUsedNewFlg() {
    return usedNewFlg;
  }
  /**
   * @param orderRouteFlg orderRouteFlg を設定。
   */
  public void setUsedNewFlg(String usedNewFlg) {
    this.usedNewFlg = usedNewFlg;
  }
  /**
   * @return shopCode を戻します。
   */
  public String getShopCode() {
    return shopCode;
  }
  /**
   * @param shopCode shopCode を設定。
   */
  public void setShopCode(String shopCode) {
    this.shopCode = shopCode;
  }
  /**
   * @return cmdtyCode を戻します。
   */
  public String getCmdtyCode() {
    return cmdtyCode;
  }
  /**
   * @param cmdtyCode cmdtyCode を設定。
   */
  public void setCmdtyCode(String cmdtyCode) {
    this.cmdtyCode = cmdtyCode;
  }
  /**
   * @return colorCode を戻します。
   */
  public String getColorCode() {
    return colorCode;
  }
  /**
   * @param colorCode colorCode を設定。
   */
  public void setColorCode(String colorCode) {
    this.colorCode = colorCode;
  }
  /**
   * @return makerCode を戻します。
   */
  public String getMakerCode() {
    return makerCode;
  }
  /**
   * @param makerCode makerCode を設定。
   */
  public void setMakerCode(String makerCode) {
    this.makerCode = makerCode;
  }
  /**
   * @return individualCode を戻します。
   */
  public String getIndividualCode() {
    return individualCode;
  }
  /**
   * @param individualCode individualCode を設定。
   */
  public void setIndividualCode(String individualCode) {
    this.individualCode = individualCode;
  }
  /**
   * @return branchCode を戻します。
   */
  public String getBranchCode() {
    return branchCode;
  }
  /**
   * @param branchCode branchCode を設定。
   */
  public void setBranchCode(String branchCode) {
    this.branchCode = branchCode;
  }
  //getter of purchasePrice2
  public String getPurchasePrice2() {
    return this.purchasePrice2;
  }
  //setter of purchasePrice2
  public void setPurchasePrice2(String purchasePrice2) {
    if (SIUtil.isNull(purchasePrice2)) purchasePrice2="";
    this.purchasePrice2=SIUtil.changeTo(purchasePrice2.trim(),this.encode);
  }
  
  public String getStockCode() {
    return stockCode;
  }
  
  public void setStockCode(String stockCode) {
    if (SIUtil.isNull(stockCode)) stockCode = "";
    this.stockCode = stockCode;
  }
}