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

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;

import jp.co.sint.config.SIConfig;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id : SIMailTemp.java,v 1.0 Exp $
 * @author      : arai
 * <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>
 * arai           2003/09/30  Original
 */
public class SIMailTemp extends SIBasic {
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  private String mallShopCode = "";
  private String mailType = "1";
  private String classify = "";
  private String title = "";
  private String fromMail = "";
  private String content1 = "";
  private String content2 = "";
  private String content3 = "";
  private String signature = "";
  private String mallShopEmail = "";
  
  public SIMailTemp(){}
  
  public SIMailTemp(String lMallShopCode,String lMailType){
    setMallShopCode(lMallShopCode);
    setMailType(lMailType);
  }
  
  /**
   * @return
   */
  public String getClassify() {
    return classify;
  }
  
  /**
   * @return
   */
  public String getContent1() {
    return content1;
  }
  
  /**
   * @return
   */
  public String getContent2() {
    return content2;
  }
  
  /**
   * @return
   */
  public String getContent3() {
    return content3;
  }
  
  /**
   * @return
   */
  public String getFromMail() {
    return fromMail;
  }
  
  /**
   * @return
   */
  public String getMallShopCode() {
    return mallShopCode;
  }
  
  /**
   * @return
   */
  public String getSignature() {
    return signature;
  }
  
  /**
   * @return
   */
  public String getTitle() {
    return title;
  }
  
  /**
   * @return
   */
  public String getMailType() {
    return mailType;
  }
  
  /**
   * @return
   */
  public String getMallShopEmail() {
  return mallShopEmail;
  }
  
  /**
   * @param string
   */
  public void setClassify(String string) {
    if(string==null)string="";
    string = SIUtil.changeTo(string.trim(),this.encode);
    classify = string;
  }
  
  /**
   * @param string
   */
  public void setContent1(String string) {
    if(string==null)string="";
    string = SIUtil.changeTo(string.trim(),this.encode);
    content1 = string;
  }
  
  /**
   * @param string
   */
  public void setContent2(String string) {
    if(string==null)string="";
    string = SIUtil.changeTo(string.trim(),this.encode);
    content2 = string;
  }
  
  /**
   * @param string
   */
  public void setContent3(String string) {
    if(string==null)string="";
    string = SIUtil.changeTo(string.trim(),this.encode);
    content3 = string;
  }
  
  /**
   * @param string
   */
  public void setFromMail(String string) {
    if(string==null)string="";
    string = SIUtil.changeTo(string.trim(),this.encode);
    fromMail = string;
  }
  
  /**
   * @param string
   */
  public void setMallShopCode(String string) {
    mallShopCode = string;
  }
  
  /**
   * @param string
   */
  public void setSignature(String string) {
    if(string==null)string="";
    string = SIUtil.changeTo(string.trim(),this.encode);
    signature = string;
  }
  
  /**
   * @param string
   */
  public void setTitle(String string) {
    if(string==null)string="";
    string = SIUtil.changeTo(string.trim(),this.encode);
    title = string;
  }
  
  /**
   * @param string
   */
  public void setMallShopEmail(String string) {
    if(string==null)string="";
    string = SIUtil.changeTo(string.trim(),this.encode);
  mallShopEmail = string;
  }
  
  /**
   * @param string
   */
  public void setMailType(String string) {
    if (SIUtil.isNull(string))string="1";
    mailType = string;
  }
  
  /**
   * <b>getDisplayMode</b>
   * 運用モード区分を取得します
   * @param mallShopCode
   * @return String 運用区分
   * @throws SIDBAccessException
   */ public static String getDisplayMode(String mallShopCode) throws SIDBAccessException {
    String[] aryDisplayMode = new String[6];
    aryDisplayMode[0] = "A"; //モール一括  ・モール管理メニュー
    aryDisplayMode[1] = "B"; //モール一括  ・ショップ管理メニュー
    aryDisplayMode[2] = "C"; //ショップ個別・モール管理メニュー
    aryDisplayMode[3] = "D"; //ショップ個別・ショップ管理メニュー
    
    if(SIConfig.SIRUNNING_MODE_CURRENT==SIConfig.SIRUNNING_MODE_TOGETHER){
      if (mallShopCode.trim().equals(SIConfig.SIMALL_MALLSHOPCODE)) return aryDisplayMode[0];
      else return aryDisplayMode[1];
    }else if(SIConfig.SIRUNNING_MODE_CURRENT==SIConfig.SIRUNNING_MODE_INDIVIDUAL){
      if (mallShopCode.trim().equals(SIConfig.SIMALL_MALLSHOPCODE)) return aryDisplayMode[2];
      else return aryDisplayMode[3];
    }
    return "";
  }
   
