/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：eo光電話入力（量販・訪販）
*   ソースファイル名：FUW00913SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年01月24日
*＜機能概要＞
*   eo光電話入力画面の制御を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/01/24   FJ）吉田    新規作成
*   v3.00.00    2012/03/29   FJ）福島    料金シミュレーション対応
*   v5.00.00    2013/03/07   FJ) 大村   「内部課題-No.2」サービス開始希望日の戻る遷移障害
*   v10.00      2014/07/04   FJ) 西山    「ANK-1918-00-00」US管理S向けeo顧客SのIF改修
*   v36.00.00   2017/12/12   FJ) 高野    【ANK-3296-00-00】標準工事費分割請求
*   v39.00.00   2018/09/27   FJ) 中西    【ANK-3518-00-00】量販サービス追加
*   v48.00.00   2020/02/07   FJ) 岡井    【ANK-3757-00-00】マンション工事種別イーサ他社併行時のサービス開始希望日の入力欄制御
*   v53.00.00   2020/04/13   GDC) ミコ   【ANK-3951-00-00】「競争ルールの検証に関するWG」に関するシステム対応
*   v54.00.00   2021/07/21   FJ) 岡井    【ANK-4109-00-00】政策対応（競争ルール）テレビ＋電話申込時の標準工事費一括値引きCP料金シミュレーション対応
*   v56.00.00   2021/12/06   FJ）美濃原  【ANK-4103-00-00】マンション光コンセントタイプのWeb受付対応
*   v60.00.00   2022/06/20   FJ）美濃原  【ANK-4244-00-00】【eo定期】MT既設賃貸対応
**********************************************************************/

package eo.web.webview.FUW00913SF;

import java.util.HashMap;

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.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0143_FUSV0143OPDBMapper;
import eo.web.webview.mapping.FUSV0314_FUSV0314OPDBMapper;

/**
 * 
 * <br>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00913SFLogic extends JCCWebBusinessLogic
{
	/** 共通設定情報　：　未契約、未選択、申し込まない、利用しない など */
	private static final String INFO_FALSE = "0";

	/** 共通設定情報　：　契約中、選択、申し込む、利用する など */
	private static final String INFO_TRUE = "1";

	/** 画面選択値 コース　： １番号サービス */
	private static final String CHOICE_COURSE_1 = "1";

	/** 画面選択値 コース　： ２番号サービス */
	private static final String CHOICE_COURSE_2 = "2";

	/** サービスID　：　eo光電話入力チェック */
	private static final String CALL_SERVICE_ID = "FUSV0143";

// ANK-3518-00-00 ADD START
	/** サービスID　：　工事一覧照会 */
	private static final String CALL_SERVICE_ID_FUSV0314 = "FUSV0314";
