/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW02525SFLogic
*   ソースファイル名：KKW02525SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年05月05日
*＜機能概要＞
*   eo光テレビオプションチャンネル更新画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/05/05   FJ）富士通  新規作成
*   v4.00.00    2012/08/30   FJ）富士通  ANK-0288-00-00,ANK-0524-00-00対応
*   v4.01.00    2012/12/19   FJ）野口   【IT1-2012-0002486】対応
*   v5.00.00    2013/01/31   FJ）野口   【IT2-2013-0000038】対応
*   v5.00.01    2013/08/28   FJ）辛     【OM-2013-0001052】対応
*   v5.00.02    2013/09/02   FJ）辛     【OM-2013-0001474】対応
*   v22.00.00   2016/02/09   FJ）松岡   【OM-2016-0000143】対応
**********************************************************************/
package eo.web.webview.KKW02525SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JPCDateChecker;
import eo.common.util.JPCDateUtil;
import eo.common.util.JPCEditString;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0164_KKSV0164OPDBMapper;
import eo.web.webview.mapping.KKSV0165_KKSV0165OPDBMapper;

/**
 * KKW02525のビューロジックです。
 * <BR>
 * @author 富士通
 */
public class KKW02525SFLogic extends JCCWebBusinessLogic
{

	/** 顧客契約引継情報項目キー */
	private static final String[] CUST_KEI_HKTGI_KEYS = {
		JKKCommonConst.HKTGI_SYSID,
		JKKCommonConst.HKTGI_SVC_KEI_NO,
		JKKCommonConst.HKTGI_IDO_DIV,
		JKKCommonConst.HKTGI_IDO_RSN_CD,
/* ++++++++++ v4.01.00 追加開始 ++++++++++ */
		JKKCommonConst.HKTGI_IDO_RSN_MEMO,
/* ++++++++++ v4.01.00 追加終了 ++++++++++ */
		JKKCommonConst.HKTGI_OP_SVC_KEI_NO,
		JKKCommonConst.HKTGI_TRAN_DIV,
		JKKCommonConst.HKTGI_MSKM_NO,
		JKKCommonConst.HKTGI_MSKM_DTL_NO,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_NM,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_VALUE,
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		JKKCommonConst.HKTGI_SHOKAI_SBT
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
	};
	
	/**
	 * 初期処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 遷移元画面の画面ID(戻り先の画面ID)を取得
		String screenId = JCCWebCommon.getScreenId(this);
		
		// ■ 引継情報の取得
		// 遷移元画面で指定されたNEXT_SCREEN_IDを取得
		String dspScreenId = commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		// 遷移元画面にてJCCWebCommon.setScreenInfoメソッドで設定されている画面情報を取得し、サービスフォームBeanに設定する
		HashMap<String, Object> map = JCCWebCommon.getScreenInfo(this, dspScreenId);
		
		// 引継情報を取得
		X31SDataBeanAccessArray custKeiHktgiList =  bean.getDataBeanArray(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInf = custKeiHktgiList.getDataBean(0);
		
		// 顧客契約引継リストからの引継
		String sysId = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SYSID, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW02525SFConst.SYSID, X31CWebConst.DATABEAN_SET_VALUE, sysId);
		
		String svcKeiNo = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW02525SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svcKeiNo);
		
		String idoDiv = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_IDO_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW02525SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, idoDiv);
		
		// 異動理由コードを取得
		bean.sendMessage(KKW02525SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_CLEAR);
		int idoRsnCount = (Integer)custKeiHktgiInf.sendMessage(JKKCommonConst.HKTGI_IDO_RSN_CD, X31CWebConst.DATABEAN_GET_COUNT);
		String idoRsnCd = null;
		for(int i = 0; i < idoRsnCount; i++)
		{
			idoRsnCd = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_IDO_RSN_CD, X31CWebConst.DATABEAN_GET_VALUE, i);
			bean.sendMessageString(KKW02525SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_ADD_VALUE, idoRsnCd);
		}
		
		String opSvcKeino = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_OP_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE, 0);
		bean.sendMessageString(KKW02525SFConst.OP_SVC_KEI_NO_SENI_MOTO, X31CWebConst.DATABEAN_SET_VALUE, opSvcKeino);
		
		String tranDiv = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_TRAN_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		// 照会モードで遷移してきた際、異動区分を空白にする
		if(JKKCommonConst.OP_TRAN_DIV_SHOKAI.equals(tranDiv))
		{
			bean.sendMessageString(KKW02525SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		setHyojiModeAndEventId(bean, tranDiv);// 表示モード、イベントID設定
		
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// ワンストップメニュー呼び出しのオプションサービス契約一覧から遷移された場合、照会種別に"1"が設定されているのでワンストップフラグに設定
		String shokaiSbt = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SHOKAI_SBT, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW02525SFConst.ONE_STOP_FLG, X31CWebConst.DATABEAN_SET_VALUE, shokaiSbt);
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// ｵﾌﾟｼｮﾝﾁｬﾝﾈﾙ受付履歴一覧照会画面から遷移した場合
		if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
		{
			// 引継情報の設定
			bean.sendMessageString(KKW02525SFConst.KIKI_SEIZO_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)map.get(KKW02525SFConst.KIKI_SEIZO_NO));
			bean.sendMessageString(KKW02525SFConst.BCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)map.get(KKW02525SFConst.BCAS_ID));
			bean.sendMessageString(KKW02525SFConst.CCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)map.get(KKW02525SFConst.CCAS_ID));
		}
		
		// オンライン運用日付取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW02525SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);	// 基準日
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0164");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0164_KKSV0164OPDBMapper mapper = new KKSV0164_KKSV0164OPDBMapper();
		mapper.setKKSV016401SC(paramBean, inputMap, "2");
		mapper.setKKSV016402SC(paramBean, inputMap, "2");
//		mapper.setKKSV016403SC(paramBean, inputMap, "2");
		mapper.setKKSV016401CC(paramBean, inputMap, "1");
		mapper.setKKSV016402CC(paramBean, inputMap, "1");
		mapper.setKKSV016406SC(paramBean, inputMap, "2");
		mapper.setKKSV016408SC(paramBean, inputMap, "1");
		mapper.setKKSV016407SC(paramBean, inputMap, "1");
//OM-2016-0000143 DEL START 2016/02/09
//		mapper.setKKSV016405SC(paramBean, inputMap, "1");
//OM-2016-0000143 DEL END 2016/02/09
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		mapper.setKKSV016409SC(paramBean, inputMap, "2");
		mapper.setKKSV016410SC(paramBean, inputMap, "1");
		mapper.setKKSV016411SC(paramBean, inputMap, "1");
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		// 顧客契約引継ぎリスト.サービス契約番号が無い場合、オプションサービス⇒サービス契約内訳からサービス契約番号を取得する
		if(svcKeiNo == null || "".equals(svcKeiNo))
		{
			mapper.setKKSV016412SC(paramBean, inputMap, "2");
		}
		mapper.setKKSV0164WORK01(paramBean, inputMap);
//OM-2016-0000143 ADD START 2016/02/09		
		mapper.setKKSV016413SC(paramBean, inputMap, "2");
//OM-2016-0000143 ADD END 2016/02/09
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// ■ サービス結果の転記
		mapper.getKKSV016402SC(paramBean, outputMap);
//		mapper.getKKSV016403SC(paramBean, outputMap);
		mapper.getKKSV016401CC(paramBean, outputMap);
		mapper.getKKSV016402CC(paramBean, outputMap);
		/* ++++++++++ v4.00.00 変更開始 ++++++++++ */
//		mapper.getKKSV016406_07_08SC(paramBean, outputMap);
		mapper.getKKSV016406_07_08_09SC(paramBean, outputMap);
		/* ++++++++++ v4.00.00 変更終了 ++++++++++ */
//OM-2016-0000143 DEL START 2016/02/09
//		mapper.getKKSV016405SC(paramBean, outputMap);
//OM-2016-0000143 DEL END 2016/02/09
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		mapper.getKKSV016410SC(paramBean, outputMap);
		mapper.getKKSV016411SC(paramBean, outputMap);
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// 初期値を設定
		setInitValue();
		