  /**
  * <b>getHashtable_MailTemp</b>
  * メールテンプレートの種類をHashTableに格納して返します
  * @param なし
  * @return Hashtable メールテンプレート種類
  * @throws なし
  */
  public static Hashtable getHashtable_MailTemp() {
    Hashtable hashParameters = new Hashtable();
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_NEW_ARRIVE, "新着情報");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM, "受注確認");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_RECEIPT_DEMAND, "入金督促");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_SHIPPMENT_REQUEST, "出荷指示");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_ORDER_CANCEL, "受注キャンセル");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_RFM_MAIL, "RFM販促メール");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_RESERVE_COMFIRM, "予約確認");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_RESERVE_ARRIVE, "予約入荷");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_RESERVE_NO_ARRIVE, "予約未入荷");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_ORDER_RETURN, "返品");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_RECEIPT_COMFIRM, "入金確認");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_RESERVE_CHANGE, "予約変更");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_RESERVE_CANCEL, "予約キャンセル");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_USER_REGIST, "顧客登録");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_USER_DELETE, "顧客削除");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_DELETE_REQUEST, "顧客削除依頼");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_KEEP_WARNING,"キープ警告");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_REJECTION,"入出庫却下");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_APPROVAL,"入出庫承認");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_KEEP_DELETE,"取り置き解除");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_KEEP_ALL_DELETE,"放置キープ削除");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_KEEP_INSERT,"取り置き依頼");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_SHIPPMENT_REGIST,"出荷完了");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_HACCHU_REQUEST,"発注承認依頼");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_HACCHU_REJECTION,"発注却下");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_HACCHU_APPROVAL,"発注承認");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_HACCHU_STORE,"発注配分");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_HACCHU_REGIST,"発注");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_ORDER_CONFIRM2, "受注確認2");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_ORDER_CONFIRM3, "受注確認3");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_ORDER_CONFIRM4, "受注確認4");
    hashParameters.put(SIConfig.SIMAIL_TEMPLATE_ORDER_CONFIRM5, "受注確認5");
    
    return hashParameters;
  }

  /**
  * getFirstHeaderName
  * メールテンプレート設定画面での第一注釈を取得します
  * @param  pType メール種別
  * @return String 第一注釈
  * @throws なし
  */
  public static String getFirstHeaderName(String pType){
    int index = Integer.parseInt(pType)-1;
    String[] firstHeader  = 
    {"",
     "受注番号と連絡事項欄",
     "振込先情報",
     "受注ヘッダ",
     "受注明細",
     "",
     "予約明細",
     "予約明細",
     "予約明細",
     "受注明細",
     "受注明細",
     "予約明細",
     "予約明細",
     "顧客情報",
     "顧客情報",
     "顧客情報",
     "キープ警告文",
     "在庫アラート文",
     "入出庫データ",
     "入出庫データ",
     "取り置き削除情報",
     "キープ削除情報",
     "取り置き商品情報",
     "出荷商品情報",
     "発注情報",
     "発注情報",
     "発注情報",
     "発注情報",
     "",
     "受注番号と連絡事項欄",
     "受注番号と連絡事項欄",
     "受注番号と連絡事項欄",
     "受注番号と連絡事項欄"
    };
    return firstHeader[index];
  }

  /**
  * getSecondHeaderName
  * メールテンプレート設定画面での第二注釈を取得します。
  * @param  pType メール種別
  * @return String 第二注釈
  * @throws なし
  */
  public static String getSecondHeaderName(String pType){
    int index = Integer.parseInt(pType)-1;
    String[] secondHeader  = 
    {"",
     "(前払または後払の場合)振込先情報",
     "受注明細",
     "出荷商品の一覧",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "(前払または後払の場合)振込先情報",
     "(前払または後払の場合)振込先情報",
     "(前払または後払の場合)振込先情報",
     "(前払または後払の場合)振込先情報"
    };
    return secondHeader[index];
  }
  
  public static String getThirdHeaderName(String pType){
    int index = Integer.parseInt(pType)-1;
    String[] thirdHeader  = 
    {"",
     "配送先情報と受注明細",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "",
     "配送先情報と受注明細",
     "配送先情報と受注明細",
     "配送先情報と受注明細",
     "配送先情報と受注明細"
    };
    return thirdHeader[index];
  }
  
  /**
   * <b>reset</b>
   * ショップコードとメール種別からメールテンプレート内容を取得します
   * @param lConnection
   * @return boolean 存在するかどうか
   * @throws SIDBAccessException
   */
  public boolean reset(Connection lConnection)throws SIDBAccessException{
    boolean lRes=false;
    Statement lStatement=null;
    ResultSet lResultSet=null;
    
    StringBuffer lSqlBuf=new StringBuffer("SELECT a.*, b.Email  FROM MailTemplateMTbl a, MallShopMTbl b ");
    lSqlBuf.append("WHERE a.MallShopCode = b.MallShopCode ");
    lSqlBuf.append("AND a.MallShopCode=").append(SIDBUtil.SQL2Str(getMallShopCode()," "));
    lSqlBuf.append("AND a.MailType=").append(SIDBUtil.SQL2Str(getMailType()));
    
    log.debug("reset:lSqlBuf="+lSqlBuf.toString());
    try {
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      
      if (lResultSet.next()){
        setEncode(SIConfig.SIENCODE_NONE);
        setMallShopCode(lResultSet.getString("mallShopCode"));
        setMailType(lResultSet.getString("mailType"));
        setClassify(lResultSet.getString("classify"));
        setTitle(lResultSet.getString("title"));
        setFromMail(lResultSet.getString("fromMail"));
        setContent1(lResultSet.getString("content1"));
        setContent2(lResultSet.getString("content2"));
        setContent3(lResultSet.getString("content3"));
        setSignature(lResultSet.getString("signature"));
        setMallShopEmail(lResultSet.getString("email"));
        lRes=true;
      }else {
        log.error("not find record for mallShopCode="+getMallShopCode()+",MailType="+getMailType());
      }
    }catch(SQLException sqle){
      sqle.printStackTrace();
      throw new SIDBAccessException(sqle);
    }finally{
      SIDBUtil.close(lStatement,lResultSet);
    }
    return lRes;
  }
  
  public boolean resetEG(Connection lConnection)throws SIDBAccessException{
    boolean lRes=false;
    Statement lStatement=null;
    ResultSet lResultSet=null;
    
    StringBuffer lSqlBuf=new StringBuffer("SELECT a.*, b.Email  FROM MailTemplateEGTbl a, MallShopMTbl b ");
    lSqlBuf.append("WHERE a.MallShopCode = b.MallShopCode ");
    lSqlBuf.append("AND a.MallShopCode=").append(SIDBUtil.SQL2Str(getMallShopCode()," "));
    lSqlBuf.append("AND a.MailType=").append(SIDBUtil.SQL2Str(getMailType()));
    
    log.debug("reset:lSqlBuf="+lSqlBuf.toString());
    try {
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      
      if (lResultSet.next()){
        setEncode(SIConfig.SIENCODE_NONE);
        setMallShopCode(lResultSet.getString("mallShopCode"));
        setMailType(lResultSet.getString("mailType"));
        setClassify(lResultSet.getString("classify"));
        setTitle(lResultSet.getString("title"));
        setFromMail(lResultSet.getString("fromMail"));
        setContent1(lResultSet.getString("content1"));
        setContent2(lResultSet.getString("content2"));
        setContent3(lResultSet.getString("content3"));
        setSignature(lResultSet.getString("signature"));
        setMallShopEmail(lResultSet.getString("email"));
        lRes=true;
      }else {
        log.error("not find record for mallShopCode="+getMallShopCode()+",MailType="+getMailType());
      }
    }catch(SQLException sqle){
      sqle.printStackTrace();
      throw new SIDBAccessException(sqle);
    }finally{
      SIDBUtil.close(lStatement,lResultSet);
    }
    return lRes;
  }
}
