/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：料金管理
*   モジュール名    ：はぴｅポイントｷｬｯｼｭﾊﾞｯｸ情報画面
*   ソースファイル名：ACW01103SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年08月15日
*＜機能概要＞
*  はぴｅポイント情報照会を行う画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00.00    2012/08/15   FJ）富士通    新規作成
*
**********************************************************************/
package eo.web.webview.ACW01103SF;

import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JCRUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.ACW01101SF.ACW01101SFConst;
import eo.web.webview.ACW01104SF.ACW01104SFConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCRWebCommon;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.ACSV0031_ACSV0031OPDBMapper;

/**
 * はぴｅポイントｷｬｯｼｭﾊﾞｯｸ情報画面用ビューロジック
 * 
 * @author FJ
 * @since 2012-08-15
 */
@SuppressWarnings("serial")
public class ACW01103SFLogic extends JCCWebBusinessLogic
{
	/** はぴｅポイント情報取得・サービスID */
	private static final String SERVICE_ID_ACSV0031 = "ACSV0031";

	/**
	 * 初期表示処理<br>
	 * <br>
	 * 検索項目を引継いでいる場合、はぴｅポイントキャッシュバック情報取得サービスを呼び出し、
	 * はぴｅポイントキャッシュバック情報画面の初期表示を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean init() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// 引継情報の取得
		// -------------------------------------------------- //
		JCCWebCommon.getScreenInfo( this, JACScreenConst.SCREEN_ID_ACW01103);

		// -------------------------------------------------- //
		// はぴｅポイント情報取得サービス呼び出し
		// -------------------------------------------------- //
		// 入力パラメータを取得
		String hapieId = bean.sendMessageString(ACW01103SFConst.SEARCH_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String eoId = bean.sendMessageString(ACW01103SFConst.SEARCH_EOID, X31CWebConst.DATABEAN_GET_VALUE);
		String sysId = bean.sendMessageString(ACW01103SFConst.SEARCH_SYSID, X31CWebConst.DATABEAN_GET_VALUE);

		if (!(JCRUtilCommon.isNull(hapieId) && JCRUtilCommon.isNull(eoId) && JCRUtilCommon.isNull(sysId)))
		{
			// サービスフォームBeanのアクセサを配列化する
			X31SDataBeanAccess[] paramBeans = {bean};
			// はぴｅポイントキャッシュバック情報取得サービス実行
			execACSV0031(paramBeans);
		}

		// -------------------------------------------------- //
		// 共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01103);
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01103);

		return true;
	}

	/**
	 * 検索ボタン押下<br>
	 * <br>
	 * はぴｅポイントキャッシュバック情報取得サービスを呼び出し、
	 * はぴｅポイント契約情報、明細情報の取得を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean search() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean};

		// -------------------------------------------------- //
		// はぴｅポイントキャッシュバック情報取得サービス呼び出し
		// -------------------------------------------------- //
		execACSV0031(paramBeans);

		// -------------------------------------------------- //
		// 共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01103);
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01103);

		return true;
	}

	/**
	 * ポイント照会タブクリック<br>
	 * <br>
	 * 検索項目が確定している場合、これを引継ぎ、はぴｅポイント情報画面への遷移を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean point() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// 引継情報の設定
		// -------------------------------------------------- //
		// 次画面への引継情報(dataMap)を作成する。
		HashMap<String, Object> hktgMap = new HashMap<String, Object>();

		hktgMap.put(ACW01101SFConst.SEARCH_HAPIE_MEMBER_ID, bean.sendMessageString(ACW01103SFConst.TAIHI_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_GET_VALUE));
		hktgMap.put(ACW01101SFConst.SEARCH_SYSID, bean.sendMessageString(ACW01103SFConst.TAIHI_SYSID, X31CWebConst.DATABEAN_GET_VALUE));
		hktgMap.put(ACW01101SFConst.SEARCH_EOID, bean.sendMessageString(ACW01103SFConst.TAIHI_EOID, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		JCRWebCommon.setScreenInfo(this, JACScreenConst.SCREEN_ID_ACW01101, hktgMap);

		// 戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
		JCCWebCommon.setScreenId(this, JACScreenConst.SCREEN_ID_ACW01101, JACScreenConst.SCREEN_ID_ACW01103);

		// -------------------------------------------------- //
		// 共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01101);
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01101);

		return true;
	}

	/**
	 * ｷｬｯｼｭﾊﾞｯｸ内訳ボタン押下<br>
	 * <br>
	 * 選択した明細のはぴｅ番号、はぴｅ計算対象年月を引継ぎ、はぴeポイント内訳情報画面をサブ画面で表示します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean cashbackUcwk() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// 引継情報の設定
		// -------------------------------------------------- //
		// はぴｅポイントリストを取得
		X31SDataBeanAccessArray hapiePointList = bean.getDataBeanArray(ACW01103SFConst.HAPIE_POINT_LIST);
		// はぴｅポイント選択値を取得
		int index = Integer.parseInt(bean.sendMessageString(ACW01103SFConst.HAPIE_POINT_SEL, X31CWebConst.DATABEAN_GET_VALUE));
		// 選択されている明細情報を取得する
		X31SDataBeanAccess hapiePointInfo = hapiePointList.getDataBean(index);
		// はぴｅポイント引当審査番号を取得する
		String hkShinsaNo = hapiePointInfo.sendMessageString(ACW01103SFConst.HAPIEPOINT_HKSI_NO_02, X31CWebConst.DATABEAN_GET_VALUE);
		// お問合わせ番号を取得する
		String toiawseNo = hapiePointInfo.sendMessageString(ACW01103SFConst.TOIAWASE_NO_02, X31CWebConst.DATABEAN_GET_VALUE);
		// キャッシュバック審査結果理由コードを取得する
		String csbkRsnCd = hapiePointInfo.sendMessageString(ACW01103SFConst.HKSI_RSN_CD_02, X31CWebConst.DATABEAN_GET_VALUE);

		// 次画面への引継情報(dataMap)を作成する。
		HashMap<String, Object> hktgMap = new HashMap<String, Object>();

		hktgMap.put(ACW01104SFConst.HAPIEPOINT_HKSI_NO, hkShinsaNo);
		hktgMap.put(ACW01104SFConst.TOIAWASE_NO, toiawseNo);
		hktgMap.put(ACW01104SFConst.HKSI_RSN_CD, csbkRsnCd);

		// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		JCRWebCommon.setScreenInfo(this, JACScreenConst.SCREEN_ID_ACW01104, hktgMap);

		// 戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
		JCCWebCommon.setScreenId(this, JACScreenConst.SCREEN_ID_ACW01104, JACScreenConst.SCREEN_ID_ACW01103);

		// -------------------------------------------------- //
		// 共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01104);
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01104);

		return true;
	}

	/**
	 * 契約へボタン押下<br>
	 * <br>
	 * 選択した明細のはぴｅ番号を引継ぎ、はぴe契約補正対象一覧画面をサブ画面で表示します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean keiyaku() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// 引継情報の設定
		// -------------------------------------------------- //
		// 次画面への引継情報(dataMap)を作成する。
		HashMap<String, Object> hktgMap = new HashMap<String, Object>();

		hktgMap.put("はぴｅ番号", bean.sendMessageString(ACW01103SFConst.TAIHI_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		JCRWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW14105, hktgMap);

		// 戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
		JCCWebCommon.setScreenId(this, JKKScreenConst.SCREEN_ID_KKW14105, JACScreenConst.SCREEN_ID_ACW01103);

		// -------------------------------------------------- //
		// 共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW14105);
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW14105);

		return true;
	}

	/**
	 * はぴｅポイントキャッシュバック情報取得サービス実行処理<br>
	 * <br>
	 * はぴｅポイントキャッシュバック情報取得サービスを実行します。
	 * 
	 * @param paramBeans bean配列
	 */
	private boolean execACSV0031(X31SDataBeanAccess[] paramBeans) {

		// 取得情報をクリア
		clearBean(paramBeans[0]);

		// 検索条件を退避
		paramBeans[0].sendMessageString(ACW01103SFConst.TAIHI_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_SET_VALUE, 
						paramBeans[0].sendMessageString(ACW01103SFConst.SEARCH_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_GET_VALUE));
		paramBeans[0].sendMessageString(ACW01103SFConst.TAIHI_EOID, X31CWebConst.DATABEAN_SET_VALUE, 
						paramBeans[0].sendMessageString(ACW01103SFConst.SEARCH_EOID, X31CWebConst.DATABEAN_GET_VALUE));
		paramBeans[0].sendMessageString(ACW01103SFConst.TAIHI_SYSID, X31CWebConst.DATABEAN_SET_VALUE, 
						paramBeans[0].sendMessageString(ACW01103SFConst.SEARCH_SYSID, X31CWebConst.DATABEAN_GET_VALUE));

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SERVICE_ID_ACSV0031);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		ACSV0031_ACSV0031OPDBMapper mapper = new ACSV0031_ACSV0031OPDBMapper();

