/**
 * Created on 2003/09/19
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SIDeliveryArea;
import jp.co.sint.basic.SILogin;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SITableCondition;
import jp.co.sint.database.SITableConditionManager;
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.SIUtil;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @author arai
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class UIRegDeliveryArea extends SIBasic {
  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  //ショップコード
  private String mallShopCode = "";
  
  //配送先種別コード
  private String deliveryTypeCode = "";
  
  //配送先種別名
  private String deliveryTypeName = "";
  
  private String[] prefectureCode = null;
  private String[] prefectureName = null;
  private String[] postCodeAll = null;
  private String[] size1 = null;
  private String[] size2 = null;
  private String[] size3 = null;
  private String[] size4 = null;
  private String[] size5 = null;
  private String[] size6 = null;
  private String[] size7 = null;
  private String[] size8 = null;
  private String[] size9 = null;
  private String[] size10 = null;
  
  public UIRegDeliveryArea() {}
  
  /**
   * init
   * 入力したデータから、このbeansを設定します。
   * @param HttpServletRequest
   * @param SIURLParameter
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){//7.1.1 ST0236 修正
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    if (lLogin.isShop()){
      this.setMallShopCode(lLogin.getMallShopCode());
    }else{
      this.setMallShopCode((String)lUrlParam.getParam("mallShopCode"));//7.1.1 ST0236 修正
    }
    this.setDeliveryTypeCode((String)lUrlParam.getParam("deliveryTypeCode"));//7.1.1 ST0236 修正
    this.setPrefectureCode(lRequest.getParameterValues("prefectureCode"));
    this.setPrefectureName(lRequest.getParameterValues("prefectureName"));
    this.setPostCodeAll(lRequest.getParameterValues("postCodeAll"));
    this.setSize1(lRequest.getParameterValues("size1"));
    this.setSize2(lRequest.getParameterValues("size2"));
    this.setSize3(lRequest.getParameterValues("size3"));
    this.setSize4(lRequest.getParameterValues("size4"));
    this.setSize5(lRequest.getParameterValues("size5"));
    this.setSize6(lRequest.getParameterValues("size6"));
    this.setSize7(lRequest.getParameterValues("size7"));
    this.setSize8(lRequest.getParameterValues("size8"));
    this.setSize9(lRequest.getParameterValues("size9"));
    this.setSize10(lRequest.getParameterValues("size10"));
    
    this.setActionNameTxt((String)lUrlParam.getParam("actionNameTxt"));//7.1.1 ST0236 修正
    this.setEditModeTxt((String)lUrlParam.getParam("editModeTxt"));//7.1.1 ST0236 修正
  }
  
  /**
   * validate
   * 入力したデータをチェックします。
   * 不正なデータがある場合、エラーをオブジェクトに格納します。
   * そのオブジェクトは、エラーメッセージとして画面に表示されます。
   * @param HttpServletRequest ，Connection
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validate(HttpServletRequest lRequest, Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    
    String postCodeAll[];
    String postCopeAllDuplicate[];
    
    int ii = 0;
    int jj = 0;
    int kk = 0;
    int ll = 0;
    int duplicateCheck = 0;
    
    SICheckValid.checkValid(errors, "管理コード", this.getMallShopCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "管理コード", this.getMallShopCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 16);
    //
    SICheckValid.checkValid(errors, "配送先送料ID", this.getDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "配送先送料ID", this.getDeliveryTypeCode(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    
    for (ii = 0; ii < this.getPrefectureCode().length; ii++) {
      SICheckValid.checkValid(errors, "エリアコード", this.getPrefectureCode()[ii], SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
      SICheckValid.checkValid(errors, "エリアコード", this.getPrefectureCode()[ii], SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 2);
    }
    
    for (ii = 0; ii < this.getPrefectureName().length; ii++) {
      SICheckValid.checkValid(errors, "エリア名称", this.getPrefectureName()[ii], SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors, "エリア名称", this.getPrefectureName()[ii], SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 30);
    }
    
    for (ii = 0; ii < this.getPostCodeAll().length; ii++) {
      if (SIUtil.isNull(this.getPostCodeAll()[ii])) {
        continue;
      }
      
      postCodeAll = this.getPostCodeAll()[ii].split(",");
      postCopeAllDuplicate = postCodeAll; //重複チェック用
      
      for (jj = 0; jj < postCodeAll.length; jj++) {
        if (postCodeAll[jj].split("-").length != 2) {
          errors.addError(new SICustomError("manager.app.postcode.form"));
          break;
        }
        
        if (!errors.isEmpty()) {
          break;
        }
        
        SICheckValid.checkValid(errors,"エリアコード " + this.getPrefectureCode()[ii] + "の郵便番号(3桁部分)",postCodeAll[jj].split("-")[0].toString(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        if (postCodeAll[jj].split("-")[0].toString().trim().length() != 3) {
          errors.addError(new SICustomError("manager.app.postcode.form"));
        }
        
        SICheckValid.checkValid(errors,"エリアコード " + this.getPrefectureCode()[ii] + "の郵便番号(4桁部分)",postCodeAll[jj].split("-")[1].toString(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
        if (postCodeAll[jj].split("-")[1].toString().trim().length() != 4) {
          errors.addError(new SICustomError("manager.app.postcode.form"));
        }
      }
      
      //重複チェックここから
      for (kk = 0; kk < postCodeAll.length; kk++) {
        for (ll = 0; ll < postCopeAllDuplicate.length; ll++) {
          if (postCodeAll[kk].toString().equals(postCopeAllDuplicate[ll].toString())) {
            duplicateCheck++;
            if (duplicateCheck == 2) {
              break;
            }
          }
        }
        
        if (duplicateCheck > 1) {
          errors.addError(new SICustomError("manager.app.postcode.same", this.getPrefectureCode()[ii]));
          duplicateCheck = 0; //初期化
          break;
        }
        duplicateCheck = 0; //初期化
      }
      //重複チェックここまで
    }
    
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    
    return errors.isEmpty();
  }
  
  public Collection reset(Connection lConnection) throws SIDBAccessException {
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlStatement = new StringBuffer();
    SIDeliveryArea ldeliveryarea = new SIDeliveryArea();
    Collection poti = new ArrayList();
    boolean writeFlg = false;
    boolean writeFlg2 = true;
    
    String beforePrefectureCode="";
    String afterPrefectureCode="";
    StringBuffer buf_postCodeAll = new StringBuffer();
    
    //基本のSQL
    lSqlStatement.append("SELECT a.*, b.postCode1,b.postCode2 ");
    lSqlStatement.append("FROM deliveryFeeMtbl a ");
    lSqlStatement.append("LEFT OUTER JOIN SpcDeliveryMtbl b ");
    lSqlStatement.append("ON a.mallshopcode=b.mallshopcode AND a.deliveryTypeCode=b.deliveryTypeCode AND a.prefecturecode=b.prefecturecode ");
    lSqlStatement.append("WHERE a.prefecturecode > 47 ");
    SITableConditionManager lConditionMan = new SITableConditionManager();
    SITableCondition DD = new SITableCondition("", "a.mallshopcode", this.getMallShopCode(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    
    lSqlStatement.append(lConditionMan.getCondtionSQL());
    
    lConditionMan = new SITableConditionManager();
    DD = new SITableCondition("", "a.deliverytypecode", new Integer(this.getDeliveryTypeCode()), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
    DD.setBlankEnable(false);
    lConditionMan.add(DD);
    
    lSqlStatement.append(lConditionMan.getCondtionSQL());
    lSqlStatement.append(" ORDER BY a.PrefectureCode ASC");
    
    log.debug("sqlStatement=" + lSqlStatement.toString());
    
    int i = 0;
    //実行
    try {
      lStatement = lConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//7.3.0 PI-NES0501 修正
      lResultSet = lStatement.executeQuery(lSqlStatement.toString());
      
      if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
        while (lResultSet.next()) {
          writeFlg2 = true;
          
          //配送先送料
          ldeliveryarea = new SIDeliveryArea();
          ldeliveryarea.setEncode(SIConfig.SIENCODE_NONE);
          
          beforePrefectureCode = lResultSet.getString("PrefectureCode");
          buf_postCodeAll.append("");
          
          if (SIUtil.isNotNull(lResultSet.getString("postCode1")) || SIUtil.isNotNull(lResultSet.getString("postCode2"))) {
            buf_postCodeAll.append(lResultSet.getString("postCode1") + "-" + lResultSet.getString("postCode2"));
          }
          
          i++;
          if (!lResultSet.isLast()){//7.3.0 PI-NES0501 追加
          while (lResultSet.next()) {
            writeFlg2 = false;
            afterPrefectureCode = lResultSet.getString("PrefectureCode");
            
            if (!beforePrefectureCode.equals(afterPrefectureCode)) {
              writeFlg = true;
              lResultSet.previous();
              break;
            } else { //前と後が同値
              if (SIUtil.isNotNull(lResultSet.getString("postCode1")) || SIUtil.isNotNull(lResultSet.getString("postCode2"))) {
                buf_postCodeAll.append("," + lResultSet.getString("postCode1") + "-" + lResultSet.getString("postCode2"));
              }
            }
          }
          }//7.3.0 PI-NES0501 追加
          
          if (writeFlg2 || writeFlg || lResultSet.last()) {
            writeFlg = false;
            ldeliveryarea.setMallShopCode(lResultSet.getString("mallShopCode"));
            ldeliveryarea.setDeliveryTypeCode(lResultSet.getString("deliveryTypeCode"));
            ldeliveryarea.setPrefectureCode(lResultSet.getString("prefectureCode"));
            ldeliveryarea.setPrefectureName(lResultSet.getString("prefectureName"));
            ldeliveryarea.setPostCodeAll(buf_postCodeAll.toString().trim());
            ldeliveryarea.setSize1(lResultSet.getString("size1"));
            ldeliveryarea.setSize2(lResultSet.getString("size2"));
            ldeliveryarea.setSize3(lResultSet.getString("size3"));
            ldeliveryarea.setSize4(lResultSet.getString("size4"));
            ldeliveryarea.setSize5(lResultSet.getString("size5"));
            ldeliveryarea.setSize6(lResultSet.getString("size6"));
            ldeliveryarea.setSize7(lResultSet.getString("size7"));
            ldeliveryarea.setSize8(lResultSet.getString("size8"));
            ldeliveryarea.setSize9(lResultSet.getString("size9"));
            ldeliveryarea.setSize10(lResultSet.getString("size10"));
            buf_postCodeAll = new StringBuffer();
            i = 0;
          }
          poti.add(ldeliveryarea);
        }
      }else{
        boolean first=true;
        ldeliveryarea = new SIDeliveryArea();
        ldeliveryarea.setEncode(SIConfig.SIENCODE_NONE);
        String lCurrPrefectureCode="";
        
        while (lResultSet.next()) {
          //配送先送料
          lCurrPrefectureCode = lResultSet.getString("PrefectureCode");
          if (!lCurrPrefectureCode.equals(beforePrefectureCode)) {
            if (!first){
              if (buf_postCodeAll.toString().trim().length()>0){
                ldeliveryarea.setPostCodeAll(buf_postCodeAll.toString().trim().substring(1));
              }
              poti.add(ldeliveryarea);
              
              buf_postCodeAll = new StringBuffer();
              ldeliveryarea = new SIDeliveryArea();
              ldeliveryarea.setEncode(SIConfig.SIENCODE_NONE);
            }
            first=false;
            beforePrefectureCode=lCurrPrefectureCode;
            
            ldeliveryarea.setMallShopCode(lResultSet.getString("mallShopCode"));
            ldeliveryarea.setDeliveryTypeCode(lResultSet.getString("deliveryTypeCode"));
            ldeliveryarea.setPrefectureCode(lResultSet.getString("prefectureCode"));
            ldeliveryarea.setPrefectureName(lResultSet.getString("prefectureName"));
            ldeliveryarea.setSize1(lResultSet.getString("size1"));
            ldeliveryarea.setSize2(lResultSet.getString("size2"));
            ldeliveryarea.setSize3(lResultSet.getString("size3"));
            ldeliveryarea.setSize4(lResultSet.getString("size4"));
            ldeliveryarea.setSize5(lResultSet.getString("size5"));
            ldeliveryarea.setSize6(lResultSet.getString("size6"));
            ldeliveryarea.setSize7(lResultSet.getString("size7"));
            ldeliveryarea.setSize8(lResultSet.getString("size8"));
            ldeliveryarea.setSize9(lResultSet.getString("size9"));
            ldeliveryarea.setSize10(lResultSet.getString("size10"));
          }
          
          if (SIUtil.isNotNull(lResultSet.getString("postCode1")) || SIUtil.isNotNull(lResultSet.getString("postCode2"))) {
            buf_postCodeAll.append(","+lResultSet.getString("postCode1") + "-" + lResultSet.getString("postCode2"));
          }
        }
        
        if (!first){
          if (buf_postCodeAll.toString().trim().length()>0){
            ldeliveryarea.setPostCodeAll(buf_postCodeAll.toString().trim().substring(1));
          }
          poti.add(ldeliveryarea);
        }
      }
    } catch (Exception ex) {
      throw new SIDBAccessException(ex);
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    return poti;
  }
  
  public Collection reset2(Connection lConnection) throws SIDBAccessException {
    SIDeliveryArea ldeliveryarea = new SIDeliveryArea();
    Collection poti = new ArrayList();
    int arraySize = this.getPrefectureCode().length;
    
    for (int kk = 0; kk < arraySize; kk++) {
      //配送先送料
      ldeliveryarea = new SIDeliveryArea();
      ldeliveryarea.setEncode(SIConfig.SIENCODE_NONE);
      
      //送料ルール
      ldeliveryarea.setMallShopCode(this.getMallShopCode());
      ldeliveryarea.setDeliveryTypeCode(this.getDeliveryTypeCode());
      ldeliveryarea.setPrefectureCode(this.getPrefectureCode()[kk]);
      ldeliveryarea.setPrefectureName(this.getPrefectureName()[kk]);
      ldeliveryarea.setPostCodeAll(this.getPostCodeAll()[kk]);
      
      ldeliveryarea.setSize1(this.getSize1()[kk]);
      ldeliveryarea.setSize2(this.getSize2()[kk]);
      ldeliveryarea.setSize3(this.getSize3()[kk]);
      ldeliveryarea.setSize4(this.getSize4()[kk]);
      ldeliveryarea.setSize5(this.getSize5()[kk]);
      ldeliveryarea.setSize6(this.getSize6()[kk]);
      ldeliveryarea.setSize7(this.getSize7()[kk]);
      ldeliveryarea.setSize8(this.getSize8()[kk]);
      ldeliveryarea.setSize9(this.getSize9()[kk]);
      ldeliveryarea.setSize10(this.getSize10()[kk]);
      
      poti.add(ldeliveryarea);
    }
    
    Iterator testes = poti.iterator();
    while (testes.hasNext()) {
      ldeliveryarea = (SIDeliveryArea) testes.next();
    }
    return poti;
  }
  
  /**
   * 配送先種別を取得する
   */
  public Collection getDeliveryColl(Connection connection) throws SIDBAccessException{
    String sql = " select deliveryTypeName, deliveryTypeCode from deliveryTypeMTbl where mallshopCode='"+this.getMallShopCode() +"' ORDER BY deliveryTypeCode";
    return SIDBUtil.getCollection(connection,sql);
  }
  
  /**
   * @return
   */
  public String getMallShopCode() {
    return mallShopCode;
  }
  
  /**
   * @param string
   */
  public void setMallShopCode(String string) {
    if (SIUtil.isNull(string)) string="";
    this.mallShopCode=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @return
   */
  public String[] getPostCodeAll() {
    return postCodeAll;
  }
  
  /**
   * @param strings
   */
  public void setPostCodeAll(String[] strings) {
    if (strings != null) {
    strings=SIUtil.changeTo(strings,this.encode);
      for (int i = 0; i < strings.length; i++) {
        if (SIUtil.isNull(strings[i])) {
          strings[i] = "";
        }
        strings[i] = strings[i].replace('"', ' ').trim();
      }
      postCodeAll = strings;
    }
  }
  
  /**
   * @return
   */
  public String[] getPrefectureCode() {
    return prefectureCode;
  }
  
  /**
   * @param strings
   */
  public void setPrefectureCode(String[] strings) {
    this.prefectureCode=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @return
   */
  public String[] getPrefectureName() {
    return prefectureName;
  }
  
  /**
   * @param strings
   */
  public void setPrefectureName(String[] strings) {
    this.prefectureName=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @return
   */
  public String getDeliveryTypeCode() {
    return deliveryTypeCode;
  }
  
  /**
   * @param string
   */
  public void setDeliveryTypeCode(String string) {
    if (SIUtil.isNull(string)) string="";
    this.deliveryTypeCode=SIUtil.changeTo(string.trim(),this.encode);
  }
  
  /**
   * @return
   */
  public String[] getSize1() {
    return size1;
  }
  
  /**
   * @return
   */
  public String[] getSize2() {
    return size2;
  }
  
  /**
   * @return
   */
  public String[] getSize3() {
    return size3;
  }
  
  /**
   * @return
   */
  public String[] getSize4() {
    return size4;
  }
  
  /**
   * @return
   */
  public String[] getSize5() {
    return size5;
  }
  
  /**
   * @return
   */
  public String[] getSize6() {
    return size6;
  }
  
  /**
   * @return
   */
  public String[] getSize7() {
    return size7;
  }
  
  /**
   * @return
   */
  public String[] getSize8() {
    return size8;
  }
  
  /**
   * @return
   */
  public String[] getSize9() {
    return size9;
  }
  
  /**
   * @return
   */
  public String[] getSize10() {
    return size10;
  }
  
  /**
   * @param strings
   */
  public void setSize1(String[] strings) {
    this.size1=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize2(String[] strings) {
    this.size2=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize3(String[] strings) {
    this.size3=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize4(String[] strings) {
    this.size4=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize5(String[] strings) {
    this.size5=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize6(String[] strings) {
    this.size6=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize7(String[] strings) {
    this.size7=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize8(String[] strings) {
    this.size8=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize9(String[] strings) {
    this.size9=SIUtil.changeTo(strings,this.encode);
  }
  
  /**
   * @param strings
   */
  public void setSize10(String[] strings) {
    this.size10=SIUtil.changeTo(strings,this.encode);
  }
  /**
   * @return
   */
  public String getDeliveryTypeName() {
    return deliveryTypeName;
  }
  
  /**
   * @param string
   */
  public void setDeliveryTypeName(String string) {
    if (SIUtil.isNull(string)) string="";
    this.deliveryTypeName=SIUtil.changeTo(string.trim(),this.encode);
  }
}