/**********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：CHW01901SFLogic
 *   ソースファイル名：CHW01901SFLogic.java
 *   作成者          ：富士通
 *	日付			：2012年02月27日
 *＜機能概要＞
 *	サービス契約選択画面のビューロジック部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *	v1.00.00	2012/02/27	富士通		新規作成
 *	v5.00.00	2013/07/29	FJ)文元	   【IT1-2013-0001464】サービス契約選択画面に同じお客さまIDの情報を複数行表示している不備対応
 *
 **********************************************************************/
package eo.web.webview.CHW01901SF;

import java.util.ArrayList;
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.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHCommonServiceUtil;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.mapping.CHSV0066_CHSV0066OPDBMapper;

/**
 * サービス契約選択画面のビューロジックを提供します。
 * <p>
 * <BR>
 * 
 * @author 富士通
 */
public class CHW01901SFLogic extends JCCWebBusinessLogic
{

	/** ユースケースID(サービス契約選択画面照会取得) */
	private static final String USECASE_ID_CHSV0066 = "CHSV0066";

	/** メッセージＩＤ(契約情報なし) */
	private static final String MESSAGE_ID_TEISE_ICRN_NONE = "EKB6500-KW";

	/** 契約情報判定文字列 */
	private static final String STR_KEI_INFO = "契約情報";

	/** サービス契約一覧照会（複数指定）情報判定文字列 */
	private static final String STR_SVC_KEI_ICR_INFO = "サービス契約一覧照会（複数指定）情報";

	/**
	 * サービス契約選択画面の初期表示処理を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean init() throws Exception
	{
		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを判定して画面IDに対応する初期表示処理を呼び出す
		String screenId = commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);

		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		if (screenId.equals(JACScreenConst.SCREEN_ID_CHW01901))
		{
			initAddScreen();
			setDisabledCntrlValueOfBtn(paramBeans);
		}

		return true;
	}

	/**
	 * サービス契約選択画面の初期表示処理を行います。 <br>
	 * 
	 * @throws Exception 例外が発生した場合
	 */
	private void initAddScreen() throws Exception
	{
		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		search();

		return;
	}

	/**
	 * サービス契約選択画面の初期表示処理を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean search() throws Exception
	{
		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };
		// サービス実行前に検索結果項目をクリアする
		paramBeans[0].getDataBeanArray(CHW01901SFConst.SVC_KEI_ICRN_INFO).clearArray();

		// サービス契約選択画面情報取得サービス実行
		this.execCHSV0066(paramBeans);
		setErrorMessage(paramBeans);
		return true;
	}

	/**
	 * サービス契約選択画面情報取得サービスを実行します。 <br>
	 * 
	 * @param paramBeans サービス契約選択画面サービスフォームBean
	 */
	private void execCHSV0066(X31SDataBeanAccess[] paramBeans)
	{
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0066);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0066_CHSV0066OPDBMapper mapper = new CHSV0066_CHSV0066OPDBMapper();

		JCHCommonServiceUtil.setMAPSVCKEIINFOCC(paramBeans, inDataMap,JPCModelConstant.FUNC_CD_1); // 出力種別
		
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getMAPSVCKEIINFOCC(paramBeans, outputMap);
		
		// 初期表示位置
		// サービス契約選択画面情報取得インデックス
		paramBeans[0].sendMessageString(CHW01901SFConst.DETAIL_ICRN_SEL_INDEX, X31CWebConst.DATABEAN_SET_VALUE, "0");

		// 制御値
		this.setCtrlValueInPrcTeiseIcrn(paramBeans);