		// ｵﾌﾟｼｮﾝﾁｬﾝﾈﾙ受付履歴一覧照会画面から遷移
		if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
		{
			// 選択チェックボックスの制御(非活性：1)
			bean.sendMessageString(KKW02525SFConst.CHOICE_DISABLE, X31CWebConst.DATABEAN_SET_VALUE, "1");
		}
		else if (JKKScreenConst.SCREEN_ID_KKW02301.equals(screenId))
		{
			// 選択チェックボックスの制御(活性：0)
			bean.sendMessageString(KKW02525SFConst.CHOICE_DISABLE, X31CWebConst.DATABEAN_SET_VALUE, "0");
		}
		
		String hyojiMode = bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 解約モードの場合
		if ("2".equals(hyojiMode))
		{
			// eo光テレビオプションチャンネル情報取得
			X31SDataBeanAccessArray list = bean.getDataBeanArray(KKW02525SFConst.OPTION_CH_INFO);
			for (int i = 0; i < list.getCount().intValue(); i++)
			{
				X31SDataBeanAccess listbean = list.getDataBean(i);
				
				// オプションサービス契約ステータス取得
				String opSvcKeiStat = listbean.sendMessageString(KKW02525SFConst.OP_SVC_KEI_STAT_01, X31CWebConst.DATABEAN_GET_VALUE);
				
				// eo光テレビオプションチャンネル情報一覧に締結済みのデータが１件でもあった場合は、エラーを表示する
				if (JKKCommonConst.SVC_KEI_STAT_030.equals(opSvcKeiStat))
				{
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0290_JW, new String[]{"利用開始日", "未来のオプションチャンネル", "解約"}, "");
					break;
				}
			}
		}
		
		// 取消モードの場合
		if ("3".equals(hyojiMode))
		{
			// ボタン表示切替(修正：1/戻る：0)
			bean.sendMessageString(KKW02525SFConst.BTN_HYOJI, X31CWebConst.DATABEAN_SET_VALUE, "0");
			
			// 異動区分
			idoDiv = bean.sendMessageString(KKW02525SFConst.IDO_DIV, X31CWebConst.DATABEAN_GET_VALUE);
			if(idoDiv != null && !"".equals(idoDiv))
			{
				// 確認画面に遷移するとき、登録・更新内容を確認するメッセージを通知する
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[]{"eo光テレビオプションチャンネルの情報更新"});
				// 遷移先の画面IDを共有フォームBeanの項目に設定する。
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02526);
				// 遷移先の画面名を共有フォームBeanの項目に設定する。
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02526);
			}
			else
			{
				// 遷移先の画面IDを共有フォームBeanの項目に設定する。
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02525);
				// 遷移先の画面名を共有フォームBeanの項目に設定する。
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02525);
			}
		}
		else
		{
			// ボタン表示切替(修正：1/戻る：0)
			bean.sendMessageString(KKW02525SFConst.BTN_HYOJI, X31CWebConst.DATABEAN_SET_VALUE, "1");
			
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02525);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02525);
		}
		return true;
	}
	
	/**
	 * 更新確認(KKW02525)ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean forwardUpdCfm() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		boolean kanrenErrFlg = false;
		
		// 遷移元画面の画面ID(戻り先の画面ID)を取得
		String screenId = JCCWebCommon.getScreenId(this);
		
		// 表示モードの取得
		String hyojiMode = bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// ■ 関連チェック
		// サービス契約ステータス
		String svcKeiStat = bean.sendMessageString(KKW02525SFConst.SVC_KEI_STAT, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 運用日付取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		// eo光テレビオプションチャンネル情報取得
		X31SDataBeanAccessArray list = bean.getDataBeanArray(KKW02525SFConst.OPTION_CH_INFO);
		for (int i = 0; i < list.getCount().intValue(); i++)
		{
			X31SDataBeanAccess listbean = list.getDataBean(i);
			
			if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
			{
				// 選択は非活性のためfalseが取得されるためtrueを再度設定する
				listbean.sendMessageBoolean(KKW02525SFConst.CHOICE_01, X31CWebConst.DATABEAN_SET_VALUE, true);
			}
			if ("1".equals(hyojiMode))
			{
				// 利用開始日取得
				String yyyy = listbean.sendMessageString(KKW02525SFConst.USE_STA_YEAR_01, X31CWebConst.DATABEAN_GET_VALUE);
				String mm = listbean.sendMessageString(KKW02525SFConst.USE_STA_MON_01, X31CWebConst.DATABEAN_GET_VALUE);
				String dd = listbean.sendMessageString(KKW02525SFConst.USE_STA_DAY_01, X31CWebConst.DATABEAN_GET_VALUE);
				String ymd = yyyy + mm + dd;
				
				// 未来日チェック(運用日＋60日以降の日付を指定されるとエラー)
				int day = JPCDateUtil.subtractDay(ymd, opeDate);
//OM-2016-0000143 MOD START 2016/02/09
//				int paramStaDays = Integer.parseInt(bean.sendMessageString(KKW02525SFConst.KK_OP_CNL_STA_DAYS, X31CWebConst.DATABEAN_GET_VALUE));
//				if (day > paramStaDays)
//				{
//					kanrenErrFlg = true;
//					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用開始日", String.valueOf(paramStaDays) + "日後", "日付"}, "use_sta_year" + i);
//					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用開始日", String.valueOf(paramStaDays) + "日後", "日付"}, "use_sta_mon" + i);
//					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用開始日", String.valueOf(paramStaDays) + "日後", "日付"}, "use_sta_day" + i);
				int paramStaDays = Integer.parseInt(listbean.sendMessageString(KKW02525SFConst.RSV_PSB_PRD, X31CWebConst.DATABEAN_GET_VALUE));
				if (day > paramStaDays)
				{
					kanrenErrFlg = true;
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用開始日", "運用日+" + String.valueOf(paramStaDays) + "日後", "日付"}, "use_sta_year" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用開始日", "運用日+" + String.valueOf(paramStaDays) + "日後", "日付"}, "use_sta_mon" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用開始日", "運用日+" + String.valueOf(paramStaDays) + "日後", "日付"}, "use_sta_day" + i);
//OM-2016-0000143 MOD END 2016/02/09
				}
				// 過去日チェック(運用日付より過去日が指定された場合はエラー)
				if (JPCDateChecker.isPastDate(ymd, opeDate, "0"))
				{
					kanrenErrFlg = true;
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1710_TW, new String[]{"利用開始日"}, "use_sta_year" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1710_TW, new String[]{"利用開始日"}, "use_sta_mon" + i);
					JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1710_TW, new String[]{"利用開始日"}, "use_sta_day" + i);
				}
				listbean.sendMessageString(KKW02525SFConst.CHOICE_NM_01, X31CWebConst.DATABEAN_SET_VALUE, "反映");
				listbean.sendMessageString(KKW02525SFConst.USE_STAYMD_01, X31CWebConst.DATABEAN_SET_VALUE, ymd);
			}
			else if ("2".equals(hyojiMode))
			{
				// 利用終了日取得
				String yyyy = listbean.sendMessageString(KKW02525SFConst.USE_END_YEAR_01, X31CWebConst.DATABEAN_GET_VALUE);
				String mm = listbean.sendMessageString(KKW02525SFConst.USE_END_MON_01, X31CWebConst.DATABEAN_GET_VALUE);
				String dd = listbean.sendMessageString(KKW02525SFConst.USE_END_DAY_01, X31CWebConst.DATABEAN_GET_VALUE);
				String ymd = yyyy + mm + dd;
				
				/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
				// 課金終了日取得
				String chrgYyyy = listbean.sendMessageString(KKW02525SFConst.CHRG_END_YEAR_01, X31CWebConst.DATABEAN_GET_VALUE);
				String chrgMm = listbean.sendMessageString(KKW02525SFConst.CHRG_END_MON_01, X31CWebConst.DATABEAN_GET_VALUE);
				String chrgDd = listbean.sendMessageString(KKW02525SFConst.CHRG_END_DAY_01, X31CWebConst.DATABEAN_GET_VALUE);
				String chrgYmd = chrgYyyy + chrgMm + chrgDd;
				/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
				
				boolean choice = listbean.sendMessageBoolean(KKW02525SFConst.CHOICE_01, X31CWebConst.DATABEAN_GET_VALUE);
				if (choice)
				{
					// 選択された場合、"解約"を表示
					listbean.sendMessageString(KKW02525SFConst.CHOICE_NM_01, X31CWebConst.DATABEAN_SET_VALUE, "解約");
					
					// 未来日チェック(サービス契約のサービス契約ステータスが「休止中」の場合、未来日での登録はエラー)
					if (JKKCommonConst.SVC_KEI_STAT_210.equals(svcKeiStat) && JPCDateChecker.isFutureDate(ymd, opeDate, "0"))
					{
						kanrenErrFlg = true;
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5440_JW, new String[]{"休止中", "未来日指定の解約は"}, "use_end_year" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5440_JW, new String[]{"休止中", "未来日指定の解約は"}, "use_end_mon" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5440_JW, new String[]{"休止中", "未来日指定の解約は"}, "use_end_day" + i);
					}
					
					// 未来日チェック(運用日＋60日以降の日付を指定されるとエラー)
					int day = JPCDateUtil.subtractDay(ymd, opeDate);
//OM-2016-0000143 MOD START 2016/02/09
//					int paramStaDays = Integer.parseInt(bean.sendMessageString(KKW02525SFConst.KK_OP_CNL_STA_DAYS, X31CWebConst.DATABEAN_GET_VALUE));
//					if (day > paramStaDays)
//					{
//						kanrenErrFlg = true;
//						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", String.valueOf(paramStaDays) + "日後", "日付"}, "use_end_year" + i);
//						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", String.valueOf(paramStaDays) + "日後", "日付"}, "use_end_mon" + i);
//						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", String.valueOf(paramStaDays) + "日後", "日付"}, "use_end_day" + i);
					int paramEndDays = Integer.parseInt(listbean.sendMessageString(KKW02525SFConst.RSV_PSB_PRD, X31CWebConst.DATABEAN_GET_VALUE));
					if (day > paramEndDays)
					{
						kanrenErrFlg = true;
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", "運用日+" +String.valueOf(paramEndDays) + "日後", "日付"}, "use_end_year" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", "運用日+" +String.valueOf(paramEndDays) + "日後", "日付"}, "use_end_mon" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"利用終了日", "運用日+" +String.valueOf(paramEndDays) + "日後", "日付"}, "use_end_day" + i);
//OM-2016-0000143 MOD END 2016/02/09
					}
					// 過去日チェック(運用日付より過去日が指定された場合はエラー)
					if (JPCDateChecker.isPastDate(ymd, opeDate, "0"))
					{
						kanrenErrFlg = true;
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1710_TW, new String[]{"利用終了日"}, "use_end_year" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1710_TW, new String[]{"利用終了日"}, "use_end_mon" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1710_TW, new String[]{"利用終了日"}, "use_end_day" + i);
					}
					
					/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
					// 課金終了日<=利用終了日（日付妥当性チェック）
					if (JPCDateChecker.isFutureDate(chrgYmd, ymd, "0"))
					{
						kanrenErrFlg = true;
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"課金終了日", "利用終了日", "日付"}, "chrg_end_year" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"課金終了日", "利用終了日", "日付"}, "chrg_end_mon" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0270_NW, new String[]{"課金終了日", "利用終了日", "日付"}, "chrg_end_day" + i);
					}
					
					// 課金終了日>=課金開始日（日付妥当性チェック）
					if (JPCDateChecker.isPastDate(chrgYmd, listbean.sendMessageString(KKW02525SFConst.CHRG_STAYMD_01, X31CWebConst.DATABEAN_GET_VALUE), "0"))
					{
						kanrenErrFlg = true;
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "課金開始日以前"}, "chrg_end_year" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "課金開始日以前"}, "chrg_end_mon" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "課金開始日以前"}, "chrg_end_day" + i);
					}
					
//【OM-2013-0001474】対応:課金終了日に前々月の日付が入力された場合、エラー
					if (JPCDateUtil.subtractMonth(opeDate, chrgYmd) >=2)
					{
						kanrenErrFlg = true;
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "翌月以外"}, "chrg_end_year" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "翌月以外"}, "chrg_end_mon" + i);
						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "翌月以外"}, "chrg_end_day" + i);
					}
//【OM-2013-0001474】対応
					
//					// 過去日入力チェック（締後日付入力）
//					// 課金終了日から1ヶ月加算した日付の年月（6桁）＋ "05"を締日として取得
//					String chrgSimeYmd = JPCDateUtil.addMonth(chrgYmd, 1);
//					chrgSimeYmd = chrgSimeYmd.substring(0,6) + "05";
//					// 締日が運用日より過去日の場合はエラー（締処理済み月への過去日入力）
//					if (JPCDateChecker.isPastDate(chrgSimeYmd, opeDate, "0"))
//					{
//						kanrenErrFlg = true;
//						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "締処理後以前"}, "chrg_end_year" + i);
//						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "締処理後以前"}, "chrg_end_mon" + i);
//						JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8330_TW, new String[]{"課金終了日", "締処理後以前"}, "chrg_end_day" + i);
//					}
					/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
				}
				else
				{
					// 選択されない場合、空白表示
					listbean.sendMessageString(KKW02525SFConst.CHOICE_NM_01, X31CWebConst.DATABEAN_SET_VALUE, "");
					ymd = "";
					/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
					chrgYmd = "";
					/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
				}
				
				listbean.sendMessageString(KKW02525SFConst.USE_ENDYMD_01, X31CWebConst.DATABEAN_SET_VALUE, ymd);
				/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
				listbean.sendMessageString(KKW02525SFConst.CHRG_ENDYMD_01, X31CWebConst.DATABEAN_SET_VALUE, chrgYmd);
				/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
			}
		}
		
		// 関連チェックでエラーがある場合
		if (kanrenErrFlg)
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02525);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02525);
			return true;
		}
		
//		bean.sendMessageString(KKW02525SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);	// 基準日
		
		String sysDate = JCCWebCommon.getOpeDateTimeStamp(this, null);//JCCWebCommon.getSysDateTimeStamp();
		bean.sendMessageString(KKW02525SFConst.STDARDYMD_DTM, X31CWebConst.DATABEAN_SET_VALUE, sysDate);	// 基準日時分秒
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0165");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0165_KKSV0165OPDBMapper mapper = new KKSV0165_KKSV0165OPDBMapper();
		
		mapper.setKKSV016501SC(paramBean, inputMap, "2", opeDate);
		mapper.setKKSV016502CC(paramBean, inputMap, "2", opeDate);	// 表示モードが利用開始モードの場合、マッピングされる
//		mapper.setKKSV016506SC(paramBean, inputMap, "2");	// 表示モードが利用開始モードの場合、マッピングされる
		mapper.setKKSV016503CC(paramBean, inputMap, "2", opeDate);	// 表示モードが解約モードの場合、マッピングされる
		mapper.setKKSV016504CC(paramBean, inputMap, "2", opeDate);	// 表示モードが取消モードの場合、マッピングされる
		mapper.setKKSV016508SC(paramBean, inputMap, "2", opeDate);
		mapper.setKKSV0165WORK01(paramBean, inputMap);
		mapper.setKKSV016509CC(paramBean, inputMap, "2", opeDate);
		mapper.setKKSV016510CC(paramBean, inputMap, "2");
		
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// ワンストップ対応履歴登録CC
		// パラメータ作成（共有フォームBeanを使用するため）
		X31SDataBeanAccess[] paramBeans = {bean, commoninfoBean};
		mapper.setKKSV016511CC(paramBeans, inputMap, "2");
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
//■■【OM-2013-0001052】対応
		// 料金計算日チェック（課金終了日で取得した料金計算日が運用日より過去の場合、エラー）
//		if (outputMap.containsKey("KKSV016503CC"))
//		{
//			HashMap<String, Object> kksv016503CCMap = (HashMap<String, Object>)outputMap.get("KKSV016503CC");
//			ArrayList<HashMap<String, Object>> optionChSelectList = (ArrayList)kksv016503CCMap.get("option_ch_select");
//			for (int i = 0; i < optionChSelectList.size(); i++)
//			{
//				HashMap<String, Object> childMap = optionChSelectList.get(i);
//				if (JPCDateChecker.isPastDate((String)childMap.get("event_ymd"), opeDate, "0"))
//				{
//					for (int j = 0; j < list.getCount().intValue(); j++)
//					{
//						X31SDataBeanAccess listbean = list.getDataBean(j);
//						if (listbean.sendMessageString(KKW02525SFConst.OP_SVC_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE).equals(childMap.get("op_svc_kei_no")))
//						{
//							kanrenErrFlg = true;
//							JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBD640_KW, new String[]{"課金終了日"}, "chrg_end_year" + j);
//							JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBD640_KW, new String[]{"課金終了日"}, "chrg_end_mon" + j);
//							JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBD640_KW, new String[]{"課金終了日"}, "chrg_end_day" + j);
//							
//							break;
//						}
//					}
//				}
//			}
//		}
//■■【OM-2013-0001052】対応
		
		// 関連チェックでエラーがある場合
		if (kanrenErrFlg)
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02525);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02525);
			return true;
		}
		
		// 確認画面に遷移するとき、登録・更新内容を確認するメッセージを通知する
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[]{"eo光テレビオプションチャンネルの情報更新"});
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02526);
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02526);
		return true;
	}
	
	/**
	 * クリア(KKW02525)ボタン押下時
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean clear() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// 初期化処理(初期値を設定し初期表示状態に戻す)
		setInitValue();
		
		// 遷移先画面ID取得し設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02525);
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02525);
		return true;
	}
	
	/**
	 * 戻る(KKW02525)ボタン押下時
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
/* ++++++++++ v5.00.00 削除開始 ++++++++++ */
//		X31SDataBeanAccess bean = super.getServiceFormBean();
		// 顧客契約内引継ぎデータセット
