/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：料金管理
*   モジュール名    ：はぴｅポイント情報画面
*   ソースファイル名：ACW01101SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年08月15日
*＜機能概要＞
*  はぴｅポイント情報照会を行う画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00.00    2012/08/15   FJ）富士通    新規作成
*
**********************************************************************/
package eo.web.webview.ACW01101SF;

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.ACW01102SF.ACW01102SFConst;
import eo.web.webview.ACW01103SF.ACW01103SFConst;
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.ACSV0029_ACSV0029OPDBMapper;

/**
 * はぴｅポイント情報画面用ビューロジック
 * 
 * @author FJ
 * @since 2012-08-15
 */
@SuppressWarnings("serial")
public class ACW01101SFLogic extends JCCWebBusinessLogic
{
	/** はぴｅポイント情報取得・サービスID */
	private static final String SERVICE_ID_ACSV0029 = "ACSV0029";

	/**
	 * 初期表示処理<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_ACW01101);

		// -------------------------------------------------- //
		// はぴｅポイント情報取得サービス呼び出し
		// -------------------------------------------------- //
		// 入力パラメータを取得
		String hapieId = bean.sendMessageString(ACW01101SFConst.SEARCH_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String eoId = bean.sendMessageString(ACW01101SFConst.SEARCH_EOID, X31CWebConst.DATABEAN_GET_VALUE);
		String sysId = bean.sendMessageString(ACW01101SFConst.SEARCH_SYSID, X31CWebConst.DATABEAN_GET_VALUE);

		if (!(JCRUtilCommon.isNull(hapieId) && JCRUtilCommon.isNull(eoId) && JCRUtilCommon.isNull(sysId)))
		{
			// サービスフォームBeanのアクセサを配列化する
			X31SDataBeanAccess[] paramBeans = {bean};
			// はぴｅポイント情報取得サービス実行
			execACSV0029(paramBeans);
		}

		// -------------------------------------------------- //
		// 共有フォーム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>
	 * はぴｅポイント情報取得サービスを呼び出し、
	 * はぴｅポイント契約情報、明細情報の取得を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean search() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean};

		// -------------------------------------------------- //
		// はぴｅポイント情報取得サービス呼び出し
		// -------------------------------------------------- //
		execACSV0029(paramBeans);

		// -------------------------------------------------- //
		// 共有フォーム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>
	 * 検索項目が確定している場合、これを引継ぎ、はぴｅポイントｷｬｯｼｭﾊﾞｯｸ情報画面への遷移を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean hikiate() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// 引継情報の設定
		// -------------------------------------------------- //
		// 次画面への引継情報(dataMap)を作成する。
		HashMap<String, Object> hktgMap = new HashMap<String, Object>();

		hktgMap.put(ACW01103SFConst.SEARCH_HAPIE_MEMBER_ID, bean.sendMessageString(ACW01101SFConst.TAIHI_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_GET_VALUE));
		hktgMap.put(ACW01103SFConst.SEARCH_SYSID, bean.sendMessageString(ACW01101SFConst.TAIHI_SYSID, X31CWebConst.DATABEAN_GET_VALUE));
		hktgMap.put(ACW01103SFConst.SEARCH_EOID, bean.sendMessageString(ACW01101SFConst.TAIHI_EOID, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		JCRWebCommon.setScreenInfo(this, JACScreenConst.SCREEN_ID_ACW01103, hktgMap);

		// 戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
		JCCWebCommon.setScreenId(this, JACScreenConst.SCREEN_ID_ACW01103, JACScreenConst.SCREEN_ID_ACW01101);

		// -------------------------------------------------- //
		// 共有フォーム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>
	 * はぴｅ番号、選択した明細のはぴｅ計算対象年月を引継ぎ、はぴeポイント内訳情報画面をサブ画面で表示します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean pointUcwk() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// 引継情報の設定
		// -------------------------------------------------- //
		// はぴｅポイント契約情報を取得する
		X31SDataBeanAccess hapiePointKeiInfo = bean.getDataBeanArray(ACW01101SFConst.HAPIE_POINT_KEI_INFO).getDataBean(0);
		// はぴｅポイント契約番号を取得する
		String hapiePointKeiNo = hapiePointKeiInfo.sendMessageString(ACW01101SFConst.HAPIE_POINT_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);

		// はぴｅポイントリストを取得
		X31SDataBeanAccessArray hapiePointList = bean.getDataBeanArray(ACW01101SFConst.HAPIE_POINT_LIST);
		// はぴｅポイント選択値を取得
		int index = Integer.parseInt(bean.sendMessageString(ACW01101SFConst.HAPIE_POINT_SEL, X31CWebConst.DATABEAN_GET_VALUE));
		// 選択されている明細情報を取得する
		X31SDataBeanAccess hapiePointInfo = hapiePointList.getDataBean(index);
		// ポイント対象年月を取得する
		String calcYm = hapiePointInfo.sendMessageString(ACW01101SFConst.POINT_TRGT_YM_02, X31CWebConst.DATABEAN_GET_VALUE);

		// 次画面への引継情報(dataMap)を作成する。
		HashMap<String, Object> hktgMap = new HashMap<String, Object>();

		hktgMap.put(ACW01102SFConst.HAPIEPOINT_KEI_NO, hapiePointKeiNo);
		hktgMap.put(ACW01102SFConst.POINT_TRGT_YM, calcYm);

		// 画面情報設定部品（JCCWebCommon.setScreenInfo)を使用し、次画面への引継情報を設定する。
		JCRWebCommon.setScreenInfo(this, JACScreenConst.SCREEN_ID_ACW01102, hktgMap);

		// 戻り先画面ID設定（JCCWebCommon.setScreenId)を使用し、次画面への引継情報を設定する。
		JCCWebCommon.setScreenId(this, JACScreenConst.SCREEN_ID_ACW01102, JACScreenConst.SCREEN_ID_ACW01101);

		// -------------------------------------------------- //
		// 共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01102);
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01102);

		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(ACW01101SFConst.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_ACW01101);

		// -------------------------------------------------- //
		// 共有フォーム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 void execACSV0029(X31SDataBeanAccess[] paramBeans) {

		// Bean情報をクリア
		clearBean(paramBeans[0]);

		// 検索条件を退避
		paramBeans[0].sendMessageString(ACW01101SFConst.TAIHI_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_SET_VALUE, 
						paramBeans[0].sendMessageString(ACW01101SFConst.SEARCH_HAPIE_MEMBER_ID, X31CWebConst.DATABEAN_GET_VALUE));
		paramBeans[0].sendMessageString(ACW01101SFConst.TAIHI_EOID, X31CWebConst.DATABEAN_SET_VALUE, 
						paramBeans[0].sendMessageString(ACW01101SFConst.SEARCH_EOID, X31CWebConst.DATABEAN_GET_VALUE));
		paramBeans[0].sendMessageString(ACW01101SFConst.TAIHI_SYSID, X31CWebConst.DATABEAN_SET_VALUE, 
						paramBeans[0].sendMessageString(ACW01101SFConst.SEARCH_SYSID, X31CWebConst.DATABEAN_GET_VALUE));

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SERVICE_ID_ACSV0029);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		ACSV0029_ACSV0029OPDBMapper mapper = new ACSV0029_ACSV0029OPDBMapper();

		mapper.setACSV002901SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);	// EKK0671B501 : はぴeポイント契約一覧照会（料金用）
		mapper.setACSV002902SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);	// EAC0091B010 : はぴeポイント一覧照会

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getACSV002901SC(paramBeans, outputMap);
		mapper.getACSV002902SC(paramBeans, outputMap);

		// 出力結果の件数チェック
		setServiceResult(paramBeans[0]);

		// 契約ボタンの活性非活性を設定する
		setKeiBtnFlg(paramBeans[0]);
	}

	/**
	 * 一覧情報クリア処理<br>
	 * <br>
	 * はぴｅポイント契約情報、はぴｅポイントリストをクリアします。
	 * 
	 * @param bean はぴｅポイント情報取得サービスフォームBean
	 */
	private void clearBean(X31SDataBeanAccess bean)
	{
		// 活性フラグを初期化
		bean.sendMessageBoolean(ACW01101SFConst.ENBL_CTRL_KEI_BTN, X31CWebConst.DATABEAN_SET_VALUE, false);

		// はぴｅポイント契約情報を取得する
		X31SDataBeanAccessArray hapiePointKeiInfo = bean.getDataBeanArray(ACW01101SFConst.HAPIE_POINT_KEI_INFO);
		// はぴｅポイントリストを取得する
		X31SDataBeanAccessArray hapiePointList = bean.getDataBeanArray(ACW01101SFConst.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(ACW01101SFConst.HAPIE_POINT_KEI_INFO).getDataBean(0);
		// はぴｅポイントリストを取得する
		X31SDataBeanAccessArray hapiePointList = bean.getDataBeanArray(ACW01101SFConst.HAPIE_POINT_LIST);

		// 取得結果の0件判定
		if (hapiePointKeiInfo.sendMessageString(ACW01101SFConst.HAPIE_POINT_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE) == null
				|| hapiePointList.getCount() == 0)
		{
			// 0件の場合、エラーメッセージを出力する
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
		}
	}

	/**
	 * 契約ボタンの活性非活性フラグを設定する
	 * 
	 * @param bean はぴｅポイント情報取得サービスフォームBean
	 */
	private void setKeiBtnFlg(X31SDataBeanAccess bean)
	{
		X31SDataBeanAccess hapiePointKeiInfo = bean.getDataBeanArray(ACW01101SFConst.HAPIE_POINT_KEI_INFO).getDataBean(0);
		String hapiePointKeiNo = hapiePointKeiInfo.sendMessageString(ACW01101SFConst.HAPIE_POINT_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JCRUtilCommon.isNull(hapiePointKeiNo))
		{
			bean.sendMessageBoolean(ACW01101SFConst.ENBL_CTRL_KEI_BTN, X31CWebConst.DATABEAN_SET_VALUE, true);
		}
		else
		{
			bean.sendMessageBoolean(ACW01101SFConst.ENBL_CTRL_KEI_BTN, X31CWebConst.DATABEAN_SET_VALUE, false);
		}
	}
}
