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

import java.io.File;
import java.sql.Connection;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIFrontBasic;
import jp.co.sint.beans.mallmgr.UIRegPurchase;
import jp.co.sint.config.SIConfig;
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.SIDateTime;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id: UIPurchaseEdit.java,v 1.0 2005/08/26 Exp $
 * @author Fujita Jun</a>
 * <br>Description:
 * <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>
 * Fujita Jun       2005/08/26 14:08:04  Original
 */
public class UIPurchaseEdit extends SIFrontBasic{

  public UIPurchaseEdit(){}
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  private UIRegPurchase regPurchase = new UIRegPurchase();
  private String nextUrlTxt="";

  /**
   * <b>init</b>
   * 入力したデータを基づいて、このbeansを設定します。
   * @param request データベースへのコネンクション
   * @return true:不正なデータがある false:ない
   * @throws なし
   */
  
  public void setNextUrlTxt(String lNextUrlTxt){
    if (SIUtil.isNull(lNextUrlTxt)) lNextUrlTxt="";
    this.nextUrlTxt=SIUtil.changeTo(lNextUrlTxt.trim(),this.encode);
  }
  
  public String getNextUrlTxt(){
    return this.nextUrlTxt;
  }
  
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){
    super.init(lRequest,lUrlParam);
    regPurchase.init(lRequest,lUrlParam);
    this.setNextUrlTxt((String)lUrlParam.getParam("nid"));
  }
  
  public void initImage(String[] name){
    if(SIUtil.isNotNull(name[0])) regPurchase.setPictureUrl1(name[0]);
    if(SIUtil.isNotNull(name[1])) regPurchase.setPictureUrl2(name[1]);
    if(SIUtil.isNotNull(name[2])) regPurchase.setPictureUrl3(name[2]);
    if(SIUtil.isNotNull(name[3])) regPurchase.setPictureUrl4(name[3]);
    if(SIUtil.isNotNull(name[4])) regPurchase.setPictureUrl5(name[4]);
  }
  
  public void reset(Connection lConnection){
    regPurchase.reset(lConnection);
  }
  
  public UIRegPurchase getRegPurchase(){
    return regPurchase;
  }
  
  public UIRegPurchase getRegCust(){
    return regPurchase;
  }
  
  public void setCustCode(String lCustCode){
    regPurchase.setCustCode(lCustCode);
  }
  //7.1.1 ST0236 修正 ここまで
  
  /**
   * validate
   * 入力したデータをチェックします。
   * 不正なデータがある場合、エラーをオブジェクトに格納します。
   * そのオブジェクトは、エラーメッセージとして画面に表示されます。
   * @param HttpServletRequest ，Connection
   * @return true:エラーがない false:エラーが１つ以上ある
   * @throws なし
   */
  public boolean validate1(HttpServletRequest lRequest, Connection lConnection) {
    //lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors=(SICustomErrors)lRequest.getAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    if(errors==null) errors = new SICustomErrors();
    SICustomError err;
    
    SICheckValid.checkValid(errors, "商品名1", this.getRegPurchase().getCmdtyName1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 90);
    SICheckValid.checkValid(errors, "商品名2", this.getRegPurchase().getCmdtyName2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 90);
    SICheckValid.checkValid(errors, "商品名3", this.getRegPurchase().getCmdtyName3(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 90);
    SICheckValid.checkValid(errors, "商品名4", this.getRegPurchase().getCmdtyName4(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 90);
    SICheckValid.checkValid(errors, "商品名5", this.getRegPurchase().getCmdtyName5(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 90);
    
    SICheckValid.checkValid(errors, "数量1", this.getRegPurchase().getAmount1(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "数量2", this.getRegPurchase().getAmount2(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "数量3", this.getRegPurchase().getAmount3(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "数量4", this.getRegPurchase().getAmount4(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "数量5", this.getRegPurchase().getAmount5(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    
    SICheckValid.checkValid(errors, "商品説明", this.getRegPurchase().getDetails(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 1000);
    
    if(this.getRegPurchase().getCmdtyName1().equals("")&&this.getRegPurchase().getCmdtyName2().equals("")&&this.getRegPurchase().getCmdtyName3().equals("")
        &&this.getRegPurchase().getCmdtyName4().equals("")&&this.getRegPurchase().getCmdtyName5().equals("")){
      errors = new SICustomErrors();
      errors.addError(new SICustomError("input.date.purchase.cmdty"));
    }
    
    if(!(this.getRegPurchase().getCmdtyName1().equals("")&&this.getRegPurchase().getPurchaseTime1().equals("")
        &&this.getRegPurchase().getUsedYear1().equals("")&&this.getRegPurchase().getAmount1().equals(""))){
      SICheckValid.checkValid(errors,"商品名1",this.getRegPurchase().getCmdtyName1(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"購入時期1",this.getRegPurchase().getPurchaseTime1(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"使用年数1",this.getRegPurchase().getUsedYear1(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"数量1",this.getRegPurchase().getAmount1(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if(!(this.getRegPurchase().getCmdtyName2().equals("")&&this.getRegPurchase().getPurchaseTime2().equals("")
        &&this.getRegPurchase().getUsedYear2().equals("")&&this.getRegPurchase().getAmount2().equals(""))){
      SICheckValid.checkValid(errors,"商品名2",this.getRegPurchase().getCmdtyName2(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"購入時期2",this.getRegPurchase().getPurchaseTime2(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"使用年数2",this.getRegPurchase().getUsedYear2(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"数量2",this.getRegPurchase().getAmount2(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if(!(this.getRegPurchase().getCmdtyName3().equals("")&&this.getRegPurchase().getPurchaseTime3().equals("")
        &&this.getRegPurchase().getUsedYear3().equals("")&&this.getRegPurchase().getAmount3().equals(""))){
      SICheckValid.checkValid(errors,"商品名3",this.getRegPurchase().getCmdtyName3(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"購入時期3",this.getRegPurchase().getPurchaseTime3(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"使用年数3",this.getRegPurchase().getUsedYear3(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"数量3",this.getRegPurchase().getAmount3(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if(!(this.getRegPurchase().getCmdtyName4().equals("")&&this.getRegPurchase().getPurchaseTime4().equals("")
        &&this.getRegPurchase().getUsedYear4().equals("")&&this.getRegPurchase().getAmount4().equals(""))){
      SICheckValid.checkValid(errors,"商品名4",this.getRegPurchase().getCmdtyName4(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"購入時期4",this.getRegPurchase().getPurchaseTime4(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"使用年数4",this.getRegPurchase().getUsedYear4(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"数量4",this.getRegPurchase().getAmount4(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }
    
    if(!(this.getRegPurchase().getCmdtyName5().equals("")&&this.getRegPurchase().getPurchaseTime5().equals("")
        &&this.getRegPurchase().getUsedYear5().equals("")&&this.getRegPurchase().getAmount5().equals(""))){
      SICheckValid.checkValid(errors,"商品名5",this.getRegPurchase().getCmdtyName5(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"購入時期5",this.getRegPurchase().getPurchaseTime5(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"使用年数5",this.getRegPurchase().getUsedYear5(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
      SICheckValid.checkValid(errors,"数量5",this.getRegPurchase().getAmount5(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    }

    if (!errors.isEmpty())
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  public boolean validate2(HttpServletRequest lRequest, Connection lConnection) {
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    SICustomErrors errors = new SICustomErrors();
    SICustomError err;
    
    SICheckValid.checkValid(errors,"お名前(漢字)",this.getRegPurchase().getCustName(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_ZENKAKU_TYPE);
    SICheckValid.checkValid(errors,"お客様名カナ",this.getRegPurchase().getCustPronName(),SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_ZENKAKU_KANA_TYPE);
    SICheckValid.checkValid(errors, "郵便番号(上3桁)", this.getRegPurchase().getPostCode1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "郵便番号(下4桁)", this.getRegPurchase().getPostCode2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    
    if (this.getRegPurchase().getPostCode1().toString().trim().length() != 3||this.getRegPurchase().getPostCode2().toString().trim().length() != 4) {errors.addError(new SICustomError("manager.app.postcode.form"));}
    
    SICheckValid.checkValid(errors, "住所1（都道府県）", this.getRegPurchase().getAddress1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "住所2(市区町村・番地)", this.getRegPurchase().getAddress2(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE);
    SICheckValid.checkValid(errors, "連絡先電話番号1", this.getRegPurchase().getTel1(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE + SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "連絡先電話番号1", this.getRegPurchase().getTel1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE,9,16);
    SICheckValid.checkValid(errors, "連絡先電話番号2", this.getRegPurchase().getTel2(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "連絡先電話番号2", this.getRegPurchase().getTel2(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE,9,16);
    SICheckValid.checkValid(errors, "連絡先FAX番号", this.getRegPurchase().getFax(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "連絡先FAX番号", this.getRegPurchase().getFax(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE,9,16);
    SICheckValid.checkValid(errors, "E-mail", this.getRegPurchase().getEmail(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE+SICheckDataConf.SICHECK_DATA_MAIL_TYPE);
    SICheckValid.checkValid(errors, "E-mail", this.getRegPurchase().getEmail(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_WITHIN_TYPE, 128);
    SICheckValid.checkValid(errors, "郵便番号(上3桁)(別所在地)", this.getRegPurchase().getPostCodeOther1(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "郵便番号(下4桁)(別所在地)", this.getRegPurchase().getPostCodeOther2(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    
    if(!this.getRegPurchase().getPostCodeOther1().equals("")||!this.getRegPurchase().getPostCodeOther2().equals("")){
      if (this.getRegPurchase().getPostCodeOther1().toString().trim().length() != 3||this.getRegPurchase().getPostCodeOther2().toString().trim().length() != 4) {errors.addError(new SICustomError("manager.app.postcode.form"));}
    }
    
    SICheckValid.checkValid(errors, "電話番号(別所在地)", this.getRegPurchase().getTelOther1(), SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
    SICheckValid.checkValid(errors, "電話番号(別所在地)", this.getRegPurchase().getTelOther1(), SICheckDataConf.SICHECK_DATA_BYTE_LEN_TYPE,9,16);
    
    if (!errors.isEmpty())lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
    return errors.isEmpty();
  }
  
  //買取希望時期取得
  public static Collection getNameCollection(Connection lConnection){
    Collection lResultColl=new ArrayList();
    SIDateTime date = new SIDateTime();
    DecimalFormat exFormat1 = new DecimalFormat("00");
    int day = date.getDay();
    int month = date.getMonth();
    int nextMonth = month + 1;
    int year = date.getYear();
    int nextYear = year + 1;
    
    if(day >= 1 && day <= 10){
      if (month<12){
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月上旬");
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月下旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月上旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月下旬");  
      }else{
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月上旬");
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月下旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-12)) +"月上旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-12)) +"月中旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-12)) +"月下旬");
      }
    }else if (day >= 11 && day <= 20){
      if (month<11){
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月下旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月上旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月下旬");
        lResultColl.add(year + "年"+ exFormat1.format((nextMonth+1)) +"月上旬");
      }else if (month==11){
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月下旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月上旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月下旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-11)) +"月上旬");
      }else if(month==12){
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月下旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-12)) +"月上旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-12)) +"月中旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-12)) +"月下旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-11)) +"月上旬");
      }
    }else if (day >= 21 && day <= 31){
      if (month<11){
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月下旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月上旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月下旬");
        lResultColl.add(year + "年"+ exFormat1.format((nextMonth+1)) +"月上旬");
        lResultColl.add(year + "年"+ exFormat1.format((nextMonth+1)) +"月中旬");
      }else if (month==11){
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月下旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月上旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月中旬");
        lResultColl.add(year + "年"+ exFormat1.format(nextMonth) +"月下旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-11)) +"月上旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-11)) +"月中旬");
      }else if(month==12){
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月下旬");
        lResultColl.add(year + "年"+ exFormat1.format(month) +"月上旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-12)) +"月中旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-12)) +"月下旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-11)) +"月上旬");
        lResultColl.add(nextYear + "年"+ exFormat1.format((nextMonth-11)) +"月中旬");
      }
    }
    
    return lResultColl;
  }

  public void deletePurchaseImage(){
    deletePurchaseImage(this.regPurchase);
  }

  public void deletePurchaseImage(UIRegPurchase regPurchase){
    if(SIUtil.isNotNull(regPurchase.getPictureUrl1())){
      File lFullDestFile = new File(regPurchase.getPictureUrl1());
      lFullDestFile.delete();
      regPurchase.setPictureUrl1("");
    }
    if(SIUtil.isNotNull(regPurchase.getPictureUrl2())){
      File lFullDestFile = new File(regPurchase.getPictureUrl2());
      lFullDestFile.delete();
      regPurchase.setPictureUrl2("");
    }
    if(SIUtil.isNotNull(regPurchase.getPictureUrl3())){
      File lFullDestFile = new File(regPurchase.getPictureUrl3());
      lFullDestFile.delete();
      regPurchase.setPictureUrl3("");
    }
    if(SIUtil.isNotNull(regPurchase.getPictureUrl4())){
      File lFullDestFile = new File(regPurchase.getPictureUrl4());
      lFullDestFile.delete();
      regPurchase.setPictureUrl4("");
    }
    if(SIUtil.isNotNull(regPurchase.getPictureUrl5())){
      File lFullDestFile = new File(regPurchase.getPictureUrl5());
      lFullDestFile.delete();
      regPurchase.setPictureUrl5("");
    }
  }
}