/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW00919SFLogic
*   ソースファイル名：FUW00919SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年02月02日
*＜機能概要＞
*   eo光テレビオプション入力（量販・訪販）画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/02/02   FJ）大戸    新規作成
*   v3.00.00    2012/04/17   FJ）大野    料金シミュレーション対応
*   v4.00.00    2012/07/12   FJ）大塚   「ANK-0404-01-01」 eoモバイル3G 42Mハイブリッドタイプ対応
*   v5.00.00    2013/06/10   FJ）知識   【ANK-1534-00-00】eoモバイル42Mエリア縮小対応
*   v29.00.00   2017/01/16   FJ）謝     【ANK-3112-00-00】訪販チャネルのタブレット対応
*   v39.00.00   2018/11/23   FJ) 大島   【ANK-3473-00-00】選択性CPシステム改修
*   v73.00      2024/09/24   FJ）福山   【ANK-4570-00-00】コンテンツ新規同時申込み時契約仕様見直し対応
**********************************************************************/
package eo.web.webview.FUW00919SF;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
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.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0148_FUSV0148OPDBMapper;
import eo.web.webview.mapping.FUSV0251_FUSV0251OPDBMapper;

/**
 * eo光テレビオプション選択画面サービスフォームBeanビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00919SFLogic extends JCCWebBusinessLogic
{
	/** ガイド誌冊数ボタン表示フラグ:1:表示 */
	private static final String GUIDEMG_CNT_BTN_DSP_FLG_ON = "1";

	/** サービス:FUSV0148:eo光テレビオプション入力チェック */
	private static final String FUSV0148_ID = "FUSV0148";

	/** サービス:FUSV0251:eo光テレビオプション入力（初期表示） */
	private static final String FUSV0251_ID = "FUSV0251";

	/**
	 * 初期処理
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 画面情報を取得し、サービスフォームBeanに設定
		JCCWebCommon.getScreenInfo(this);

		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 空データの作成
		createData(commonInfoBean);

		// WEB新規
		X31SDataBeanAccessArray webnewList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webnewBean = webnewList.getDataBean(0);

		// ｅｏ光テレビ
		X31SDataBeanAccessArray eoTvList = webnewBean.getDataBeanArray(CommonInfoCFConst.EOTV);
		X31SDataBeanAccess eoTvBean = eoTvList.getDataBean(0);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 運用日付の設定
		String opeDate = JFUWebCommon.getOpeDate(this, null);
		setFuOpedate(commonInfoBean, opeDate);

		// サービスフォームBeanデータ設定

		// 冊数ラジオボタン設定
		serviceFormBean.sendMessageString(FUW00919SFConst.BTN_GUIDEMG_CNT, X31CWebConst.DATABEAN_SET_VALUE, eoTvBean.sendMessageString(
				CommonInfoCFConst.GUIDEMG_CNT_13, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面表示制御

		// 申込マンションタイプが2:メゾン以外の場合
		if (!webnewBean.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE)
				.equals(JFUStrConst.MSKM_MNS_TYPE_MEZON))
		{
			// 冊数ラジオボタン(２冊〜５冊)表示
			serviceFormBean.sendMessageString(FUW00919SFConst.GUIDEMG_CNT_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, GUIDEMG_CNT_BTN_DSP_FLG_ON);
		}

		// eo光テレビオプション選択（初期表示）サービス呼出
		this.callService0251(serviceFormBean);

		return true;
	}

	/**
	 * 次へボタン押下
	 * 
	 * @return 必ずtrue
	 * @throws Exception
	 */
	public boolean next() throws Exception
	{
		// 画面情報を取得し、サービスフォームBeanに設定
		JCCWebCommon.getScreenInfo(this);

		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// WEB新規
		X31SDataBeanAccessArray webnewList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webnewBean = webnewList.getDataBean(0);

// ANK-4570-00-00 ADD START
		// 契約サービス情報
		X31SDataBeanAccessArray keiyakuSvcInfoList = webnewBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfoBean = keiyakuSvcInfoList.getDataBean(0);
// ANK-4570-00-00 ADD END

		// eo光モバイル
		X31SDataBeanAccessArray eoMobileList = webnewBean.getDataBeanArray(CommonInfoCFConst.EOMOBILE);
		X31SDataBeanAccess eoMobileBean = eoMobileList.getDataBean(0);

		// リダイレクト情報
		X31SDataBeanAccessArray redirectInfoList = webnewBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO);
		X31SDataBeanAccess redirectInfoBean = redirectInfoList.getDataBean(0);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// サービス呼び出し
		callService0148(webnewBean, serviceFormBean);

		Boolean mobileFlg = false;
// ANK-3473-00-00 ADD START
		// 選択可能キャンペーンリスト存在フラグ
