/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：ACW01401SFLogic
 *	ソースファイル名：ACW01401SFLogic.java
 *	作成者			：富士通
 *	日付			：2012年02月15日
 *＜機能概要＞
 *	FTTH通信量一覧画面のビューロジック部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/02/15	富士通		新規作成
 *
 **********************************************************************/
package eo.web.webview.ACW01401SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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.JCHFomatString;
import eo.web.webview.common.JCHPageTransferUtil;
import eo.web.webview.common.JCHPulldownUtil;
import eo.web.webview.common.JCHWebCommon;
import eo.web.webview.mapping.ACSV0025_ACSV0025OPDBMapper;

/**
 * FTTH通信量一覧画面のビューロジックを提供します。
 * <p>
 * <BR>
 * 
 * @author 富士通
 */
public class ACW01401SFLogic extends JCCWebBusinessLogic
{

	/** ユースケースID:FTTH通信量一覧情報取得 */
	private static final String USECASE_ID_ACSV0025 = "ACSV0025";

	/** メッセージＩＤ(検索結果:指定されたデータが存在しません。) */
	private static final String MESSAGE_ID_SSN_TRGT_NONE = "EKB0330--I";

	/**
	 * FTTH通信量一覧画面の初期表示処理を行います。 <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);
		if (screenId.equals(JACScreenConst.SCREEN_ID_ACW01401))
		{
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01401);
			commoninfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01401);

			initScreen();
		}

		return true;
	}

	/**
	 * FTTH通信量一覧画面の検索処理を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean search() throws Exception
	{
		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// 利用年月
		String useYm = JCHPulldownUtil.getSelectedValue(paramBeans, ACW01401SFConst.USE_YM_INFO, ACW01401SFConst.USE_YM_LIST_01,
				ACW01401SFConst.USE_YM_SEL_01);
		paramBeans[0].sendMessageString(ACW01401SFConst.USE_YM, X31CWebConst.DATABEAN_SET_VALUE, useYm.replace(JACStrConst.SLASH,
				JACStrConst.KARA_MOJI));

		// 利用年月選択値
		String useYmIndex = JCHPulldownUtil.getSelectedIndex(paramBeans, ACW01401SFConst.USE_YM, ACW01401SFConst.USE_YM_INFO,
				ACW01401SFConst.USE_YM_LIST_01, JACStrConst.SLASH);
		paramBeans[0].sendMessageString(ACW01401SFConst.USE_YM_SEL_INDEX, X31CWebConst.DATABEAN_SET_VALUE, useYmIndex);

		// Bean初期化
		paramBeans[0].getDataBeanArray(ACW01401SFConst.DETAIL_INFO).clearArray();
		paramBeans[0].getDataBeanArray(ACW01401SFConst.GOKEI_INFO).clearArray();

		// サービス実行
		this.execACSV0025(paramBeans);

		// エラーメッセージの設定
		this.setErrorMessage(paramBeans);

		return true;
	}

	/**
	 * FTTH通信量登録画面へ遷移を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean regist() throws Exception
	{
		// 画面遷移後に使用する引継情報(入力値)を作成
		List<String> dataHikitugiList = new ArrayList<String>();
		dataHikitugiList.add(ACW01401SFConst.SYS_ID);
		dataHikitugiList.add(ACW01401SFConst.SVC_KEI_NO);
		dataHikitugiList.add(ACW01401SFConst.USE_YM);
		dataHikitugiList.add(ACW01401SFConst.DETAIL_ICRN_SEL_INDEX);
		dataHikitugiList.add(ACW01401SFConst.USE_YM_SEL_INDEX);

		// 画面遷移後に使用する引継情報(選択値)を作成
		HashMap<String, Object> dataHikitugiMap = new HashMap<String, Object>();

		// 自画面に戻ってくる場合に必要な検索条件(入力値)を作成
		List<String> searchConditionList = new ArrayList<String>();
		searchConditionList.add(ACW01401SFConst.SYS_ID);
		searchConditionList.add(ACW01401SFConst.SVC_KEI_NO);
		searchConditionList.add(ACW01401SFConst.USE_YM);
		searchConditionList.add(ACW01401SFConst.DETAIL_ICRN_SEL_INDEX);
		searchConditionList.add(ACW01401SFConst.USE_YM_SEL_INDEX);

		// 自画面に戻ってくる場合に必要な検索条件(選択値)を作成
		HashMap<String, Object> searchConditionMap = new HashMap<String, Object>();

		// 画面遷移情報の設定
		HashMap<String, Object> screenTransferMap = JCHPageTransferUtil.createScreenTransferMap(dataHikitugiList, searchConditionList,
				JACScreenConst.SCREEN_ID_ACW01401, JACScreenConst.SCREEN_ID_ACW01402, JACScreenConst.SCREEN_ID_ACW01403);

		// 指定した情報を基に画面遷移を行う
		return JCHPageTransferUtil.screenTransfer(this, screenTransferMap, dataHikitugiMap, searchConditionMap);
	}

	/**
	 * FTTH通信量更新画面へ遷移を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean update() throws Exception
	{
		// 画面遷移後に使用する引継情報(入力値)を作成
		List<String> dataHikitugiList = new ArrayList<String>();
		dataHikitugiList.add(ACW01401SFConst.SYS_ID);
		dataHikitugiList.add(ACW01401SFConst.SVC_KEI_NO);
		dataHikitugiList.add(ACW01401SFConst.USE_YM);
		dataHikitugiList.add(ACW01401SFConst.DETAIL_ICRN_SEL_INDEX);
		dataHikitugiList.add(ACW01401SFConst.USE_YM_SEL_INDEX);

		// 画面遷移後に使用する引継情報(選択値)を作成
		HashMap<String, Object> dataHikitugiMap = new HashMap<String, Object>();

		// 自画面に戻ってくる場合に必要な検索条件(入力値)を作成
		List<String> searchConditionList = new ArrayList<String>();
		searchConditionList.add(ACW01401SFConst.SYS_ID);
		searchConditionList.add(ACW01401SFConst.SVC_KEI_NO);
		searchConditionList.add(ACW01401SFConst.USE_YM);
		searchConditionList.add(ACW01401SFConst.DETAIL_ICRN_SEL_INDEX);
		searchConditionList.add(ACW01401SFConst.USE_YM_SEL_INDEX);

		// 自画面に戻ってくる場合に必要な検索条件(選択値)を作成
		HashMap<String, Object> searchConditionMap = new HashMap<String, Object>();

		// 画面遷移情報の設定
		HashMap<String, Object> screenTransferMap = JCHPageTransferUtil.createScreenTransferMap(dataHikitugiList, searchConditionList,
				JACScreenConst.SCREEN_ID_ACW01401, JACScreenConst.SCREEN_ID_ACW01404, JACScreenConst.SCREEN_ID_ACW01405);

		// 指定した情報を基に画面遷移を行う
		return JCHPageTransferUtil.screenTransfer(this, screenTransferMap, dataHikitugiMap, searchConditionMap);
	}

	/**
	 * 戻るボタンを押下した場合、サービス契約情報更新（eo光ネット）画面へ遷移し再検索を行います。<br>
	 * <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを取得し、設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));

		return true;
	}

	/**
	 * FTTH通信量一覧画面の初期表示処理を行います。 <br>
	 */
	private void initScreen()
	{
		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// 明細一覧の選択インデックス
		String detailIdx = paramBeans[0].sendMessageString(ACW01401SFConst.DETAIL_ICRN_SEL_INDEX, X31CWebConst.DATABEAN_GET_VALUE);

		// FTTH通信量一覧情報取得サービス実行
		this.execACSV0025(paramBeans);

		// 画面遷移前に選択していた値を戻す。
		this.setSelectIndexBack(paramBeans, detailIdx);

	}