		mapper.setACSV003101SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);	// EKK0671B501 : はぴeポイント契約一覧照会（料金用）
		mapper.setACSV003102SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);	// EAC0161B010 : はぴeポイント引当一覧照会

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getACSV003101SC(paramBeans, outputMap);
		mapper.getACSV003102SC(paramBeans, outputMap);

		// 出力結果の件数チェック
		setServiceResult(paramBeans[0]);

		// 契約ボタンの活性非活性を設定する
		setKeiBtnFlg(paramBeans[0]);

		return true;
	}

	/**
	 * 一覧情報クリア処理<br>
	 * <br>
	 * はぴｅポイント契約情報、はぴｅポイントリストをクリアします。
	 * 
	 * @param bean はぴｅポイント情報取得サービスフォームBean
	 */
	private void clearBean(X31SDataBeanAccess bean)
	{
		// 活性フラグを初期化
		bean.sendMessageBoolean(ACW01103SFConst.ENBL_CTRL_KEI_BTN, X31CWebConst.DATABEAN_SET_VALUE, false);

		// はぴｅポイント契約情報を取得する
		X31SDataBeanAccessArray hapiePointKeiInfo = bean.getDataBeanArray(ACW01103SFConst.HAPIE_POINT_KEI_INFO);
		// はぴｅポイントリストを取得する
		X31SDataBeanAccessArray hapiePointList = bean.getDataBeanArray(ACW01103SFConst.HAPIE_POINT_LIST);

		// はぴｅポイント契約情報の存在判定
		if (hapiePointKeiInfo != null)
		{
			// はぴｅポイント契約情報のクリア
			hapiePointKeiInfo.clearArray();
			hapiePointKeiInfo.addDataBean();
		}

		// はぴｅポイントリストの存在判定
		if (hapiePointList != null)
		{
			// はぴｅポイントリストのクリア
			hapiePointList.clearArray();
		}
	}

	/**
	 * サービス処理結果設定<br>
	 * <br>
	 * サービスの処理結果を設定します。
	 * 
	 * @param bean はぴｅポイント情報取得サービスフォームBean
	 */
	private void setServiceResult(X31SDataBeanAccess bean)
	{
		// はぴｅポイント契約情報を取得する
		X31SDataBeanAccess hapiePointKeiInfo = bean.getDataBeanArray(ACW01103SFConst.HAPIE_POINT_KEI_INFO).getDataBean(0);
		// はぴｅポイントリストを取得する
		X31SDataBeanAccessArray hapiePointList = bean.getDataBeanArray(ACW01103SFConst.HAPIE_POINT_LIST);

		// 取得結果の0件判定
		if (hapiePointKeiInfo.sendMessageString(ACW01103SFConst.HAPIE_POINT_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE) == null
				|| hapiePointList.getCount() == 0)
		{
			// 0件の場合、エラーメッセージを出力する
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
		}
	}

	/**
	 * 契約ボタンの活性非活性フラグを設定する
	 * 
	 * @param paramBeans
	 */
	private void setKeiBtnFlg(X31SDataBeanAccess bean)
	{
		X31SDataBeanAccess hapiePointKeiInfo = bean.getDataBeanArray(ACW01103SFConst.HAPIE_POINT_KEI_INFO).getDataBean(0);
		String hapiePointKeiNo = hapiePointKeiInfo.sendMessageString(ACW01103SFConst.HAPIE_POINT_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JCRUtilCommon.isNull(hapiePointKeiNo))
		{
			bean.sendMessageBoolean(ACW01103SFConst.ENBL_CTRL_KEI_BTN, X31CWebConst.DATABEAN_SET_VALUE, true);
		}
		else
		{
			bean.sendMessageBoolean(ACW01103SFConst.ENBL_CTRL_KEI_BTN, X31CWebConst.DATABEAN_SET_VALUE, false);
		}
	}

}