// ANK-3642-00-00 MOD START
// ANK-4570-00-00 MOD START
		boolean campaignFlg = JFUWebCommon.isCamapaignList(webnewBean, JCCWebCommon.getOpeDate(this, null));
// ANK-4570-00-00 MOD END
// ANK-3642-00-00 MOD END
// ANK-3473-00-00 ADD END
		// 申込区分
		String mskmKbn = webnewBean.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE);

		// 遷移先画面ID設定
		// モバイルコースが3:3G 7.2Mの場合
		// または、モバイルコースが4:3G 21Mの場合
		// または、モバイルコースが5:WiMAXの場合かつWiMAXROMが黒ロム
		// または、モバイルコースが6:3G 7.2M 光ハイブリッドの場合
		// または、モバイルコースが7:3G 21M 光ハイブリッドの場合
		if (eoMobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE).equals(
				JFUStrConst.MOBILE_COURSE_3G_7_2M)
				|| eoMobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE).equals(
						JFUStrConst.MOBILE_COURSE_3G_21M)
				|| (eoMobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE).equals(
						JFUStrConst.MOBILE_COURSE_WIMAX) && redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_WIMAXROM_17,
						X31CWebConst.DATABEAN_GET_VALUE).equals(JFUStrConst.WIMAXROM_BLACK)))
		{
			mobileFlg = true;
		}

		if (eoMobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE).equals(
				JFUStrConst.MOBILE_COURSE_3G_HHB)
				|| eoMobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE).equals(
						JFUStrConst.MOBILE_COURSE_3G_21M_HHB))
		{
			mobileFlg = true;
		}

		if (mobileFlg)
		{
			// eoモバイル受付が終了済のため、FUW00920_eoモバイル機器送付先入力(量販・訪販)画面への遷移処理が動きません
			// eo光モバイル機器送付先入力画面へ遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00920);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00920);
		}
// ANK-4570-00-00 MOD START
		else if (JFUStrConst.MSKM_KBN_NEW.equals(mskmKbn) && JFUStrConst.SELECT_SVC_NET_CHOICE.equals(keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE)))
// ANK-4570-00-00 MOD END
		{
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00965);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00965);
		}
// ANK-3473-00-00 ADD START
		// 選択可能キャンペーンが存在する場合、キャンペーン選択画面に遷移。
		else if (campaignFlg)
		{
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00959);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00959);
		}