// ANK-3518-00-00 ADD END
	/** ホームタイプ */
	private static final String HOME = "1";

	/** メゾンタイプ */
	private static final String MASION = "2";

	/** マンションタイプ */
	private static final String MANSION = "3";

	/** コース選択：選択 */
	private static final String SENTAKU = "1";

	/**
	 * 初期表示処理
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 共有フォームBeanに引継情報の設定を行う
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// "WEB新規"階層
		X31SDataBeanAccess ws = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);

		// "eo光電話"階層
		X31SDataBeanAccessArray eoTelArr = ws.getDataBeanArray(CommonInfoCFConst.EOTEL);
		X31SDataBeanAccess eoTel = eoTelArr.getDataBean(0);

		// "契約サービス情報"階層
		X31SDataBeanAccessArray keiyakuSvcArr = ws.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfo = keiyakuSvcArr.getDataBean(0);

		if (eoTel != null)
		{
			// 共有フォームBeanに1番号サービスまたは2番号サービスが設定されていた場合
			if (ws.sendMessageString(CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_GET_VALUE).equals(CHOICE_COURSE_1)
					|| ws.sendMessageString(CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_GET_VALUE).equals(CHOICE_COURSE_2))
			{
				// サービスフォームBeanに共有フォームBeanの値を復元します。
				// 電話コースを設定します。
				bean.sendMessageString(FUW00913SFConst.TEL_COURSE, X31CWebConst.DATABEAN_SET_VALUE, ws.sendMessageString(
						CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_GET_VALUE));

				// 番ポ利用有無（１）を設定します。
				bean.sendMessageString(FUW00913SFConst.USE_BMP1, X31CWebConst.DATABEAN_SET_VALUE, eoTel.sendMessageString(
						CommonInfoCFConst.USE_BMP_12, X31CWebConst.DATABEAN_GET_VALUE));

				// 同意チェックボックスをチェックする
				bean.sendMessageBoolean(FUW00913SFConst.TKJOKEN_DOI, X31CWebConst.DATABEAN_SET_VALUE, true);

				// 共有フォームBean.電話コースが"2"(2番号サービス)の場合のみ実行します。
				if (ws.sendMessageString(CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_GET_VALUE).equals(CHOICE_COURSE_2))
				{
					// 番ポ利用有無（２）を設定します。
					eoTel = eoTelArr.getDataBean(1);
					bean.sendMessageString(FUW00913SFConst.USE_BMP2, X31CWebConst.DATABEAN_SET_VALUE, eoTel.sendMessageString(
							CommonInfoCFConst.USE_BMP_12, X31CWebConst.DATABEAN_GET_VALUE));
				}
			}
			
// ANK-3518-00-00 ADD START
			// 工事一覧照会を取得する。
			// 申込区分
			String mskmKbn = ws.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE);
			// "その他情報"
			X31SDataBeanAccess elseInfo = ws.getDataBeanArray(CommonInfoCFConst.ELSE_INFO).getDataBean(0);
			// "その他情報.回線場所選択"
			String kaisenSelect = elseInfo.sendMessageString(CommonInfoCFConst.KAISEN_SELECT_18, X31CWebConst.DATABEAN_GET_VALUE);

			// 追加申込 かつ 契約中の回線に追加する場合
			if (JFUStrConst.MSKM_KBN_ADD.equals(mskmKbn) && JFUStrConst.KAISEN_SELECT_ADD_KEI.equals(kaisenSelect))
			{
				// サービスI/Fの呼び出し処理
				callSIFInit(bean, commoninfoBean);
			}
// ANK-3518-00-00 ADD END
// ANK-3296-00-00 ADD START
			// 回線タイプを取得
			String typeKbn = getKaisenType(commoninfoBean);

			// 標準工事費お支払い方法設定
			String wsStKojiPayway = ws.sendMessageString(CommonInfoCFConst.STDARD_KOJIHI_PAYWAY_06, X31CWebConst.DATABEAN_GET_VALUE);
			if (JFUStrConst.EMPTY.equals(wsStKojiPayway))
			{
// ANK-3951-00-00 MOD START
				// // 初期値(分割払い) 設定
				// bean.sendMessageString(FUW00913SFConst.STDARD_KOJIHI_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.STDARD_KOJIHI_PAYWAY_BUNKATSU);
				// 初期値(一括払い) 設定
				bean.sendMessageString(FUW00913SFConst.STDARD_KOJIHI_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.STDARD_KOJIHI_PAYWAY_IKT);
// ANK-3951-00-00 MOD END
			}
			else
			{
				bean.sendMessageString(FUW00913SFConst.STDARD_KOJIHI_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, wsStKojiPayway);
			}
			
			// "契約サービス情報.選択サービス(ネット)"
			String selSvcNet = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);
			
// ANK-3518-00-00 MOD START
//			// ((ホームタイプ または メゾンタイプ) 且つ (ネットが未選択)) 
//			// 上記条件に当てはまる場合は、"1(表示)"を設定
//			// 上記条件以外は、"0(非表示)"を設定
//			if ((HOME.equals(typeKbn) || MASION.equals(typeKbn)) && JFUStrConst.SELECT_SVC_NET_MI_CHOICE.equals(selSvcNet))
//			{

			// "契約サービス情報.契約中サービス(ネット)
			String kykSvcNet = keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.NOW_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);
			
			// (ホームタイプ または メゾンタイプ) 且つ  ネットが未選択
			// (新規申込 または
			// (追加申込 且つ 契約中回線に追加 且つ 契約中サービス(ネット)が未契約) または
			// (追加申込 且つ 新しい場所に回線を追加)
			// 上記条件に当てはまる場合は、"1(表示)"を設定
			// 上記条件以外は、"0(非表示)"を設定
			if ((HOME.equals(typeKbn) || MASION.equals(typeKbn)) && JFUStrConst.SELECT_SVC_NET_MI_CHOICE.equals(selSvcNet) &&
				 (JFUStrConst.MSKM_KBN_NEW.equals(mskmKbn) ||
				 (JFUStrConst.MSKM_KBN_ADD.equals(mskmKbn) && JFUStrConst.KAISEN_SELECT_ADD_KEI.equals(kaisenSelect) && JFUStrConst.NOW_SVC_NET_MI_KEI.equals(kykSvcNet) &&
						 !(bean.sendMessageBoolean(FUW00913SFConst.KOJI_SONZAI_FLG, X31CWebConst.DATABEAN_GET_VALUE))) ||
				 (JFUStrConst.MSKM_KBN_ADD.equals(mskmKbn) && JFUStrConst.KAISEN_SELECT_ADD_NEW_PLACE.equals(kaisenSelect))))
			{
// ANK-3518-00-00 MOD END
				bean.sendMessageString(FUW00913SFConst.STDARD_KOJIHI_PAYWAY_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.STDARD_KOJIHI_PAYWAY_DISP_ON);
				// ANK-4109-00-00 ADD START
				ws.sendMessageString(CommonInfoCFConst.TEL_STDARD_KOJIHI_PAYWAY_DSP_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.STDARD_KOJIHI_PAYWAY_DISP_ON);
				// ANK-4109-00-00 ADD END
			}
			else
			{
				bean.sendMessageString(FUW00913SFConst.STDARD_KOJIHI_PAYWAY_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.STDARD_KOJIHI_PAYWAY_DISP_OFF);
				// ANK-4109-00-00 ADD START
				ws.sendMessageString(CommonInfoCFConst.TEL_STDARD_KOJIHI_PAYWAY_DSP_FLG_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.STDARD_KOJIHI_PAYWAY_DISP_OFF);
				// ANK-4109-00-00 ADD END
			}
// ANK-3296-00-00 ADD END
		}

		// 運用日をセット
		bean.sendMessageString(FUW00913SFConst.UNYO_DATE, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getOpeDate(this, null));
		// サービス開始日表示フラグ設定（初期化）
		bean.sendMessageBoolean(FUW00913SFConst.SVC_KB_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// ANK-1190-00-00 Otsuka 2012/10/25
		// 光ネットが選択されていない、かつサービス開始希望日リストを呼び出せる場合
		// サービス開始日表示フラグ設定
		boolean svcKibDspFlg = JFUWebCommon.getSvcKiboDspFlg(ws);
		if (!SENTAKU.equals(keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE))
				&& svcKibDspFlg)
		{
			// 日付プルダウンリストの作成
			getYearMonthDayListValue(bean, commoninfoBean);
			bean.sendMessageBoolean(FUW00913SFConst.SVC_KB_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
		}

		return true;
	}

	/**
	 * 次へボタン押下時
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean next() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 共通処理の実行
		executeNextScrean(bean, commoninfoBean);

		// 共有フォームBeanに遷移先画面の設定を行う
		// "WEB新規"階層
		X31SDataBeanAccess ws = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);

		// "契約サービス"階層
		X31SDataBeanAccess kykSvc = (ws.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO)).getDataBean(0);

		// "eoモバイル"階層
		X31SDataBeanAccess eoMbl = (ws.getDataBeanArray(CommonInfoCFConst.EOMOBILE)).getDataBean(0);

		if (kykSvc.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE).equals(INFO_TRUE))
		{
			// eo光テレビが選択されていた場合、eo光テレビ入力画面（量販・訪販）に遷移
			setNextScreen(JFUStrConst.SCREEN_MODE_DEF, JFUScreenConst.SCREEN_ID_FUW00914, JFUScreenConst.SCREEN_NAME_FUW00914);
		}
		else if (!eoMbl.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE).equals(INFO_FALSE)
				&& !JFUStrConst.EMPTY.equals(eoMbl.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// eoモバイルが選択されていた場合、eoモバイル入力画面（量販・訪販）に遷移
			setNextScreen(JFUStrConst.SCREEN_MODE_DEF, JFUScreenConst.SCREEN_ID_FUW00915, JFUScreenConst.SCREEN_NAME_FUW00915);
		}
		else
		{
			// 上記以外の場合、サービス選択内容確認画面（量販・訪販）に遷移
			setNextScreen(JFUStrConst.SCREEN_MODE_DEF, JFUScreenConst.SCREEN_ID_FUW00926, JFUScreenConst.SCREEN_NAME_FUW00926);
		}

		return true;
	}

	/**
	 * 戻るボタン押下時
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanに引継情報の設定を行う
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// "WEB新規"階層
		X31SDataBeanAccess ws = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);

		// 共通クリア処理
		JFUWebCommon.comClear(this);

		// "契約サービス情報"階層
		X31SDataBeanAccess kykSvc = (ws.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO)).getDataBean(0);

		// 遷移先情報の設定

		if (JFUStrConst.SELECT_SVC_NET_CHOICE.equals(kykSvc.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// eo光ネットが選択されていた場合、eo光ネット入力画面（量販・訪販）に遷移
			setNextScreen(JFUStrConst.SCREEN_MODE_DEF, JFUScreenConst.SCREEN_ID_FUW00912, JFUScreenConst.SCREEN_NAME_FUW00912);
		}
		else
		{
			// サービス選択画面（量販・訪販）に遷移
			setNextScreen(JFUStrConst.SCREEN_MODE_DEF, JFUScreenConst.SCREEN_ID_FUW00911, JFUScreenConst.SCREEN_NAME_FUW00911);
		}

		return true;
	}

	/**
	 * 確認画面へ戻る押下時
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean backKakunin() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 共通処理の実行
		executeNextScrean(bean, commoninfoBean);

		// サービス選択内容確認画面（量販・訪販）に遷移
		setNextScreen(JFUStrConst.SCREEN_MODE_DEF, JFUScreenConst.SCREEN_ID_FUW00926, JFUScreenConst.SCREEN_NAME_FUW00926);

		return true;
	}

	/**
	 * 料金シミュレーションを呼び出します。
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean ryokin() throws Exception
	{
		//TODO 料金シミュレーション共通部品を呼び出し
		JFUWebCommon.ryokin(this);

		return true;
	}

	/**
	 * 回線タイプを取得します。<br>
	 * 「ホームタイプ」「メゾンタイプ」「マンションタイプ」の判定。
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commoninfoBean	共有フォームBean
	 * @return typeKbn			"1"(ホーム)、"2"(メゾン)、"3"(マンション)
	 */
	public String getKaisenType(X31SDataBeanAccess commoninfoBean)
	{
		String typeKbn = "";

		// "WEB新規"階層
		X31SDataBeanAccess ws = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);

		if (ws.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE).equals(JFUStrConst.MSKM_KSN_SVC_HOME))
		{
			typeKbn = HOME;
			return typeKbn;
		}

		if (ws.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE).equals(JFUStrConst.MSKM_MNS_TYPE_MEZON))
		{
			typeKbn = MASION;
		}

		if (ws.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE).equals(JFUStrConst.MSKM_MNS_TYPE_MANSION))
		{
			typeKbn = MANSION;
		}

		return typeKbn;
	}

	/**
	 * サービス開始希望日リストを作成
	 * @param bean
	 * @param commoninfoBean
	 */
	private void getYearMonthDayListValue(X31SDataBeanAccess bean, X31SDataBeanAccess commoninfoBean)
	{
		// "WEB新規"階層
		X31SDataBeanAccess ws = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);
		// マンション情報
		X31SDataBeanAccess wsMnshnInfo = (ws.getDataBeanArray(CommonInfoCFConst.MANSION_INFO)).getDataBean(0);
		// eo光ネット情報
		X31SDataBeanAccess wsNetInfo = (ws.getDataBeanArray(CommonInfoCFConst.EONET)).getDataBean(0);

		X31SDataBeanAccess svc_list = null;
		X31SDataBeanAccessArray bean_array = null;

		// ■サービスフォームBean.引継支払情報
		bean_array = bean.getDataBeanArray(FUW00913SFConst.SVC_KB_DATES);
		bean_array.clearArray();
		bean_array.addDataBean();
		svc_list = bean_array.getDataBean(0);

		// 運用日付を取得
		String m_moji00 = JFUWebCommon.getOpeDate(this, null);
		String this_ymd01 = m_moji00.substring(0, 8);

		// マンション情報 標準サービス開始日数を取得
		int svc_sta_day = Integer.parseInt(wsMnshnInfo.sendMessageString(CommonInfoCFConst.STDARD_SVC_STA_NISU_16, X31CWebConst.DATABEAN_GET_VALUE));

		// ANK-1190-00-00 Otsuka 2012/10/25
		// マンションのサービス開始年月日を取得
		String svc_sta_ymd = wsMnshnInfo.sendMessageString(CommonInfoCFConst.SVC_STA_YMD_16, X31CWebConst.DATABEAN_GET_VALUE);

		// 判定日が基準日より過去日か判定を行います。
		if (JFUWebCommon.isEqualDate(svc_sta_ymd, m_moji00) || JFUWebCommon.isPastDate(svc_sta_ymd, m_moji00, "0"))
		{
			// サービス開始年月日<= 運用日 (=過去日)の場合、運用日+標準サービス開始日数 を設定する。
			this_ymd01 = JFUWebCommon.addDay(this_ymd01, svc_sta_day);
		}
		else
		{
			// サービス開始年月日- 運用日を取得
			int deff = JFUWebCommon.subtractDay(svc_sta_ymd, m_moji00);

			if (deff <= svc_sta_day)
			{
				// サービス開始年月日- 運用日 <= 標準サービス開始日数 の場合、運用日+標準サービス開始日数 を設定する。
				this_ymd01 = JFUWebCommon.addDay(this_ymd01, svc_sta_day);
			}
			else
			{
				// サービス開始年月日を設定する。
				this_ymd01 = String.valueOf(svc_sta_ymd);
			}
		}
		// 2013.03.07 ADD 「内部課題-No.2」サービス開始希望日の戻る遷移障害 >>>
		// サービス開始希望日の初期値（画面で変更する前の値）を保持する
		bean.sendMessageString(FUW00913SFConst.SVC_KB_DATE_INIT, X31CWebConst.DATABEAN_SET_VALUE, this_ymd01);
		// 2013.03.07 ADD 「内部課題-No.2」サービス開始希望日の戻る遷移障害 <<<E

		String wrk_ymd = wsNetInfo.sendMessageString(CommonInfoCFConst.SVC_STA_KIBO_11, X31CWebConst.DATABEAN_GET_VALUE);
		if (wrk_ymd.length() > 0)
		{
			this_ymd01 = wrk_ymd;
		}

		bean.sendMessageString(FUW00913SFConst.SVC_KB_DATE, X31CWebConst.DATABEAN_SET_VALUE, this_ymd01);

		// 年 （配列サイズ固定）

		String m_moji0 = JFUWebCommon.getOpeDate(this, null);
		String this_year = m_moji0.substring(0, 4);
		int this_year_i = Integer.parseInt(this_year);
		this_year_i = this_year_i - 1;

		for (int m1 = 1; m1 <= 4; m1++)
		{
			this_year_i = this_year_i + 1;
			String this_year_s = Integer.toString(this_year_i);

			svc_list.sendMessageString(FUW00913SFConst.YEAR_01, X31CWebConst.DATABEAN_ADD_VALUE, this_year_s);
		}

		// 月 （配列サイズ固定）

		String m_moji = "";

		for (int m1 = 1; m1 <= 12; m1++)
		{
			m_moji = String.format("%02d", m1);

			svc_list.sendMessageString(FUW00913SFConst.MON_01, X31CWebConst.DATABEAN_ADD_VALUE, m_moji);
		}

		// 日 （配列サイズ固定）

		String m_moji2 = "";

		for (int m2 = 1; m2 <= 31; m2++)
		{
			m_moji2 = String.format("%02d", m2);

			svc_list.sendMessageString(FUW00913SFConst.DAY_01, X31CWebConst.DATABEAN_ADD_VALUE, m_moji2);
		}
	}

	/**
	 * 次画面遷移共通処理<br>
	 * 「次へ」「確認画面へ戻る」の共通処理を実行します。
	 * <br>
	 * @param bean				サービスフォームBean
	 * @param commoninfoBean	共有フォームBean
	 */
	private void executeNextScrean(X31SDataBeanAccess bean, X31SDataBeanAccess commoninfoBean)
	{
		// サービスフォームBean設定処理
		setSfb(bean, commoninfoBean);

		// サービスI/Fの呼び出し処理
		callSIFCheck(bean, commoninfoBean);

		// 共有フォームBeanに引継情報を設定
		setCommonBean(bean, commoninfoBean);
	}

	/**
	 * サービスフォームBeanに情報を設定します。<br>
	 * @param bean				サービスフォームBean
	 * @param commoninfoBean	共有フォームBean
	 */
	private void setSfb(X31SDataBeanAccess bean, X31SDataBeanAccess commoninfoBean)
	{
		// "WEB新規"階層
		X31SDataBeanAccess ws = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);

		// 回線タイプを取得
		String ksnType = getKaisenType(commoninfoBean);

		// "契約サービス情報"階層
		X31SDataBeanAccessArray keiyakuSvcArr = ws.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfo = keiyakuSvcArr.getDataBean(0);

		if (bean.sendMessageString(FUW00913SFConst.TEL_COURSE, X31CWebConst.DATABEAN_GET_VALUE).equals(CHOICE_COURSE_1)
				|| bean.sendMessageString(FUW00913SFConst.TEL_COURSE, X31CWebConst.DATABEAN_GET_VALUE).equals(CHOICE_COURSE_2))
		{
// ANK-3518-00-00 ADD START
//			// サービスフォームBeanに設定します。
//			// 申込種別コード（上段）、異動区分（下段）の設定
//			bean.sendMessageString(FUW00913SFConst.MSKM_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.KK0971_MSKM_SBT_CD_00001);
//			bean.sendMessageString(FUW00913SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00576_00001);
			// サービスフォームBeanに設定します。
			// 申込種別コード（上段）、異動区分（下段）の設定
			if (ws.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE).equals(JFUStrConst.MSKM_KBN_NEW))
			{
				// 新規申込の場合
				bean.sendMessageString(FUW00913SFConst.MSKM_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.KK0971_MSKM_SBT_CD_00001);
				bean.sendMessageString(FUW00913SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00576_00001);
			}
			else if (ws.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE).equals(JFUStrConst.MSKM_KBN_ADD))
			{
				// 追加申込の場合
				bean.sendMessageString(FUW00913SFConst.MSKM_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.KK0971_MSKM_SBT_CD_00002);
				bean.sendMessageString(FUW00913SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00576_00002);
			}
