/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW02537SFLogic
*   ソースファイル名：KKW02537SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年03月06日
*＜機能概要＞
*   NHK団体一括支払変更画面のビューロジックです
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/03/06   FJ          新規作成
*   v4.00.00    2012/12/20   FJ）野口	 IT1-2012-0002486 対応
*   v5.00.00    2013/11/19   FJ）磯俣	 OM-2013-0004499 過去日付入力を許す
*
**********************************************************************/

package eo.web.webview.KKW02537SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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.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.KKSV0496_KKSV0496OPDBMapper;
import eo.web.webview.mapping.KKSV0497_KKSV0497OPDBMapper;

/**
 * NHK団体一括支払変更画面のビューロジックです
 * 
 * @author 富士通
 */
public class KKW02537SFLogic 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.00.00 追加開始 ++++++++++ */
		JKKCommonConst.HKTGI_IDO_RSN_MEMO,
/* ++++++++++ v4.00.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,
		JKKCommonConst.HKTGI_POPUP_MODE
	};
	
	/**
	 * KKW02537_NHK団体一括支払変更画面の初期表示処理
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 例外が発生した場合
	 */
	public boolean initChge() throws Exception
	{
		
		// ■ 引継情報の取得
		JCCWebCommon.getScreenInfo(this);
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 共通の初期表示処理
		if (!init())
		{
			return true;
		}
		
		String ope_date = bean.sendMessageString(KKW02537SFConst.OPE_DATE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// ■ 初期値設定
		// 変更日
		bean.sendMessageString(KKW02537SFConst.CHG_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toYearFromYmd(ope_date));
		bean.sendMessageString(KKW02537SFConst.CHG_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toMonthFromYmd(ope_date));
		bean.sendMessageString(KKW02537SFConst.CHG_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toDayFromYmd(ope_date));
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02537);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02537);
		
		return true;
	}
	
	/**
	 * KKW02538_NHK団体一括支払変更確認画面の初期表示処理
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 例外が発生した場合
	 */
	public boolean initCfm() throws Exception
	{
		
		// ■ 引継情報の取得
		JCCWebCommon.getScreenInfo(this);
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 共通の初期表示処理
		if (!init())
		{
			return true;
		}
		
		// ■ 初期値設定
		String tran_div = bean.sendMessageString(KKW02537SFConst.TRAN_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		String op_svc_kei_stat = bean.sendMessageString(KKW02537SFConst.OP_SVC_KEI_STAT, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 処理区分が"05"(回復) 且つ オプションサービス契約ステータスが"910"(解約済)の場合
		if ("05".equals(tran_div) && "910".equals(op_svc_kei_stat))
		{
			// 解約日 ← サービス解約年月日
			bean.sendMessageString(KKW02537SFConst.DSL_YMD, X31CWebConst.DATABEAN_SET_VALUE, 
					bean.sendMessageString(KKW02537SFConst.SVC_DSL_YMD, X31CWebConst.DATABEAN_GET_VALUE));
		}
		// 処理区分が"05"(回復) 且つ オプションサービス契約ステータスが"920"(キャンセル済)の場合
		else if ("05".equals(tran_div) && "920".equals(op_svc_kei_stat))
		{
			// 解約日 ← サービスキャンセル年月日
			bean.sendMessageString(KKW02537SFConst.DSL_YMD, X31CWebConst.DATABEAN_SET_VALUE, 
					bean.sendMessageString(KKW02537SFConst.SVC_CANCEL_YMD, X31CWebConst.DATABEAN_GET_VALUE));
		}
		else if ("06".equals(tran_div))
		{
			String ido_rsv_dtl_cd = bean.sendMessageString(KKW02537SFConst.IDO_RSV_DTL_CD, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 処理区分が"06"（予約取消）且つ 異動予約詳細コードが"016"(解約)の場合
			if ("016".equals(ido_rsv_dtl_cd))
			{
				// 解約日 ← 予約適用年月日
				bean.sendMessageString(KKW02537SFConst.DSL_YMD, X31CWebConst.DATABEAN_SET_VALUE, 
						bean.sendMessageString(KKW02537SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_GET_VALUE));
			}
			// 処理区分が"06"（予約取消）且つ 異動予約詳細コードが"016"(解約)以外の場合
			else
			{
				// 解約日 ← ""
				bean.sendMessageString(KKW02537SFConst.DSL_YMD, X31CWebConst.DATABEAN_SET_VALUE, "");
			}
		}
		
		// ■ インフォメーションメッセージ設定
		// 処理区分が"05"(回復)の場合
		if ("05".equals(tran_div))
		{
			// メッセージエリアにインフォメーションメッセージを表示する。
			// EKB0370--I：＜＜以下の内容で%1%を行います。よろしいですか？＞＞
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の回復"});
		}
		// 処理区分が"06"（予約取消）の場合
		else if ("06".equals(tran_div))
		{
			// メッセージエリアにインフォメーションメッセージを表示する。
			// EKB0370--I：＜＜以下の内容で%1%を行います。よろしいですか？＞＞
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の予約取消"});
		}
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02538);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02538);
		
		return true;
	}
	
	/**
	 * KKW02540_NHK団体一括支払解約画面の初期表示処理
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 例外が発生した場合
	 */
	public boolean initDsl() throws Exception
	{
		
		// ■ 引継情報の取得
		JCCWebCommon.getScreenInfo(this);
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 共通の初期表示処理
		if (!init())
		{
			return true;
		}
		
		String ope_date = bean.sendMessageString(KKW02537SFConst.OPE_DATE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// ■ 初期値設定
		// 解約日
		bean.sendMessageString(KKW02537SFConst.DSL_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toYearFromYmd(ope_date));
		bean.sendMessageString(KKW02537SFConst.DSL_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toMonthFromYmd(ope_date));
		bean.sendMessageString(KKW02537SFConst.DSL_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toDayFromYmd(ope_date));
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02540);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02540);
		
		return true;
	}
	
	/**
	 * 初期表示処理
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 例外が発生した場合
	 */
	private boolean init() throws Exception
	{
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 顧客契約引継リスト
		X31SDataBeanAccessArray custKeiHktgiList =  bean.getDataBeanArray(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInf = custKeiHktgiList.getDataBean(0);
		
		// ＳＹＳＩＤ
		bean.sendMessageString(KKW02537SFConst.SYSID, 
				X31CWebConst.DATABEAN_SET_VALUE,
				custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SYSID, X31CWebConst.DATABEAN_GET_VALUE));
		
		// サービス契約番号
		bean.sendMessageString(KKW02537SFConst.SVC_KEI_NO,
				X31CWebConst.DATABEAN_SET_VALUE,
				custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		
		// オプションサービス契約番号
		bean.sendMessageString(KKW02537SFConst.OP_SVC_KEI_NO,
				X31CWebConst.DATABEAN_SET_VALUE,
				custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_OP_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE, 0));
		
		// 処理区分
		bean.sendMessageString(KKW02537SFConst.TRAN_DIV,
				X31CWebConst.DATABEAN_SET_VALUE,
				custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_TRAN_DIV, X31CWebConst.DATABEAN_GET_VALUE));
		
		
		// オンライン運用日付取得
		String ope_date = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW02537SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, ope_date);
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0496");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0496_KKSV0496OPDBMapper mapper = new KKSV0496_KKSV0496OPDBMapper();
		mapper.setKKSV049601SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049602SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049603SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049604SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049605SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049606SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV0496WORK01(paramBean, inputMap);
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}
		
		mapper.getKKSV049601SC(paramBean, outputMap);
		mapper.getKKSV049602SC(paramBean, outputMap);
		mapper.getKKSV049603SC(paramBean, outputMap);
		mapper.getKKSV049604SC(paramBean, outputMap);
		mapper.getKKSV049605SC(paramBean, outputMap);
		mapper.getKKSV049606SC(paramBean, outputMap);
		
		return true;
	}
	
	/**
	 * 契約内容コンボボックス選択処理
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean changeKeiNaiyo() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 選択インデックスから対応するコードを取得
		X31SDataBeanAccess subbean = (bean.getDataBeanArray(KKW02537SFConst.KEI_NAIYO)).getDataBean(0);
		String index = subbean.sendMessageString(KKW02537SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		String select_cd = subbean.sendMessageString(KKW02537SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
		
		if (!"".equals(select_cd))
		{
			// ゼロサプレス
			Matcher mtc = Pattern.compile("^0+([0-9]+.*)").matcher(select_cd);
			if (mtc.matches())
			{
				select_cd = mtc.group(1);
			}
		}
		
		bean.sendMessageString(KKW02537SFConst.SEIKY_KNK, X31CWebConst.DATABEAN_SET_VALUE, select_cd);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02537);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02537);
		
		return true;
	}
	
	/**
	 * KKW02537_NHK団体一括支払変更画面の更新確認ボタン押下処理
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean forwardUpdCfmChge() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// オンライン運用日付取得
		String ope_date = JCCWebCommon.getOpeDate(this, null);
		
		// オンライン運用日付取得
		String ope_date_time_stamp = JCCWebCommon.getOpeDateTimeStamp(this, null);
		bean.sendMessageString(KKW02537SFConst.OPE_DATE_DTM, X31CWebConst.DATABEAN_SET_VALUE, ope_date_time_stamp);
		
		// 変更日
		StringBuilder sb = new StringBuilder();
		sb.append(bean.sendMessageString(KKW02537SFConst.CHG_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW02537SFConst.CHG_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW02537SFConst.CHG_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(KKW02537SFConst.CHG_YMD, X31CWebConst.DATABEAN_SET_VALUE, sb.toString());
		
/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
		// ■関連チェック
		// 変更日が運用日より過去日であった場合
//		if(!checkPastDateChgYmd(bean))
//		{
//			// 画面遷移
//			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02537);
//			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02537);
//			return true;
//		}
/* ++++++++++ v5.00.00 変更終了 ++++++++++ */
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0497");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0497_KKSV0497OPDBMapper mapper = new KKSV0497_KKSV0497OPDBMapper();
		mapper.setKKSV049701SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049702SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049703SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049704SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049705SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049706SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049707SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049708SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049709SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049710SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV0497WORK01(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// ■ インフォメーションメッセージ設定
		// メッセージエリアにインフォメーションメッセージを表示する。
		// EKB0370--I：＜＜以下の内容で%1%を行います。よろしいですか？＞＞
		JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の変更"});
		
		// ■ 警告メッセージ設定
		// 運用日＋未来日許容期間を求める
		int future_day_prd = Integer.parseInt(bean.sendMessageString(KKW02537SFConst.FUTURE_DAY_PRD, X31CWebConst.DATABEAN_GET_VALUE));
		String ope_date_future_day_prd = JPCDateUtil.addDay(ope_date, future_day_prd);
		
		String chg_ymd = bean.sendMessageString(KKW02537SFConst.CHG_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 入力された変更日が運用日＋未来日許容期間を超過していた場合
		if (JPCDateChecker.isFutureDate(chg_ymd, ope_date_future_day_prd, "0"))
		{
			// メッセージエリアに警告メッセージを表示する。
			// EKB2990--Q：%1%に%2%日より未来の日付が入力されています。登録してよろしいですか？
			JCCWebCommon.setMessageInfo(this, "EKB2990--Q", new String[]{"変更日", editReplaceMessage(ope_date_future_day_prd)});
		}
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02538);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02538);
		
		return true;
	}
	
	/**
	 * KKW02540_NHK団体一括支払解約画面の更新確認ボタン押下処理
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean forwardUpdCfmDsl() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// オンライン運用日付取得
		String ope_date = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW02537SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, ope_date);
		// オンライン運用日付取得
		String ope_date_time_stamp = JCCWebCommon.getOpeDateTimeStamp(this, null);
		bean.sendMessageString(KKW02537SFConst.OPE_DATE_DTM, X31CWebConst.DATABEAN_SET_VALUE, ope_date_time_stamp);
		
		// 解約日
		StringBuilder sb = new StringBuilder();
		sb.append(bean.sendMessageString(KKW02537SFConst.DSL_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW02537SFConst.DSL_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW02537SFConst.DSL_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(KKW02537SFConst.DSL_YMD, X31CWebConst.DATABEAN_SET_VALUE, sb.toString());
		
/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
//		// ■関連チェック
//		// 解約日が運用日より過去日であった場合
//		if(!checkPastDateDslYmd(bean))
//		{
//			// 画面遷移
//			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02540);
//			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02540);
//			return true;
//		}
/* ++++++++++ v5.00.00 変更終了 ++++++++++ */
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0497");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0497_KKSV0497OPDBMapper mapper = new KKSV0497_KKSV0497OPDBMapper();
		mapper.setKKSV049701SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049702SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049703SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049704SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049705SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049706SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049707SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049708SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049709SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049710SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV0497WORK01(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// ■ インフォメーションメッセージ設定
		// メッセージエリアにインフォメーションメッセージを表示する。
		// EKB0370--I：＜＜以下の内容で%1%を行います。よろしいですか？＞＞
		JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の解約"});
		
		// ■ 警告メッセージ設定
		// 運用日＋未来日許容期間を求める
		int future_day_prd = Integer.parseInt(bean.sendMessageString(KKW02537SFConst.FUTURE_DAY_PRD, X31CWebConst.DATABEAN_GET_VALUE));
		String ope_date_future_day_prd = JPCDateUtil.addDay(ope_date, future_day_prd);
		
		String dsl_ymd = bean.sendMessageString(KKW02537SFConst.DSL_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 入力された解約日が運用日＋未来日許容期間を超過していた場合
		if (JPCDateChecker.isFutureDate(dsl_ymd, ope_date_future_day_prd, "0"))
		{
			// メッセージエリアに警告メッセージを表示する。
			// EKB2990--Q：%1%に%2%日より未来の日付が入力されています。登録してよろしいですか？
			JCCWebCommon.setMessageInfo(this, "EKB2990--Q", new String[]{"解約日", editReplaceMessage(ope_date_future_day_prd)});
		}
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02538);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02538);
		
		return true;
	}
	
	/**
	 * 戻るボタン押下処理
	 * <br>
	 * @return boolean
	 */
	public boolean backChge()
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 顧客契約内引継ぎデータ作成
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW02537SFConst.HKTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		
		// 引継情報を設定
		JCCWebCommon.setScreenInfo(this, JCCWebCommon.getScreenId(this) + "0PJP", dataMap);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		return true;
	}
	
	/**
	 * 戻るボタン押下処理
	 * <br>
	 * @return boolean
	 */
	public boolean backDsl()
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 顧客契約内引継ぎデータ作成
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW02537SFConst.HKTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		
		// 引継情報を設定
		JCCWebCommon.setScreenInfo(this, JCCWebCommon.getScreenId(this) + "0PJP", dataMap);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		return true;
	}
	
	/**
	 * 修正ボタン押下処理
	 * <br>
	 * @return boolean
	 */
	public boolean forwardShusei()
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		String tran_div = bean.sendMessageString(KKW02537SFConst.TRAN_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 処理区分が"03"(変更)の場合
		if ("03".equals(tran_div))
		{
			// 画面遷移
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02537);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02537);
			
			return true;
		}
		// 処理区分が"04"(解約)の場合
		else if ("04".equals(tran_div))
		{
			// 画面遷移
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02540);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02540);
			
			return true;
		}
		// 処理区分が"05"(回復)または"06"(予約取消)の場合
		else if ("05".equals(tran_div) || "06".equals(tran_div))
		{
			// 顧客契約内引継ぎデータ作成
			HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW02537SFConst.HKTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
			
			// 引継情報を設定
			JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW02301 + "0PJP", dataMap);
			
			// 画面遷移
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02301);
			
			return true;
		}
		
		return true;
	}
	
	/**
	 * 確定ボタン押下処理
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean forwardFix() throws Exception
	{
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// オンライン運用日付取得
		String ope_date = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW02537SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, ope_date);
		
		// オンライン運用日付取得
		String ope_date_time_stamp = JCCWebCommon.getOpeDateTimeStamp(this, null);
		bean.sendMessageString(KKW02537SFConst.OPE_DATE_DTM, X31CWebConst.DATABEAN_SET_VALUE, ope_date_time_stamp);
		
		// ■関連チェック
		String tran_div = bean.sendMessageString(KKW02537SFConst.TRAN_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		
/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
//		// 処理区分が"03"(変更)の場合
//		if ("03".equals(tran_div))
//		{
//			// 変更日が運用日より過去日であった場合
//			if(!checkPastDateChgYmd(bean))
//			{
//				// 画面遷移
//				commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02538);
//				commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02538);
//				return true;
//			}
//		}
//		// 処理区分が"04"(解約)の場合
//		else if ("04".equals(tran_div))
//		{
//			// 解約日が運用日より過去日であった場合
//			if(!checkPastDateDslYmd(bean))
//			{
//				// 画面遷移
//				commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02538);
//				commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02538);
//				return true;
//			}
//		}
/* ++++++++++ v5.00.00 変更終了 ++++++++++ */
		// 処理区分が"05"(回復)の場合
		if ("05".equals(tran_div))
		{
			// 解約日＋回復可能期間を求める
			int kaihk_psb_prd = Integer.parseInt(bean.sendMessageString(KKW02537SFConst.KAIHK_PSB_PRD, X31CWebConst.DATABEAN_GET_VALUE));
			String dsl_ymd = bean.sendMessageString(KKW02537SFConst.DSL_YMD, X31CWebConst.DATABEAN_GET_VALUE);
			
			String dsl_ymd_kaihk_psb_prd = JPCDateUtil.addDay(dsl_ymd, kaihk_psb_prd);
			
			// 運用日が解約日＋回復可能期間を超過していた場合
			if (JPCDateChecker.isFutureDate(ope_date, dsl_ymd_kaihk_psb_prd, "0"))
			{
				// メッセージエリアにエラーメッセージを表示する。
				// EKB3050-KW：回復可能期間を過ぎています。回復できません。
				JCCWebCommon.setMessageInfo(this, "EKB3050-KW");
				
				// 画面遷移
				commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02538);
				commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02538);
				return true;
			}
		}
		
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0497");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0497_KKSV0497OPDBMapper mapper = new KKSV0497_KKSV0497OPDBMapper();
		mapper.setKKSV049701SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049702SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049703SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049704SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049705SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049706SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049707SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049708SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049709SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049710SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049711SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV0497WORK01(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// ■ インフォメーションメッセージ設定
		// 処理区分が"03"(変更)の場合
		if ("03".equals(tran_div))
		{
			// メッセージエリアにインフォメーションメッセージを表示する。
			// EKB9360--I：＜＜%1%が完了しました。＞＞
			JCCWebCommon.setMessageInfo(this, "EKB9360--I", new String[]{"ＮＨＫ団体一括支払の変更"});
		}
		// 処理区分が"04"(解約)の場合
		else if ("04".equals(tran_div))
		{
			// メッセージエリアにインフォメーションメッセージを表示する。
			// EKB9360--I：＜＜%1%が完了しました。＞＞
			JCCWebCommon.setMessageInfo(this, "EKB9360--I", new String[]{"ＮＨＫ団体一括支払の解約"});
		}
		// 処理区分が"05"(回復)の場合
		else if ("05".equals(tran_div))
		{
			// メッセージエリアにインフォメーションメッセージを表示する。
			// EKB9360--I：＜＜%1%が完了しました。＞＞
			JCCWebCommon.setMessageInfo(this, "EKB9360--I", new String[]{"ＮＨＫ団体一括支払の回復"});
		}
		// 処理区分が"06"(予約取消)の場合
		else if ("06".equals(tran_div))
		{
			// メッセージエリアにインフォメーションメッセージを表示する。
			// EKB9360--I：＜＜%1%が完了しました。＞＞
			JCCWebCommon.setMessageInfo(this, "EKB9360--I", new String[]{"ＮＨＫ団体一括支払の予約取消"});
		}
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02539);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02539);
		
		return true;
	}
	
	/**
	 * 一覧照会へボタン押下処理
	 * <br>
	 * @return boolean
	 */
	public boolean forwardFin()
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 顧客契約内引継ぎデータ作成
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW02537SFConst.HKTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		
		// 引継情報を設定
		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW02301 + "0PJP", dataMap);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02301);
		
		return true;
	}
	
	/**
	 * 変更日の過去日チェックを行います。
	 * <br>
	 * エラーの場合、エラーメッセージを設定し、falseを返却する。
	 * 
	 * @param bean
	 * @return 処理の成否
	 */
	private boolean checkPastDateChgYmd(X31SDataBeanAccess bean)
	{
		
		// 運用日
		String ope_date = bean.sendMessageString(KKW02537SFConst.OPE_DATE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 変更日
		String chg_ymd = bean.sendMessageString(KKW02537SFConst.CHG_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 変更日が運用日より過去日であった場合
		if (JPCDateChecker.isPastDate(chg_ymd, ope_date, "0"))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB0690-NW：%1%には運用日より%2%の日付を入力できません。
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"変更日", "過去"}, "chg_ymd_year");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"変更日", "過去"}, "chg_ymd_mon");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"変更日", "過去"}, "chg_ymd_day");
			return false;
		}
		
		return true;
	}
	
	/**
	 * 解約日の過去日チェックを行います。
	 * <br>
	 * エラーの場合、エラーメッセージを設定し、falseを返却する。
	 * 
	 * @param bean
	 * @return 処理の成否
	 */
	private boolean checkPastDateDslYmd(X31SDataBeanAccess bean)
	{
		
		// 運用日
		String ope_date = bean.sendMessageString(KKW02537SFConst.OPE_DATE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 解約日
		String dsl_ymd = bean.sendMessageString(KKW02537SFConst.DSL_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 解約日が運用日より過去日であった場合
		if (JPCDateChecker.isPastDate(dsl_ymd, ope_date, "0"))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB0690-NW：%1%には運用日より%2%の日付を入力できません。
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"解約日", "過去"}, "dsl_ymd_year");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"解約日", "過去"}, "dsl_ymd_mon");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"解約日", "過去"}, "dsl_ymd_day");
			return false;
		}
		
		return true;
	}
	
	/**
	 * 引数に指定した年月日を警告メッセージに出力するための置換文字列に編集します。
	 * 
	 * @param ymd
	 * @return yyyy年mm月dd
	 */
	private String editReplaceMessage(String ymd)
	{
		String yyyy = JPCEditString.toYearFromYmd(ymd);
		String mm = JPCEditString.toMonthFromYmd(ymd);
		String dd = JPCEditString.toDayFromYmd(ymd);
		
		return yyyy + "年" + mm + "月" + dd;
	}
	
	/**	
	 * <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;	
	}
}