// ANK-3473-00-00 ADD END
		else
		{
// ANK-3112-00-00 MOD START
//			// オプション選択内容確認画面へ遷移
//			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00928);
//			commonInfoBean
//					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00928);
			// お支払い方法入力（量販・訪販）画面へ遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00945);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00945);
// ANK-3112-00-00 MOD END
		}
		return true;
	}

	/**
	 * 戻るボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// WEB新規
		X31SDataBeanAccessArray webnewList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webnewBean = webnewList.getDataBean(0);

		// ｅｏ光テレビ
		X31SDataBeanAccessArray eoTvList = webnewBean.getDataBeanArray(CommonInfoCFConst.EOTV);
		X31SDataBeanAccess eoTvBean = eoTvList.getDataBean(0);

		// 契約サービス情報
		X31SDataBeanAccessArray keiyakuSvcInfoList = webnewBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfoBean = keiyakuSvcInfoList.getDataBean(0);

		// 共有フォームBeanにデータを設定
		webnewBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);

		// 共通クリア処理
		JFUWebCommon.comClear(this);

		// 選択サービス(電話)が1:選択の場合
		if (keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE).equals(
				JFUStrConst.SELECT_SVC_TEL_CHOICE))
		{
			// eo光電話オプション選択画面へ遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00917);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00917);
		}
		else
		{
			// eo光ネットオプション選択画面へ遷移
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00916);
			commonInfoBean
					.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00916);
		}
		return true;

	}

	/**
	 * 確認画面へ戻るボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean backKakunin() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// WEB新規
		X31SDataBeanAccessArray webnewList = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webnewBean = webnewList.getDataBean(0);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// サービス呼び出し
		callService0148(webnewBean, serviceFormBean);

		// オプション選択内容確認へ遷移
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00928);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00928);

		return true;
	}

	/**
	 * 冊数ラジオボタン押下
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean ryokin() throws Exception
	{
		//TODO 料金シミュレーション共通部品を呼び出し
		JFUWebCommon.ryokin(this);

		return true;
	}

	/**
	 * eo光テレビオプション選択（初期表示）サービス呼び出し処理
	 * 
	 * @param serviceFormBean	サービスフォームBean
	 * @throws Exception 
	 */
	private void callService0251(X31SDataBeanAccess serviceFormBean) throws Exception
	{
		// プロパティからテレビガイド誌の料金コースコード・料金プランコードを取得する。

		// サービスフォームBeanデータ設定
		// テレビガイド誌の料金コースコードを設定
		serviceFormBean.sendMessageString(FUW00919SFConst.PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.KK0791_PCRS_CD_B36);

		// テレビガイド誌の料金プランコードを設定
		serviceFormBean.sendMessageString(FUW00919SFConst.PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.KK0591_PPLAN_CD_PB3601);

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, FUSV0251_ID);

		// DataBean-BPマッピング
		FUSV0251_FUSV0251OPDBMapper mapper = new FUSV0251_FUSV0251OPDBMapper();

		HashMap<String, Map<String, String>> inputMap = new HashMap<String, Map<String, String>>();
		HashMap<String, String> outputMap = new HashMap<String, String>();

		X31SDataBeanAccess[] paramBean = { serviceFormBean };
		// 料金プラン従量単価（オプション申込料金）一覧照会マッピング
		mapper.setFUSV025101SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		X31SDataBeanAccess[] paramBeanOut = { serviceFormBean };

		// サービスからの戻りデータをBeanにセット
		mapper.getFUSV025101SC(paramBeanOut, outputMap, this);

		// 取得件数が0件の場合 エラー
		// 検索件数をチェック
		Integer iResultCount = getServiceFormBean().getDataBeanArray(FUW00919SFConst.GETSUGAKU_PRC_LIST).getCount();

		// 検索結果が0件
		if (iResultCount < 1)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
	}

	/**
	 * サービス呼び出し処理
	 * 
	 * @param webnewBean		共有フォームBean.ＷＥＢ新規情報
	 * @param serviceFormBean	サービスフォームBean
	 */
	private void callService0148(X31SDataBeanAccess webnewBean, X31SDataBeanAccess serviceFormBean)
	{
		// サービスフォームBeanにデータを設定

		// ｅｏ光テレビ
		X31SDataBeanAccessArray eoTvList = webnewBean.getDataBeanArray(CommonInfoCFConst.EOTV);
		X31SDataBeanAccess eoTvBean = eoTvList.getDataBean(0);

		serviceFormBean.sendMessageString(FUW00919SFConst.OP_SVC_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.KK0821_OP_SVC_CD_B068);
		serviceFormBean.sendMessageString(FUW00919SFConst.PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.KK0791_PCRS_CD_B36);
		serviceFormBean.sendMessageString(FUW00919SFConst.PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.KK0591_PPLAN_CD_PB3601);
		serviceFormBean.sendMessageString(FUW00919SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00576_00001);

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, FUSV0148_ID);

		// DataBean-BPマッピング
		FUSV0148_FUSV0148OPDBMapper mapper = new FUSV0148_FUSV0148OPDBMapper();

		HashMap<String, Map<String, String>> inputMap = new HashMap<String, Map<String, String>>();
		HashMap<String, String> outputMap = new HashMap<String, String>();

		X31SDataBeanAccess[] paramBean = { serviceFormBean };
		mapper.setFUSV014801SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);

		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		// 共有フォームBeanにデータを設定
		webnewBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);
		eoTvBean.sendMessageString(CommonInfoCFConst.GUIDEMG_CNT_13, X31CWebConst.DATABEAN_SET_VALUE, serviceFormBean.sendMessageString(
				FUW00919SFConst.BTN_GUIDEMG_CNT, X31CWebConst.DATABEAN_GET_VALUE));
	}

	/**
	 * 共有フォームBeanのデータが存在しない場合、空データを作成します。（JasperException回避のため）<br>
	 * １．「マンション情報」を作成する。
	 * 
	 * <br>
	 * @param commoninfoBean
	 */
	private void createData(X31SDataBeanAccess commoninfoBean)
	{
		// "WEB新規"階層
		X31SDataBeanAccess ws = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);

		// "マンション情報"階層
		X31SDataBeanAccessArray mansyonjouhouArr = ws.getDataBeanArray(CommonInfoCFConst.MANSION_INFO);
		if (mansyonjouhouArr.getDataBean(0) == null)
		{
			// 「マンション情報」の空データ作成
			mansyonjouhouArr.addDataBean();
		}
	}
	/**
	 * 運用日付(OPEDATE)の設定です。
	 *
	 * 共通フォームBean.フロント共有情報.フロント運用日付に運用日付(OPEDATE)を設定。
	 *
	 * @param commonInfoBean 共通フォームBean
	 * @param opeDate 運用日付(OPEDATE)
	 */
	private void setFuOpedate(X31SDataBeanAccess commonInfoBean, String opeDate)
	{
		//=====================================================================
		// 運用日付の設定
		//=====================================================================
		// 共通フォームBean.フロント共有情報
		X31SDataBeanAccess frontInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO).getDataBean(0);
		// フロント共有情報.フロント運用日付を設定します。
		frontInfo.sendMessageString(CommonInfoCFConst.FU_OPEDATE_05, X31CWebConst.DATABEAN_SET_VALUE, opeDate);

	}
}