// ANK-3518-00-00 ADD END
			// サービスコードの設定（"02"(電話サービス)固定）
			bean.sendMessageString(FUW00913SFConst.SVC_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00130_02);

			// 料金グループコードの設定（"10"(電話サービス)固定）
			bean.sendMessageString(FUW00913SFConst.PRC_GRP_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00133_10);

			// 料金コースコード（上段）、料金プランコード（下段）の設定
			if (bean.sendMessageString(FUW00913SFConst.TEL_COURSE, X31CWebConst.DATABEAN_GET_VALUE).equals(CHOICE_COURSE_1))
			{
				// 1番号サービスが選択されていた場合
				bean.sendMessageString(FUW00913SFConst.PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00134_A31);

				// 回線タイプがマンションタイプの場合
				if (MANSION.equals(ksnType))
				{
					// 料金プランコード １番号コース　定額プラン(マンションタイプ)
					bean.sendMessageString(FUW00913SFConst.PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00565_PA3102);
				}
				else
				{
					// １番号コース　定額プラン(ホーム・メゾンタイプ) 
					bean.sendMessageString(FUW00913SFConst.PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00565_PA3101);
				}
			}
			else if (bean.sendMessageString(FUW00913SFConst.TEL_COURSE, X31CWebConst.DATABEAN_GET_VALUE).equals(CHOICE_COURSE_2))
			{
				// 2番号サービスが選択されていた場合
				bean.sendMessageString(FUW00913SFConst.PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00134_A32);

				// 回線タイプがマンションタイプの場合
				if (MANSION.equals(ksnType))
				{
					// 料金プランコード ２番号コース　定額プラン(マンションタイプ)
					bean.sendMessageString(FUW00913SFConst.PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00565_PA3202);
				}
				else
				{
					// 料金プランコード ２番号コース　定額プラン(ホーム・メゾンタイプ)
					bean.sendMessageString(FUW00913SFConst.PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00565_PA3201);
				}
			}
		}

		// マンションタイプの場合 
		if (MANSION.equals(ksnType))
		{
			// ANK-1190-00-00 Otsuka 2012/10/25
			// 光ネットが選択されていない、かつサービス開始希望日リストを呼び出せる場合
			if (!JFUStrConst.SELECT_SVC_NET_CHOICE.equals(keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10,
					X31CWebConst.DATABEAN_GET_VALUE))
					&& isYearMonthDayList(bean))
			{
				// サービス開始希望日
				X31SDataBeanAccess svc_list = null;
				X31SDataBeanAccessArray bean_array = null;

				bean_array = bean.getDataBeanArray(FUW00913SFConst.SVC_KB_DATES);
				svc_list = bean_array.getDataBean(0);

				// 年
				Integer index_year = Integer.valueOf(bean.sendMessageString(FUW00913SFConst.SVC_KB_YEAR, X31CWebConst.DATABEAN_GET_VALUE)).intValue();
				String svc_kbo_start_year = svc_list.sendMessageString(FUW00913SFConst.YEAR_01, X31CWebConst.DATABEAN_GET_VALUE, index_year);
				// 月
				Integer index_month =
						Integer.valueOf(bean.sendMessageString(FUW00913SFConst.SVC_KB_MONTH, X31CWebConst.DATABEAN_GET_VALUE)).intValue();
				String svc_kbo_start_month = svc_list.sendMessageString(FUW00913SFConst.MON_01, X31CWebConst.DATABEAN_GET_VALUE, index_month);
				// 日
				Integer index_day = Integer.valueOf(bean.sendMessageString(FUW00913SFConst.SVC_KB_DAY, X31CWebConst.DATABEAN_GET_VALUE)).intValue();
				String svc_kbo_start_day = svc_list.sendMessageString(FUW00913SFConst.DAY_01, X31CWebConst.DATABEAN_GET_VALUE, index_day);
				String svc_kbo_start_date = "";
				svc_kbo_start_date = svc_kbo_start_year + svc_kbo_start_month + svc_kbo_start_day;
				bean.sendMessageString(FUW00913SFConst.SVC_KB_DATE, X31CWebConst.DATABEAN_SET_VALUE, svc_kbo_start_date);
			}
		}
	}

	/**
	 * サービスインターフェイスの呼び出し処理を実行します。<br>
	 * @param bean				サービスフォームBean
	 * @param commoninfoBean	共有フォームBean
	 */
	private void callSIFCheck(X31SDataBeanAccess bean, X31SDataBeanAccess commoninfoBean)
	{
		X31SDataBeanAccess[] paramBean = { bean, commoninfoBean };

		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, CALL_SERVICE_ID);

		// マッピングクラスのインスタンスを生成
		FUSV0143_FUSV0143OPDBMapper mapper = new FUSV0143_FUSV0143OPDBMapper();
		HashMap<String, String> inputMap = new HashMap<String, String>();
		mapper.setFUSV014301SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV014302SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);

		// 2番号サービスが選択された場合のみマッピング
		if (bean.sendMessageString(FUW00913SFConst.TEL_COURSE, X31CWebConst.DATABEAN_GET_VALUE).equals(CHOICE_COURSE_2))
		{
			mapper.setFUSV014303SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		}
		// 結果格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービス呼出
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException jwse)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
	}

	/**
	 * 共有フォームBeanに引継情報を設定します<br>
	 * @param bean				サービスフォームBean
	 * @param commoninfoBean	共有フォームBean
	 */
	private void setCommonBean(X31SDataBeanAccess bean, X31SDataBeanAccess commoninfoBean)
	{
		// "WEB新規"階層
		X31SDataBeanAccess ws = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);

		// "eo光電話"階層（1番号目）
		X31SDataBeanAccessArray eoTelArr = ws.getDataBeanArray(CommonInfoCFConst.EOTEL);
		X31SDataBeanAccess eoTel = null;

		// "eo光ネット"階層
		X31SDataBeanAccessArray eoNetArr = ws.getDataBeanArray(CommonInfoCFConst.EONET);
		X31SDataBeanAccess eoNet = eoNetArr.getDataBean(0);

		// "契約サービス情報"階層
		X31SDataBeanAccessArray keiyakuSvcArr = ws.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfo = keiyakuSvcArr.getDataBean(0);

		// 回線タイプを取得
		String ksnType = getKaisenType(commoninfoBean);

		if (eoTelArr.getDataBean(0) == null)
		{
			// データが存在しない場合、データを作成します。（１番号目）
			eoTel = eoTelArr.addDataBean();
		}
		else
		{
			eoTel = eoTelArr.getDataBean(0);
		}
		if (eoTelArr.getDataBean(1) == null)
		{
			// データが存在しない場合、データを作成します。（２番号目）
			eoTelArr.addDataBean();
		}

		// 共有フォームBeanに設定
		// 電話コース
		ws.sendMessageString(CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_SET_VALUE, bean.sendMessageString(FUW00913SFConst.TEL_COURSE,
				X31CWebConst.DATABEAN_GET_VALUE));

		// 番ポ（1番号目）
		eoTel.sendMessageString(CommonInfoCFConst.USE_BMP_12, X31CWebConst.DATABEAN_SET_VALUE, bean.sendMessageString(FUW00913SFConst.USE_BMP1,
				X31CWebConst.DATABEAN_GET_VALUE));

		// 2番号目
		if (CHOICE_COURSE_2.equals(bean.sendMessageString(FUW00913SFConst.TEL_COURSE, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			eoTel = eoTelArr.getDataBean(1);
			// 番ポ（2番号目）
			eoTel.sendMessageString(CommonInfoCFConst.USE_BMP_12, X31CWebConst.DATABEAN_SET_VALUE, bean.sendMessageString(FUW00913SFConst.USE_BMP2, X31CWebConst.DATABEAN_GET_VALUE));
		}
		else
		{
			eoTel = eoTelArr.getDataBean(1);
			// 番ポ（2番号目）
			eoTel.sendMessageString(CommonInfoCFConst.USE_BMP_12, X31CWebConst.DATABEAN_SET_VALUE, "");
			eoTel.getDataBeanArray(CommonInfoCFConst.KIKI_INFO_TEL).clearArray();
		}

		// マンションの場合
		if (MANSION.equals(ksnType))
		{
			// ANK-1190-00-00 Otsuka 2012/10/25
			// 光ネットが選択されていない、かつサービス開始希望日リストを呼び出せる場合
			if (!JFUStrConst.SELECT_SVC_NET_CHOICE.equals(keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10,
					X31CWebConst.DATABEAN_GET_VALUE))
					&& isYearMonthDayList(bean))
			{
				// サービス開始希望日
				eoNet.sendMessageString(CommonInfoCFConst.SVC_STA_KIBO_11, X31CWebConst.DATABEAN_SET_VALUE, bean.sendMessageString(
						FUW00913SFConst.SVC_KB_DATE, X31CWebConst.DATABEAN_GET_VALUE));
			}
		}
		
// ANK-3296-00-00 ADD START
		// 標準工事費お支払い方法表示フラグ
		String hyojiFlg = bean.sendMessageString(FUW00913SFConst.STDARD_KOJIHI_PAYWAY_DSP_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		// 標準工事費お支払い方法の設定
		String svcStKojiPayway = bean.sendMessageString(FUW00913SFConst.STDARD_KOJIHI_PAYWAY, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 標準工事費お支払い方法表示フラグが"1(表示)"の場合
		if(JFUStrConst.STDARD_KOJIHI_PAYWAY_DISP_ON.equals(hyojiFlg))
		{
			// 標準工事費お支払い方法の設定(0:分割払い 1:一括払い)
			ws.sendMessageString(CommonInfoCFConst.STDARD_KOJIHI_PAYWAY_06, X31CWebConst.DATABEAN_SET_VALUE, svcStKojiPayway);
		}
// ANK-3296-00-00 ADD END
	}

	/**
	 * 遷移先設定
	 * 
	 * @param  screenMode        画面遷移モード
	 * @param  nextScreenId      遷移先画面ID
	 * @param  nextScreenName    遷移先画面名
	 * 
	 * @return void
	 */
	private void setNextScreen(String screenMode, String nextScreenId, String nextScreenName)
	{
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		// WEB新規情報
		X31SDataBeanAccessArray web_new_info = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess web_new_infobean = web_new_info.getDataBean(0);

		web_new_infobean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, screenMode);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);
	}

	// ANK-1190-00-00 Otsuka 2012/10/25
	/**
	 *  サービス開始希望日リストを呼び出すかどうか判定します。
	 * @param bean サービスフォームBean
	 * @return boolean true:呼び出す  false:呼び出さない
	 */
	private Boolean isYearMonthDayList(X31SDataBeanAccess bean)
	{

		boolean svcKibDspFlg = bean.sendMessageBoolean(FUW00913SFConst.SVC_KB_DSP_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		return svcKibDspFlg;

	}
// ANK-3518-00-00 ADD START
	/**
	 * サービスインターフェイスの呼び出し処理を実行します。<br>
	 * @param bean				サービスフォームBean
	 * @param commoninfoBean	共有フォームBean
	 */
	private void callSIFInit(X31SDataBeanAccess bean, X31SDataBeanAccess commoninfoBean)
	{
		// ユースケースID格納用マップを生成。
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, CALL_SERVICE_ID_FUSV0314);

		// マッピングクラスのインスタンスを生成
		FUSV0314_FUSV0314OPDBMapper mapper = new FUSV0314_FUSV0314OPDBMapper();
		HashMap<String, String> inputMap = new HashMap<String, String>();
		mapper.setFUSV031401SC(commoninfoBean, inputMap);

		// 結果格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		try
		{
			// サービスインターフェイス（工事一覧照会）呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 特定のエラーの場合は業務用例外クラスをthrowする。
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		
		// サービスの出力値設定
		mapper.getFUSV031401SC(bean, outputMap);
	}
// ANK-3518-00-00 ADD END
}
