/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：メニュー(店頭販売支援)
*   ソースファイル名：FUW00954SFLogic.java
*   作成者          ：富士通
*   日付            ：2014年11月05日
*＜機能概要＞
*  メニュー(店頭販売支援)のビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v12.00      2014/11/05   FJ）谷本    【ANK-2309-03-00】＜案件内仕変＞店頭販売支援へのメニュー画面追加
**********************************************************************/
package eo.web.webview.FUW00954SF;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUScreenConst;

/**
 * メニュー(店頭販売支援)のビューロジッククラスです。<p>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00954SFLogic extends JCCWebBusinessLogic
{

	/** 量販用のアクセスログ操作区分取得キー */
	private static final String KEY_RYOHAN_ACCESSLOG_DIV = "RYOHAN_ACCESSLOG_DIV";

	/** メニュー(量販);印刷 */
	private static final String FUW009540_PRINT_BTN = "FUW009540PJP.printBtn";

	/** 登録完了(量販);印刷 */
	private static final String FUW009310_PRINT_BTN = "FUW009310PJP.printBtn";

	/** 申込完了(量販);印刷 */
	private static final String FUW009320_PRINT_BTN = "FUW009320PJP.printBtn";

	/** ａｕスマートバリューコード表示フラグ 0:非表示 1:表示 */
	private static final String AU_SMART_VALUE_CD_DISP_FLG = "AU_SMART_VALUE_CD_DISP_FLG";

	/** スマートバリューコード注記表示フラグ 0:非表示 1:表示 */
	private static final String SMART_VALUE_CD_CHUKI_DISP_FLG = "SMART_VALUE_CD_CHUKI_DISP_FLG";

	/** ユースケースID（FUSV0199） */
	private static final String USECASE_ID_FUSV0199 = "FUSV0199";

	/** ユースケースID（FUSV0218） */
	private static final String USECASE_ID_FUSV0218 = "FUSV0218";

	/** ユースケースID（FUSV0253） */
	private static final String USECASE_ID_FUSV0253 = "FUSV0253";

	/** 手続きの種類：新規申込 */
	private static final String SF_TETSUDUKI_SHURUI_SHINKI = "1";

	/** 手続きの種類：料金シミュレーション */
	private static final String SF_TETSUDUKI_SHURUI_SIMURATION = "2";

	/** お申込み区分：本申込 */
	private static final String SF_HON_MOUSHIKOMI = "0";

	/** お申込み区分：仮申込 */
	private static final String SF_KARI_MOUSHIKOMI = "1";

	/** タイプ：戸建て */
	private static final String SF_TYPE_TODATE = "1";

	/** タイプ：集合住宅 */
	private static final String SF_TYPE_SHUGOU_JUTAKU = "2";

	/** 確認の種類：番号ポータビリティの可否確認 */
	private static final String KAKUNIN_SHURUI_NPB = "1";

	/** 確認の種類：同番移転の可否確認 */
	private static final String KAKUNIN_SHURUI_DOUBAN_ITEN = "2";

	/** 白紙控えの種類：取次票 */
	private static final String HAKUSHI_HIKAE_TORITSUGI = "3";

	/** 白紙控えの種類：お客様控え */
	private static final String HAKUSHI_HIKAE_OKYAKUSAMA = "2";

	/** 白紙控えの種類：取扱店様控え */
	private static final String HAKUSHI_HIKAE_TORIATSUKAITEN = "1";

	/** 次画面遷移状態：a */
	private static final String NEXT_SCREEN_MODE_A = "a";

	/** 次画面遷移状態：b */
	private static final String NEXT_SCREEN_MODE_B = "b";

	/** 次画面遷移状態：c */
	private static final String NEXT_SCREEN_MODE_C = "c";

	/** 次画面遷移状態：d */
	private static final String NEXT_SCREEN_MODE_D = "d";

	/** 置換文字：その他キャンペーン */
	private static final String REPLACE_MESSAGE_OTHER_CMP_CD = "その他キャンペーン";

	/** 置換文字：追加 */
	private static final String REPLACE_MESSAGE_ADD = "追加";

	/** HTML部品ID：その他キャンペーンコードエラー */
	private static final String HTML_ID_OTHER_CMP_CD_ERR = "otherCmpCd";

	/**
	 * 初期表示処理
	 *
	 * @return
	 * @exception Exception
	 */
	public boolean init() throws Exception
	{

		// 遷移先画面情報の設定 954へ遷移
		setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00954, JFUScreenConst.SCREEN_NAME_FUW00954);

		return true;
	}

	/**
	 * ログアウトボタン押下時
	 *
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean logout() throws Exception
	{
		// 共有フォームBeanをクリア
		clearCommonInfoBeanByLogout();

		// 遷移先画面情報の設定 950へ遷移
		setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00950, JFUScreenConst.SCREEN_NAME_FUW00950);

		return true;
	}

	/**
	 * 確認ボタン押下時
	 *
	 * @return boolean
	 * @throws Exception
	 */
	public boolean confirm() throws Exception
	{
		// サービスフォームBeanを取得
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// サービスフォームBean.確認の種類を取得
		String strSfKakuninShurui = serviceFormBean.sendMessageString(FUW00954SFConst.KAKUNIN_SHURUI, X31CWebConst.DATABEAN_GET_VALUE);

		// サービスフォームBean.確認の種類が番号ポータビリティの可否確認の場合
		if (KAKUNIN_SHURUI_NPB.equals(strSfKakuninShurui))
		{
			// 951に遷移
			this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00951, JFUScreenConst.SCREEN_NAME_FUW00951);
		}

		// サービスフォームBean.確認の種類が同番移転の可否確認の場合
		else if (KAKUNIN_SHURUI_DOUBAN_ITEN.equals(strSfKakuninShurui))
		{
			// 955に遷移
			this.setNextScreenInfo(JFUScreenConst.SCREEN_ID_FUW00955, JFUScreenConst.SCREEN_NAME_FUW00955);
		}
		else
		{
			// システムエラー
			throw new JCCBusinessException("サービスフォームBean.確認の種類が不正です。" + strSfKakuninShurui);
		}

		return true;
	}

	/**
	 * ログアウト時に共有フォームBean.WEB新規情報配下の値をクリアする。
	 *
	 * 但し、以下の情報はクリアしない。
	 *
	 * その他情報：取扱店ID、取扱店名、取扱店用取扱コード
	 * リダイレクト情報：新規申込用割引サービスコード、追加申込用データ抽出項目コード
	 *
	 */
	private void clearCommonInfoBeanByLogout()
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// WEB新規情報取得
		X31SDataBeanAccess cfWebNewInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);

		// WEB新規情報の一部を削除
		this.clearWebNewInfoByNext(cfWebNewInfo);

		// その他情報の一部を削除
		this.clearElseInfoByLogout(cfWebNewInfo);

		// 共通部分を削除する。
		this.resetCommonInfoBean();
	}

	/**
	 * ログアウト時、その他情報を削除する。
	 *
	 * 但し、取扱店ＩＤ、取扱店名、取扱店用取扱コードを除く
	 * @param cfWebNewInfo WEB新規情報
	 */
	private void clearElseInfoByLogout(X31SDataBeanAccess cfWebNewInfo)
	{
		// その他情報を取得
		X31SDataBeanAccess elseInfo = cfWebNewInfo.getDataBeanArray(CommonInfoCFConst.ELSE_INFO).getDataBean(0);
		X31SDataBeanAccess mansionInfoBean = cfWebNewInfo.getDataBeanArray(CommonInfoCFConst.MANSION_INFO).getDataBean(0);

		// その他情報：担当者IDを削除
		elseInfo.sendMessage(CommonInfoCFConst.TANTOSHA_ID_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：担当者名を削除
		elseInfo.sendMessage(CommonInfoCFConst.TANTOSHA_NM_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：回線場所選択を削除
		elseInfo.sendMessage(CommonInfoCFConst.KAISEN_SELECT_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：その他キャンペーンコードを削除
		elseInfo.sendMessage(CommonInfoCFConst.HANYO_CD_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：集合住宅名を削除
		elseInfo.sendMessage(CommonInfoCFConst.SHUGO_NM_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：P-IDを削除
		elseInfo.sendMessage(CommonInfoCFConst.SHUGO_PID_18, X31CWebConst.DATABEAN_CLEAR);
		mansionInfoBean.sendMessage(CommonInfoCFConst.SHUGO_PID_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：印刷の種類を削除
		elseInfo.sendMessage(CommonInfoCFConst.PRINT_KIND_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：担当者用取扱コードを削除
		elseInfo.sendMessage(CommonInfoCFConst.TNTSHA_TORIATSUKAI_CD_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：可能サービス確認経由フラグを削除
		elseInfo.sendMessage(CommonInfoCFConst.SVC_RECHOICE_FLG_18, X31CWebConst.DATABEAN_CLEAR);

		// その他情報：印刷用受付年月日時分（登録）を削除
		elseInfo.sendMessage(CommonInfoCFConst.PRINT_REG_DTM_18, X31CWebConst.DATABEAN_CLEAR);
	}

	/**
	 * 次へボタン・ログアウトボタン押下時、WEB新規情報を削除する。
	 *
	 * @param cfWebNewInfo
	 */
	private void clearWebNewInfoByNext(X31SDataBeanAccess cfWebNewInfo)
	{
		// 画面遷移モード
		cfWebNewInfo.sendMessage(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_CLEAR);
		// 申込回線サービス
		cfWebNewInfo.sendMessage(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_CLEAR);
		// 申込マンションタイプ
		cfWebNewInfo.sendMessage(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_CLEAR);
		// eoID
		cfWebNewInfo.sendMessage(CommonInfoCFConst.EOID_06, X31CWebConst.DATABEAN_CLEAR);
		// sysID
		cfWebNewInfo.sendMessage(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_CLEAR);
		// eoID会員種別変更承諾
		cfWebNewInfo.sendMessage(CommonInfoCFConst.MEMBER_SBT_06, X31CWebConst.DATABEAN_CLEAR);
		// 契約種別
		cfWebNewInfo.sendMessage(CommonInfoCFConst.KEI_SBT_06, X31CWebConst.DATABEAN_CLEAR);
		// 電話コース
		cfWebNewInfo.sendMessage(CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_CLEAR);
		// 工期文言(ネット)
		cfWebNewInfo.sendMessage(CommonInfoCFConst.INTRO_MSG_NET_06, X31CWebConst.DATABEAN_CLEAR);
		// 工期文言(テレビ)
		cfWebNewInfo.sendMessage(CommonInfoCFConst.INTRO_MSG_TV_06, X31CWebConst.DATABEAN_CLEAR);
		// 申込区分2
		cfWebNewInfo.sendMessage(CommonInfoCFConst.MSKM_KBN2_06, X31CWebConst.DATABEAN_CLEAR);
		// アンケート表示フラグ
		cfWebNewInfo.sendMessage(CommonInfoCFConst.ENQUETE_DISP_FLG_06, X31CWebConst.DATABEAN_CLEAR);
	}

	/**
	 * 共有フォームBeanに遷移先情報を設定する。
	 *
	 * @param pstrNextScreenId 遷移先画面ID
	 * @param pstrNextScreenName 遷移先画面名
	 */
	private void setNextScreenInfo(String pstrNextScreenId, String pstrNextScreenName)
	{
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// 遷移先画面ID
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, pstrNextScreenId);

		// 遷移先画面名
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, pstrNextScreenName);
	}

	/**
	 * 共有フォームBeanを初期化する。(共通)
	 *
	 * @param cfWebNewInfo
	 */
	private void resetCommonInfoBean()
	{
		// 共有フォームBeanの取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// WEB新規情報を取得
		X31SDataBeanAccess WebNewInfo = getWebNewInfo(commonInfoBean);

		// PASCO情報を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.PASCO_INFO);

		// 利用場所情報を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.RIYOBASHO_INFO);

		// 契約者情報を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.KEIYAKUSHA_INFO);

		// 契約サービス情報を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.KEIYAKU_SVC_INFO);

		// eo光ネットを初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.EONET);

		// eo光テレビを初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.EOTV);

		// eo光電話を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.EOTEL);

		// eoモバイルを初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.EOMOBILE);

		// 支払い方法情報を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.PAYWAY_INFO);

		// マンション情報を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.MANSION_INFO);

		// リダイレクト情報を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.REDIRECT_INFO);

		// 汎用コードリストを初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.HANYO_CD_LIST);

		// アンケート結果情報を初期化
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.ENQUETE_RSLT_INFO);

		// 選択サービス情報
		this.resetTargetBean(WebNewInfo, CommonInfoCFConst.SELECT_SVC_INFO);

	}

	/**
	 * 指定したBean配下の指定したデータタイプBeanを初期化する。
	 *
	 * @param targetBean
	 * @param strCompomentName
	 */
	private void resetTargetBean(X31SDataBeanAccess targetBean, String strCompomentName)
	{
		X31SDataBeanAccessArray resetBean = targetBean.getDataBeanArray(strCompomentName);

		// リストが存在しない場合、リストを作成する。
		if (resetBean.getCount() == 0)
		{
			resetBean.addDataBean();

			//  eo光電話の場合、2番号目のリストを生成する。
			if (CommonInfoCFConst.EOTEL.equals(strCompomentName))
			{
				resetBean.addDataBean();
			}
		}
		else
		{
			// 中身をクリアする。(削除)
			resetBean.clearArray();
			// リストを生成する。
			resetBean.addDataBean();

			// eo光電話の場合、2番号目のリストを生成する。
			if (CommonInfoCFConst.EOTEL.equals(strCompomentName))
			{
				resetBean.addDataBean();
			}
		}
	}

	/**
	 * WEB新規情報
	 * @param commonInfoBean
	 * @return webNewInfoBean
	 */
	private X31SDataBeanAccess getWebNewInfo(X31SDataBeanAccess commonInfoBean)
	{
		X31SDataBeanAccessArray array = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (array.getCount() == 0)
		{
			array.addDataBean();
		}
		X31SDataBeanAccess webNewInfoBean = array.getDataBean(0);

		return webNewInfoBean;
	}

	/**
	 * 業務規制情報を設定する。
	 * @return boolean true:規制中  false:規制中でない
	 */
	private void setWorkKiseiList()
	{
		//		// 業務規制情報取得
		//		HashMap<String, Object> workKiseiInfoMap = JCCWebCommon.getBusinessControlMap(this);
		//
		//		// 業務規制情報マップから、フロント２４時間３６５日稼動対象規制情報を取得
		//		HashMap<?, ?> workKiseiMap = (HashMap<?, ?>)workKiseiInfoMap.get(JFUStrConst.WORK_KISEI_FUGKW0009);
		//
		//		// 業務規制フラグの取得
		//		String kiseiFlg = (String)workKiseiMap.get(JFUStrConst.KISEI_FLG);
		//
		//		// 業務規制情報設定処理
		//
		//		// 共有フォームBeanの取得
		//		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		//
		//		// 業務規制リスト取得
		//		X31SDataBeanAccess workKiseiListBean = getWorkKiseiList(commonInfoBean);
		//
		//		// フロント稼動対象規制フラグを設定(フロント２４時間３６５日稼動対象規制)
		//		if (JFUStrConst.CD01306_1.equals(kiseiFlg))
		//		{
		//			workKiseiListBean.sendMessageString(CommonInfoCFConst.FRONT_KADO_TRGT_KISEI_FLG_48, X31CWebConst.DATABEAN_SET_VALUE,
		//					JFUStrConst.CD01306_1);
		//		}
		//		else
		//		{
		//			workKiseiListBean.sendMessageString(CommonInfoCFConst.FRONT_KADO_TRGT_KISEI_FLG_48, X31CWebConst.DATABEAN_SET_VALUE,
		//					JFUStrConst.CD01306_0);
		//		}
	}

}