//		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW02525SFConst.KTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
/* ++++++++++ v5.00.00 削除終了 ++++++++++ */
		// 遷移元画面の画面ID(戻り先の画面ID)を取得
		String screenId = JCCWebCommon.getScreenId(this);
		
		// ｵﾌﾟｼｮﾝﾁｬﾝﾈﾙ受付履歴一覧照会画面から遷移
		if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
		{
			// 画面情報を設定
//			JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW10401 + "0PJP", dataMap);
			// 遷移先画面ID取得し設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW10401);
		}
		// ｵﾌﾟｼｮﾝｻｰﾋﾞｽ契約一覧照会画面から遷移
		else if (JKKScreenConst.SCREEN_ID_KKW02301.equals(screenId))
		{
/* ++++++++++ v5.00.00 削除開始 ++++++++++ */
			// 画面情報を設定
//			JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW02301 + "0PJP", dataMap);
/* ++++++++++ v5.00.00 削除終了 ++++++++++ */
			// 遷移先画面ID取得し設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02301);
		}
		return true; 
	}
	
	/**
	 * 戻る(KKW02526)ボタン押下時
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean forwardBack() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// 顧客契約内引継ぎデータセット
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW02525SFConst.KTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		
		// 遷移元画面の画面ID(戻り先の画面ID)を取得
		String screenId = JCCWebCommon.getScreenId(this);
		
		// ｵﾌﾟｼｮﾝﾁｬﾝﾈﾙ受付履歴一覧照会画面から遷移
		if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
		{
			// 画面情報を設定
//			JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW10401 + "0PJP", dataMap);
			// 遷移先画面ID取得し設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW10401);
		}
		// ｵﾌﾟｼｮﾝｻｰﾋﾞｽ契約一覧照会画面から遷移
		else if (JKKScreenConst.SCREEN_ID_KKW02301.equals(screenId))
		{
			// 画面情報を設定
			JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW02301 + "0PJP", dataMap);
			// 遷移先画面ID取得し設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02301);
		}
		return true; 
	}
	
	/**
	 * 確定(KKW02526)ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean forwardFix() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// オンライン運用日付取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
//		bean.sendMessageString(KKW02525SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);	// 基準日
		
		String sysDate = JCCWebCommon.getOpeDateTimeStamp(this, null);//JCCWebCommon.getSysDateTimeStamp();
		bean.sendMessageString(KKW02525SFConst.STDARDYMD_DTM, X31CWebConst.DATABEAN_SET_VALUE, sysDate);	// 基準日時分秒
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0165");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0165_KKSV0165OPDBMapper mapper = new KKSV0165_KKSV0165OPDBMapper();
		
		mapper.setKKSV016501SC(paramBean, inputMap, "1", opeDate);
		mapper.setKKSV016502CC(paramBean, inputMap, "1", opeDate);	// 表示モードが利用開始モードの場合、マッピングされる
//		mapper.setKKSV016506SC(paramBean, inputMap, "2");	// 表示モードが利用開始モードの場合、マッピングされる
		mapper.setKKSV016503CC(paramBean, inputMap, "1", opeDate);	// 表示モードが解約モードの場合、マッピングされる
		mapper.setKKSV016504CC(paramBean, inputMap, "1", opeDate);	// 表示モードが取消モードの場合、マッピングされる
		mapper.setKKSV016508SC(paramBean, inputMap, "1", opeDate);
		mapper.setKKSV0165WORK01(paramBean, inputMap);
		mapper.setKKSV016509CC(paramBean, inputMap, "1", opeDate);
		mapper.setKKSV016510CC(paramBean, inputMap, "1");
		
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// ワンストップ対応履歴登録CC
		// パラメータ作成（共有フォームBeanを使用するため）
		X31SDataBeanAccess[] paramBeans = {bean, commoninfoBean};
		mapper.setKKSV016511CC(paramBeans, inputMap, "1");
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// 完了画面に遷移するとき、完了したことを通知する
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I, new String[]{"eo光テレビオプションチャンネルの情報更新"});
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02527);
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02527);
		return true;
	}
	
	/**
	 * 修正(KKW02526)ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean forwardShusei() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02525);
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02525);
		return true;
	}

	/**
	 * 完了(KKW02527)ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean forwardFin() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// 顧客契約内引継ぎデータセット
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW02525SFConst.KTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		
		// 遷移元画面の画面ID(戻り先の画面ID)を取得
		String screenId = JCCWebCommon.getScreenId(this);
		
		// ｵﾌﾟｼｮﾝﾁｬﾝﾈﾙ受付履歴一覧照会画面から遷移
		if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
		{
			// 画面情報を設定
//			JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW10401 + "0PJP", dataMap);
			// 遷移先画面ID取得し設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW10401);
		}
		// ｵﾌﾟｼｮﾝｻｰﾋﾞｽ契約一覧照会画面から遷移
		else if (JKKScreenConst.SCREEN_ID_KKW02301.equals(screenId))
		{
			// 画面情報を設定
			JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW02301 + "0PJP", dataMap);
			// 遷移先画面ID取得し設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02301);
		}
		return true;
	}
	
	/**
	 * 表示モードとイベントIDと異動区分と異動理由コードを設定します。
	 * <br>
	 * @param bean
	 * @param eventId
	 */
	private void setHyojiModeAndEventId(X31SDataBeanAccess bean, String eventId)
	{
		
		// 遷移元画面の画面ID(戻り先の画面ID)を取得
		String screenId = JCCWebCommon.getScreenId(this);
		
		if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
		{
			if ("01".equals(eventId))
			{
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"利用開始登録ボタン"の場合、"1：利用開始モード"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"利用開始登録ボタン"の場合、"101：利用開始登録"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"利用開始登録ボタン"の場合、"00031：オプション設定"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"利用開始登録ボタン"の場合、"56：その他"
				bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_SET_VALUE, "1");
				bean.sendMessageString(KKW02525SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, "101");
				/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//				bean.sendMessageString(KKW02525SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, "00031");
//				bean.sendMessage(KKW02525SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_CLEAR);
//				bean.sendMessageString(KKW02525SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_ADD_VALUE, "56");
				/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
			}
			else if ("02".equals(eventId))
			{
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"解約登録ボタン"の場合、"2：解約登録モード"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"解約登録ボタン"の場合、"202：解約登録"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"解約登録ボタン"の場合、"00031：オプション設定"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"解約登録ボタン"の場合、"E6：その他理由による解約"
				bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_SET_VALUE, "2");
				bean.sendMessageString(KKW02525SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, "202");
				/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//				bean.sendMessageString(KKW02525SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, "00031");
//				bean.sendMessage(KKW02525SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_CLEAR);
//				bean.sendMessageString(KKW02525SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_ADD_VALUE, "E6");
				/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
			}
			else if ("03".equals(eventId))
			{
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"取消ボタン"の場合、"3：取消モード"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"取消ボタン"の場合、"303：取消"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"取消ボタン"の場合、"00055：オプション予約取消"
				// 遷移元画面IDが"KKW10401"、かつ、遷移元イベントが"取消ボタン"の場合、"D7：電話受付キャンセル"
				bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_SET_VALUE, "3");
				bean.sendMessageString(KKW02525SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, "303");
				/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//				bean.sendMessageString(KKW02525SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, "00055");
