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

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import jp.co.sint.basic.SILogin;
import jp.co.sint.beans.mallmgr.UIRfmOrderLogListCond;
import jp.co.sint.config.SICSVConf;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.database.SIDeleteRec;
import jp.co.sint.database.SIDuplicateKeyException;
import jp.co.sint.mail.SISendMail;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.tools.SICSVWrite;
import jp.co.sint.tools.SIErrorFactory;
import jp.co.sint.tools.SIFatalException;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

/**
 * @version $Id: SIRfmOrderSrv.java,v 1.0 2003/09/19 Exp $
 * @author  RFM分析を処理します。
 * <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/06   Original
 */
public class SIRegRfmOrderLogSrv extends SIServlet {

  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  /**
   * <b>doUpdate</b>
   * HTTP リクエストの処理
   * @param  request　リクエスト
   * @param  response
   * @return なし
   * @throws ServletException
   * @throws IOException
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    SILogin manLogin=SIHTMLUtil.getLogin(request);
    if (!manLogin.isLogin()){
      forwardKey(request,response,"webshop.jsp.manager.login");
      return;
    }

    HttpSession session = request.getSession(true);												//セッションの取得
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection();	//DBへのコネクションの作成
	SIURLParameter urlParam = new SIURLParameter(request);//7.1.1 ST0236 追加
    try{
      Connection connection= databaseConnection.getConnection();
      UIRfmOrderLogListCond regList = new UIRfmOrderLogListCond();

	  String actionName=this.getActionName(urlParam);//画面からのアクション	//7.1.1 ST0236 修正
	  String analyseMode = (String)urlParam.getParam("analyseMode");				//7.1.1 ST0236 修正

      if (actionName.equalsIgnoreCase(SIConfig.SIACTION_MAIL)){
        SISendMail lSendMail=new SISendMail();
        boolean lRes=false;

        regList=(UIRfmOrderLogListCond)session.getAttribute(SIConfig.SISESSION_MAN_RFM_ORDER_LOG_LIST_NAME);
		String[] lMailList=regList.getMailAddressList(urlParam,connection);//7.1.1 ST0236 修正
        try {
          lSendMail.setToMailAddress(lMailList);
          lSendMail.setMailTemp(connection,manLogin.getMallShopCode(),SIConfig.SIMAIL_TEMPLATE_RFM_MAIL);
          lRes=lSendMail.execute();
        } catch (SIFatalException e1) {
          log.error(e1);
        }
        if (lRes){
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,
                               SIErrorFactory.getErrorMsg("manager.message.success.mail"));
        }else{
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,
                               SIErrorFactory.getErrorMsg("manager.message.failure.mail"));
        }
      }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_CSV)){
        regList=(UIRfmOrderLogListCond)session.getAttribute(SIConfig.SISESSION_MAN_RFM_ORDER_LOG_LIST_NAME);
		this.produceCSVFile(urlParam,response,regList,connection);//7.1.1 ST0236 修正
        if (!response.isCommitted()){
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,SIErrorFactory.getErrorMsg("database.query.notexist","CSVデータ"));
          forwardKey(request,response,"webshop.jsp.manager.rfmorderlog.list");
        }
      }else if(actionName.equalsIgnoreCase(SIConfig.SIACTION_REFRESH)){//表示モード切り替え
        regList=(UIRfmOrderLogListCond)session.getAttribute(SIConfig.SISESSION_MAN_RFM_ORDER_LOG_LIST_NAME);
        if(regList==null){
          regList=new UIRfmOrderLogListCond();
        }
		regList.setDispMode((String)urlParam.getParam("dispModeTxt"));//7.1.1 ST0236 修正
        session.setAttribute(SIConfig.SISESSION_MAN_RFM_ORDER_LOG_LIST_NAME,regList);
      }else {
        if (UIRfmOrderLogListCond.Mode_RF.equalsIgnoreCase(analyseMode)) {
		  regList.init(urlParam);//7.1.1 ST0236 修正
          if (regList.RF_validate(request, connection) == false) {
            regList.setActionNameTxt("");
          }
        } else if (UIRfmOrderLogListCond.Mode_RM.equalsIgnoreCase(analyseMode)) {
		  regList.init(urlParam);	//7.1.1 ST0236 修正
          if (regList.RM_validate(request, connection) == false) {
            regList.setActionNameTxt("");
          }
        } else if (UIRfmOrderLogListCond.Mode_FM.equalsIgnoreCase(analyseMode)) {
		  regList.init(urlParam);	//7.1.1 ST0236 修正
          if (regList.FM_validate(request, connection) == false) {
            regList.setActionNameTxt("");
          }
        }
        session.setAttribute(SIConfig.SISESSION_MAN_RFM_ORDER_LOG_LIST_NAME, regList);
      }
      if (!response.isCommitted())forwardKey(request, response, "webshop.jsp.manager.rfmorderlog.list");

    }catch (SQLException e){
      e.printStackTrace();
      throw new ServletException();
    }catch (NamingException e){
      e.printStackTrace();
      throw new ServletException();
    }finally{
      databaseConnection.close();
    }
  }

  public void destroy() {
  }

  /**
   * <b>produceCSVFile</b>
   * CSVファイルを作成します。
   * @param request
   * @param response クライアントまでのresponse
   * @param UIRfmOrderLogListCond regList
   * @param lConnection DBへのコネクション
   * @param lListCond CSVファイルに出力するデータセット
   * @return なし
   * @throws なし
   */
  private void produceCSVFile(SIURLParameter lUrlParam,HttpServletResponse response,UIRfmOrderLogListCond regList,Connection connection){//7.1.1 ST0236 修正
    //CSVファイル名の作成
    int csv = SICSVConf.SICSV_RFM_ORDER_INX;
    String lCsvFileName=SICSVConf.getCsvFileName(csv);
    SICSVWrite lCsv=new SICSVWrite(lCsvFileName);
    lCsv.setCsvTitleAndField(SICSVConf.getTitleAndFieldName(csv));//タイトルの設定
    if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
    }else{
      lCsv.setFieldType(SICSVConf.getFieldType(csv));
    }

    lCsv.setFileName(SICSVConf.getCsvFileName(csv));//ファイル名の設定

    //CSVファイルの出力
	lCsv.executeCollection(regList.getCSVSQL(lUrlParam,connection),response);//7.1.1 ST0236 修正
  }

  /**
   * <b>deleteTableData</b>
   * @param lConnection
   * @param lOrderCode
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public void deleteTableData(Connection lConnection,String lOrderCode) throws SIDuplicateKeyException, SIDBAccessException{
    SIDeleteRec lDeleteRec = new SIDeleteRec();

    if (SIUtil.isNotNull(lOrderCode)) {

      lDeleteRec = new SIDeleteRec();
      lDeleteRec.setTableName("rfmAnalyseTbl");

      lDeleteRec.addCondition("OrderCode", lOrderCode);

      //データの更新
      log.debug("delete sql=" + lDeleteRec.getSQL());
      lDeleteRec.execute(lConnection);
    }
  }
}