	/**
	 * FTTH通信量一覧情報取得サービスを実行します。 <br>
	 * 
	 * @param paramBeans FTTH通信量一覧画面サービスフォームBean
	 */
	private void execACSV0025(X31SDataBeanAccess[] paramBeans)
	{
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_ACSV0025);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		ACSV0025_ACSV0025OPDBMapper mapper = new ACSV0025_ACSV0025OPDBMapper();

		mapper.setACSV002501SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // EAC0591B010:通信量検索情報照会
		mapper.setACSV002502SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // EAC0601B030:通信量合計利用年月一覧照会
		mapper.setACSV002503SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // EAC0591B020:通信量明細一覧照会
		mapper.setACSV002504SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // EAC0601B020:通信量合計情報照会

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getACSV002501SC(paramBeans, outputMap);
		mapper.getACSV002502SC(paramBeans, outputMap);
		mapper.getACSV002503SC(paramBeans, outputMap);
		mapper.getACSV002504SC(paramBeans, outputMap);

		// ラジオボタンの選択値をクリア
		paramBeans[0].sendMessageString(ACW01401SFConst.DETAIL_ICRN_SEL_INDEX, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.KARA_MOJI);

		// 背景色の設定
		this.setDspCtrlValue(paramBeans);

		// ボタン制御値の設定
		this.setDisabledCntrlValue(paramBeans);
	}

	/**
	 * エラーメッセージ設定処理。 <br>
	 * 
	 * @param bean FTTH通信量一覧画面Bean
	 */
	private void setErrorMessage(X31SDataBeanAccess[] bean)
	{
		if (isExistDetailInfo(bean) == false)
		{
			JCCWebCommon.setMessageInfo(this, MESSAGE_ID_SSN_TRGT_NONE);
		}
	}

	/**
	 * 明細一覧情報の存在を判定します。 <br>
	 * 
	 * @param bean FTTH通信量一覧画面Bean
	 */
	private boolean isExistDetailInfo(X31SDataBeanAccess[] bean)
	{
		boolean isExist = false;

		X31SDataBeanAccessArray detailInfo = bean[0].getDataBeanArray(ACW01401SFConst.DETAIL_INFO);
		if (detailInfo.getCount().intValue() > 0)
		{
			isExist = true;
		}

		return isExist;
	}

	/**
	 * 画面遷移時、明細一覧で選択された各インデックスを設定します。 <br>
	 * 
	 * @param bean FTTH通信量一覧画面Bean
	 */
	private void setSelectIndexBack(X31SDataBeanAccess[] bean, String detailIdx)
	{
		String useYmIdx = bean[0].sendMessageString(ACW01401SFConst.USE_YM_SEL_INDEX, X31CWebConst.DATABEAN_GET_VALUE);
		if (JCHWebCommon.isNotNullOrEmpty(useYmIdx))
		{
			X31SDataBeanAccess useYmInfo = bean[0].getDataBeanArray(ACW01401SFConst.USE_YM_INFO).getDataBean(0);
			useYmInfo.sendMessageString(ACW01401SFConst.USE_YM_SEL_01, X31CWebConst.DATABEAN_SET_VALUE, useYmIdx);
		}

		if (JCHWebCommon.isNotNullOrEmpty(detailIdx))
		{
			bean[0].sendMessageString(ACW01401SFConst.DETAIL_ICRN_SEL_INDEX, X31CWebConst.DATABEAN_SET_VALUE, detailIdx);
		}

	}

	/**
	 * 明細一覧情報の背景色を設定します。 <br>
	 * 
	 * @param bean FTTH通信量一覧画面Bean
	 */
	private void setDspCtrlValue(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray detailInfo = bean[0].getDataBeanArray(ACW01401SFConst.DETAIL_INFO);
		for (int i = 0; i < detailInfo.getCount().intValue(); i++)
		{
			X31SDataBeanAccess subBean = detailInfo.getDataBean(i);

			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			if (i % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			}
			subBean.sendMessageString(ACW01401SFConst.DSP_CNTRL_VALUE_02, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}
	}

	/**
	 * 明細一覧情報の有無により各ボタンの制御値を設定します。 <br>
	 * 
	 * @param bean FTTH通信量一覧画面Bean
	 */
	private void setDisabledCntrlValue(X31SDataBeanAccess[] bean)
	{
		String jsfDisabledCntrlValue = JACStrConst.CTL_VALUE_TRUE;
		String htmlDisabledCntrlValue = JACStrConst.CTL_VALUE_DISABLED;

		// 利用日非活性制御値
		bean[0].sendMessageString(ACW01401SFConst.DSBL_CTL_JSF_USE_HI, X31CWebConst.DATABEAN_SET_VALUE, jsfDisabledCntrlValue);
		// 補正通信量非活性制御値
		bean[0].sendMessageString(ACW01401SFConst.DSBL_CTL_JSF_HOSEI_TSRYO, X31CWebConst.DATABEAN_SET_VALUE, jsfDisabledCntrlValue);

		int listCnt = JCHPulldownUtil.getListCount(bean, ACW01401SFConst.USE_YM_INFO, ACW01401SFConst.USE_YM_LIST_01);
		if (listCnt == 0)
		{
			// 検索ボタン非活性制御値
			bean[0].sendMessageString(ACW01401SFConst.DSBL_CTL_JSF_BTN_SEARCH, X31CWebConst.DATABEAN_SET_VALUE, jsfDisabledCntrlValue);
		}

		// 利用月
		int useYm = 0;
		if (JCHWebCommon.isNotNullOrEmpty(bean[0].sendMessageString(ACW01401SFConst.USE_YM, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			useYm = Integer.valueOf(bean[0].sendMessageString(ACW01401SFConst.USE_YM, X31CWebConst.DATABEAN_GET_VALUE));
		}
		// オンライン運用日（yyyyMM）
		int opeDate = Integer.valueOf(JCHFomatString.formatYearMonth(JCCWebCommon.getOpeDate(this, JACStrConst.SYS_CD_AC)));

		X31SDataBeanAccessArray detailInfo = bean[0].getDataBeanArray(ACW01401SFConst.DETAIL_INFO);

		// 明細一覧が1件以上かつ利用月が当月以降の場合
		if (0 < detailInfo.getCount().intValue() && useYm >= (opeDate))
		{
			jsfDisabledCntrlValue = JACStrConst.CTL_VALUE_FALSE;
			htmlDisabledCntrlValue = JACStrConst.KARA_MOJI;

			bean[0].sendMessageString(ACW01401SFConst.DETAIL_ICRN_SEL_INDEX, X31CWebConst.DATABEAN_SET_VALUE, "0");
		}

		// ラジオボタン非活性制御値
		bean[0].sendMessageString(ACW01401SFConst.DSBL_CTL_HTML_RADIO_BTN, X31CWebConst.DATABEAN_SET_VALUE, htmlDisabledCntrlValue);
		// 新規登録ボタン非活性制御値
		bean[0].sendMessageString(ACW01401SFConst.DSBL_CTL_JSF_BTN_REGIST, X31CWebConst.DATABEAN_SET_VALUE, jsfDisabledCntrlValue);
		// 更新ボタン非活性制御値
		bean[0].sendMessageString(ACW01401SFConst.DSBL_CTL_JSF_BTN_UPDATE, X31CWebConst.DATABEAN_SET_VALUE, jsfDisabledCntrlValue);
	}
}