//				bean.sendMessage(KKW02525SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_CLEAR);
//				bean.sendMessageString(KKW02525SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_ADD_VALUE, "D7");
				/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
			}
		}
		else if (JKKScreenConst.SCREEN_ID_KKW02301.equals(screenId))
		{
			if (JKKCommonConst.OP_TRAN_DIV_CHGE.equals(eventId))
			{
				// 遷移元画面IDが"KKW02301"、かつ、遷移元イベントが"変更ボタン"の場合、"2：解約登録モード"
				// 遷移元画面IDが"KKW02301"、かつ、遷移元イベントが"変更ボタン"の場合、"203：変更"
				bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_SET_VALUE, "2");
				bean.sendMessageString(KKW02525SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, "203");
			}
			else if (JKKCommonConst.OP_TRAN_DIV_DSL.equals(eventId))
			{
				// 遷移元画面IDが"KKW02301"、かつ、遷移元イベントが"解約ボタン"の場合、"2：解約登録モード"
				// 遷移元画面IDが"KKW02301"、かつ、遷移元イベントが"解約ボタン"の場合、"204：解約"
				bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_SET_VALUE, "2");
				bean.sendMessageString(KKW02525SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, "204");
			}
			else if (JKKCommonConst.OP_TRAN_DIV_KAIHK.equals(eventId) || JKKCommonConst.OP_TRAN_DIV_RSV_CL.equals(eventId))
			{
				// 遷移元画面IDが"KKW02301"、かつ、遷移元イベントが"回復ボタン"または"予約取消ボタン"の場合、"3：取消モード"
				// 遷移元画面IDが"KKW02301"、かつ、遷移元イベントが"回復ボタン"または"予約取消ボタン"の場合、"306：予約取消"
				bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_SET_VALUE, "3");
				bean.sendMessageString(KKW02525SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, "306");
			}
		}
		
		// 異動区分
		String idoDiv = bean.sendMessageString(KKW02525SFConst.IDO_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		if("".equals(idoDiv) || idoDiv == null)
		{
			// 異動区分が設定されていない場合、取消モードとして起動する（更新確認、確定ボタンはjspで判定し非表示にする）
			bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_SET_VALUE, "3");
			bean.sendMessageString(KKW02525SFConst.EVENT_ID, X31CWebConst.DATABEAN_SET_VALUE, "303");
		}
	}
	
	/**
	 * 初期値を設定します。
	 * <br>
	 */
	private void setInitValue()
	{
		
		// 遷移元画面の画面ID(戻り先の画面ID)を取得
		String screenId = JCCWebCommon.getScreenId(this);
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// オンライン運用日取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		// 表示モードの取得
		String hyojiMode = bean.sendMessageString(KKW02525SFConst.HYOJI_MODE, X31CWebConst.DATABEAN_GET_VALUE);
		/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//		// 遷移元画面のオプションサービス契約番号
//		String opSvcKeiNoSeniMoto = bean.sendMessageString(KKW02525SFConst.OP_SVC_KEI_NO_SENI_MOTO, X31CWebConst.DATABEAN_GET_VALUE);
		/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
		
		// 運用日を、年、月、日、月末日に編集
		String yyyy = JPCEditString.toYearFromYmd(opeDate);
		String mm = JPCEditString.toMonthFromYmd(opeDate);
		String dd = JPCEditString.toDayFromYmd(opeDate);
		String endOfMonthDay = JPCDateUtil.getEndOfMonth(opeDate.substring(0, 6));
		
		X31SDataBeanAccessArray list = bean.getDataBeanArray(KKW02525SFConst.OPTION_CH_INFO);
		for (int i = 0; i < list.getCount().intValue(); i++)
		{
			X31SDataBeanAccess listbean = list.getDataBean(i);
			if ("1".equals(hyojiMode))
			{
				// 「利用開始モード」の場合、利用開始日に運用日を設定
				listbean.sendMessageString(KKW02525SFConst.USE_STA_YEAR_01, X31CWebConst.DATABEAN_SET_VALUE, yyyy);
				listbean.sendMessageString(KKW02525SFConst.USE_STA_MON_01, X31CWebConst.DATABEAN_SET_VALUE, mm);
				listbean.sendMessageString(KKW02525SFConst.USE_STA_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, dd);
				
				/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
				// 赤Ｂ−ＣＡＳ番号に赤Ｂ−ＣＡＳ番号＿退避を設定
				listbean.sendMessageString(KKW02525SFConst.RED_BCAS_NO_01, X31CWebConst.DATABEAN_SET_VALUE, 
						listbean.sendMessageString(KKW02525SFConst.RED_BCAS_NO_BK_01, X31CWebConst.DATABEAN_GET_VALUE));
				/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
			}
			else if ("2".equals(hyojiMode))
			{
				/* ++++++++++ v4.00.00 変更開始 ++++++++++ */
//				// 「解約登録モード」の場合、利用終了日に運用日の月末日を設定
//				listbean.sendMessageString(KKW02525SFConst.USE_END_YEAR_01, X31CWebConst.DATABEAN_SET_VALUE, yyyy);
//				listbean.sendMessageString(KKW02525SFConst.USE_END_MON_01, X31CWebConst.DATABEAN_SET_VALUE, mm);
//				listbean.sendMessageString(KKW02525SFConst.USE_END_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, endOfMonthDay);
				if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
				{
					// 遷移元画面IDが"KKW10401"で「解約登録モード」の場合、利用終了日、課金終了日に運用日の月末日を設定
					listbean.sendMessageString(KKW02525SFConst.USE_END_YEAR_01, X31CWebConst.DATABEAN_SET_VALUE, yyyy);
					listbean.sendMessageString(KKW02525SFConst.USE_END_MON_01, X31CWebConst.DATABEAN_SET_VALUE, mm);
					listbean.sendMessageString(KKW02525SFConst.USE_END_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, endOfMonthDay);
					listbean.sendMessageString(KKW02525SFConst.CHRG_END_YEAR_01, X31CWebConst.DATABEAN_SET_VALUE, yyyy);
					listbean.sendMessageString(KKW02525SFConst.CHRG_END_MON_01, X31CWebConst.DATABEAN_SET_VALUE, mm);
					listbean.sendMessageString(KKW02525SFConst.CHRG_END_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, endOfMonthDay);
				}
				else if (JKKScreenConst.SCREEN_ID_KKW02301.equals(screenId))
				{
					// 遷移元画面IDが"KKW02301"で「解約登録モード」の場合、利用終了日、課金終了日に空白を設定
					listbean.sendMessageString(KKW02525SFConst.USE_END_YEAR_01, X31CWebConst.DATABEAN_SET_VALUE, "");
					listbean.sendMessageString(KKW02525SFConst.USE_END_MON_01, X31CWebConst.DATABEAN_SET_VALUE, "");
					listbean.sendMessageString(KKW02525SFConst.USE_END_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, "");
					listbean.sendMessageString(KKW02525SFConst.CHRG_END_YEAR_01, X31CWebConst.DATABEAN_SET_VALUE, "");
					listbean.sendMessageString(KKW02525SFConst.CHRG_END_MON_01, X31CWebConst.DATABEAN_SET_VALUE, "");
					listbean.sendMessageString(KKW02525SFConst.CHRG_END_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, "");
					
					// 基準年月日に運用日の月末日を設定（JavaScriptで選択された際に利用終了日、課金終了日に設定する際に使用）
					bean.sendMessageString(KKW02525SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, yyyy + mm + endOfMonthDay);
				}
				/* ++++++++++ v4.00.00 変更終了 ++++++++++ */
			}
			
			if (JKKScreenConst.SCREEN_ID_KKW10401.equals(screenId))
			{
				// 遷移元画面で選択されたオプションチャンネルのみ表示しているため、チェックボックスを選択済みとする
				listbean.sendMessageBoolean(KKW02525SFConst.CHOICE_01, X31CWebConst.DATABEAN_SET_VALUE, true);
			}
			else
			{
				/* ++++++++++ v4.00.00 変更開始 ++++++++++ */
//				// オプションサービス契約番号
//				String opSvcKeiNo = listbean.sendMessageString(KKW02525SFConst.OP_SVC_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
//				
//				// 遷移元画面で選択されたチャンネル名に対するオプションサービス契約番号と
//				// 検索結果のオプションサービス契約番号が不一致の場合は、チェックボックスを未選択とする
//				if (opSvcKeiNoSeniMoto == null || !opSvcKeiNoSeniMoto.equals(opSvcKeiNo))
//				{
//					listbean.sendMessageBoolean(KKW02525SFConst.CHOICE_01, X31CWebConst.DATABEAN_SET_VALUE, false);
//				}
//				else
//				{
//					// 遷移元画面で選択されたオプションチャンネルは、チェックボックスを選択済みとする
//					listbean.sendMessageBoolean(KKW02525SFConst.CHOICE_01, X31CWebConst.DATABEAN_SET_VALUE, true);
//				}
				listbean.sendMessageBoolean(KKW02525SFConst.CHOICE_01, X31CWebConst.DATABEAN_SET_VALUE, false);
				/* ++++++++++ v4.00.00 変更終了 ++++++++++ */
			}
		}
	}
	
	/**	
	 * <dd>メソッド名：引継情報データマップ取得
	 * <dd>メソッド説明：引数のサービスフォームBeanより引継情報データマップの生成を行う。
	 * <dd>備考：引継情報データタイプの可変項目はString[]のみ対応。
	 * @param bean サービスフォームBean
	 * @param hktgiKey 引継情報データタイプのキー
	 * @param hktgiPrmKeys 引継情報データタイプの項目キーリスト	
	 * @return HashMap<String, Object> 引継情報データマップ
	 */
	private HashMap<String, Object> getHktgiDataMap(X31SDataBeanAccess bean, String hktgiKey, String[] hktgiPrmKeys)
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();

		X31SDataBeanAccessArray infList =  bean.getDataBeanArray(hktgiKey);
		HashMap<String, Object> inMap = null;
		for (int i = 0; i < infList.getCount(); i++)
		{
			inMap = new HashMap<String, Object>();
			X31SDataBeanAccess inf = infList.getDataBean(i);
			for (int j = 0; j < hktgiPrmKeys.length; j++)
			{
				try
				{
					inMap.put(hktgiPrmKeys[j], inf.sendMessageObject(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE));
				}
				catch (X31SRuntimeException ex)
				{
					// 可変項目の場合(String[]のみ対応)	
					int length = (Integer)inf.sendMessage(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_COUNT);
					String[] obj = new String[length];
					for (int k = 0; k < length; k++)
					{
						obj[k] = inf.sendMessageString(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE, k);
					}
					inMap.put(hktgiPrmKeys[j], obj);
				}
			}
			dataList.add(inMap);
		}
		dataMap.put(hktgiKey, dataList);
		return dataMap;	
	}
}