		return;
	}

	/**
	 * サービス契約一覧照会情報の制御値を設定します。 <br>
	 * 
	 * @param bean サービス契約選択サービスフォームBean
	 */
	private void setCtrlValueInPrcTeiseIcrn(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray prcTeiseIcrnInfo = bean[0].getDataBeanArray(CHW01901SFConst.SVC_KEI_ICRN_INFO);
		for (int idx = 0; idx < prcTeiseIcrnInfo.getCount().intValue(); idx++)
		{
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			if (idx % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			}
			prcTeiseIcrnInfo.getDataBean(idx).sendMessageString(CHW01901SFConst.DSP_CNTRL_VALUE_01, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}
	}

	/**
	 * ボタンの制御値を設定します。 <br>
	 * 
	 * @param bean サービス契約選択サービスフォームBean
	 */
	private void setDisabledCntrlValueOfBtn(X31SDataBeanAccess[] bean)
	{
		String htmlDisabledCntrlValue = JACStrConst.CTL_VALUE_TRUE;

		X31SDataBeanAccessArray svcKeiIcrnInfo = bean[0].getDataBeanArray(CHW01901SFConst.SVC_KEI_ICRN_INFO);
		if (svcKeiIcrnInfo.getCount().intValue() > 0)
		{
			htmlDisabledCntrlValue = JACStrConst.CTL_VALUE_FALSE;
		}

		/* ◇HTMLボタン */
		// 詳細ボタン
		bean[0].sendMessageString(CHW01901SFConst.DSBL_CTL_JSF_BTN_CHOICE, X31CWebConst.DATABEAN_SET_VALUE, htmlDisabledCntrlValue);
	}

	/**
	 * エラーメッセージ設定処理。 <br>
	 * 
	 * @param bean サービス契約選択サービスフォームBean
	 */
	private void setErrorMessage(X31SDataBeanAccess[] paramBeans)
	{
		X31SDataBeanAccessArray list_svc_kei_icrn_info = paramBeans[0].getDataBeanArray(STR_SVC_KEI_ICR_INFO);
		if (null != list_svc_kei_icrn_info)
		{
			int intSize = list_svc_kei_icrn_info.getCount();
			if (0 == intSize)
			{
				JCCWebCommon.setMessageInfo(this, MESSAGE_ID_TEISE_ICRN_NONE, new String[] { STR_KEI_INFO });
			}
		}
		else
		{
			JCCWebCommon.setMessageInfo(this, MESSAGE_ID_TEISE_ICRN_NONE, new String[] { STR_KEI_INFO });
		}
	}

	/**
	 * 遷移元で指定した遷移画面に遷移します。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean clickSelect() throws Exception
	{
		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 引継情報の作成
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// 選択している明細のサービス契約番号・請求契約番号の取得
		int idxSelValue = Integer.parseInt(bean.sendMessageString(CHW01901SFConst.DETAIL_ICRN_SEL_INDEX, X31CWebConst.DATABEAN_GET_VALUE));
		X31SDataBeanAccess svcKeiIcrn = bean.getDataBeanArray(CHW01901SFConst.SVC_KEI_ICRN_INFO).getDataBean(idxSelValue);
		String svcKeiNo = svcKeiIcrn.sendMessageString(CHW01901SFConst.SVC_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		String seikyKeiNo = bean.sendMessageString(CHW01901SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		String strNextScreenID = paramBeans[0].sendMessageString(CHW01901SFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String strNextScreenNM = paramBeans[0].sendMessageString(CHW01901SFConst.NEXT_SCREEN_NM, X31CWebConst.DATABEAN_GET_VALUE);

		// 引継情報の設定
		dataMap.put(CHW01901SFConst.SVC_KEI_NO_01, svcKeiNo);
		dataMap.put(CHW01901SFConst.SEIKY_KEI_NO, seikyKeiNo);
		// 遷移区分 ← "0"(画面遷移)
		dataMap.put(JKKCommonConst.HKTGI_POPUP_MODE, "0");
		// 異動区分 ← ""(空文字)
		dataMap.put(JKKCommonConst.HKTGI_IDO_DIV, JACStrConst.KARA_MOJI);
		// 異動理由コード ← ""(空文字)
		dataMap.put(JKKCommonConst.HKTGI_IDO_RSN_CD, new String[] { JACStrConst.KARA_MOJI });

		if (JACScreenConst.SCREEN_ID_KKW01601.equals(strNextScreenID))
		{
			// 契約Ｓ引き継ぎ用データマップ格納処理
			dataMap = setKeiHktgiDataMap(dataMap);
		}

		// 引継情報の設定
		JCCWebCommon.setScreenInfo(this, strNextScreenID, dataMap);

		// 戻る際に必要な情報の設定
		JCCWebCommon.setScreenId(this, strNextScreenID, JACScreenConst.SCREEN_ID_CHW01901);

		// 遷移先画面の設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, strNextScreenID);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, strNextScreenNM);

		return true;
	}

	/**
	 * 契約Ｓ引き継ぎ用データマップ格納処理
	 * 
	 * @param inMap 引き継ぎ用のデータマップ
	 * @return 受け渡し用HashMap
	 */
	private static HashMap<String, Object> setKeiHktgiDataMap(HashMap<String, Object> inMap)
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

		list.add(inMap);
		dataMap.put(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, list);

		return dataMap;
	}

}
