/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW21201SFLogic
*   ソースファイル名：KKW21201SFLogic.java
*   作成者          ：FJ）富士通
*   日付            ：2014年10月01日
*＜機能概要＞
*   NHK団体一括支払更新・照会画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v11.00.00   2014/10/01   FJ）中野    新規作成（ANK-2248-00-00）
*   v58.00.00   2022/09/16   FJ）謝      【ANK-3846-18-00】【クレカ】クリアパス→ペイジェント移行／各種ボタンの廃止・非活性の調整
*
**********************************************************************/
package eo.web.webview.KKW21201SF;

import java.text.ParseException;
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.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.KKW00838SF.KKW00838SFConst;
import eo.web.webview.KKW01601SF.KKW01601SFConst;
import eo.web.webview.KKW03301SF.KKW03301SFConst;
import eo.web.webview.common.JCCMessageCache;
import eo.web.webview.common.JCCScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0798_KKSV0798OPDBMapper;
import eo.web.webview.mapping.KKSV0799_KKSV0799OPDBMapper;

/**
 * KKW21201のビューロジックです。<p>
 * <BR>
 * @author 富士通
 */
public class KKW21201SFLogic  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,
		JKKCommonConst.HKTGI_IDO_RSN_MEMO,
		JKKCommonConst.HKTGI_OP_SVC_KEI_NO,
		JKKCommonConst.HKTGI_SEIKY_KEI_NO,
		JKKCommonConst.HKTGI_SEIOPSVC_KEI_NO,
		JKKCommonConst.HKTGI_UPD_DIV,
		JKKCommonConst.HKTGI_NHK_DNTIKTKEI_TG_FLG
	};

	/**
	 * "登録更新"文字列
	 */
	private static final String SMODE_UPD = "0";
	/**
	 * "加入者コード変更"文字列
	 */
	private static final String SMODE_CHG = "1";
	/**
	 * "追加"文字列
	 */
	private static final String ADD = "01";

	/**
	 * "再利用"文字列
	 */
	private static final String REU = "02";

	/**
	 * "更新"文字列
	 */
	private static final String UPD = "03";

	/**
	 * "解約"文字列
	 */
	private static final String DSL = "04";
	
	/**
	 * 初期表示処理です。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	public boolean initKkw21201() throws Exception
	{
		
		// 画面情報を取得し、サービスフォームBeanに設定する
		HashMap<String, Object> parameterMap = JCCWebCommon.getScreenInfo(this);
		
		// サービスフォームBeanのアクセスクラス取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
        
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
        
		// 引継情報を取得
		X31SDataBeanAccessArray custKeiHktgiList = serviceBean.getDataBeanArray(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInf = custKeiHktgiList.getDataBean(0);
		      
		// 運用日の取得
		String unyo_ymd = JCCWebCommon.getOpeDate(this, null);
		serviceBean.sendMessageString(KKW21201SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, unyo_ymd);
		
		// ＳＹＳＩＤ
		String sysid = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SYSID, X31CWebConst.DATABEAN_GET_VALUE);
		serviceBean.sendMessageString(KKW21201SFConst.SYSID, X31CWebConst.DATABEAN_SET_VALUE, sysid);
        
		// サービス契約番号
		String svc_kei_no = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		serviceBean.sendMessageString(KKW21201SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svc_kei_no);
        
		// 請求サービス契約番号
		String seiky_kei_no = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		serviceBean.sendMessageString(KKW21201SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiky_kei_no);
		serviceBean.sendMessageString(KKW21201SFConst.SAKI_SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiky_kei_no);
        
		// 請求オプションサービス契約番号
		String seiopsvc_kei_no = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SEIOPSVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		serviceBean.sendMessageString(KKW21201SFConst.SEIOPSVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiopsvc_kei_no);
		serviceBean.sendMessageString(KKW21201SFConst.SAKI_OP_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiopsvc_kei_no);
		
		// 異動区分
		String ido_div = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_IDO_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		serviceBean.sendMessageString(KKW21201SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, ido_div);
// ANK-3846-18-00 ADD START
		// 異動理由コード
		String idoRsnCd = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_IDO_RSN_CD, X31CWebConst.DATABEAN_GET_VALUE);
		serviceBean.sendMessageString(KKW21201SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_SET_VALUE, idoRsnCd);
// ANK-3846-18-00 ADD END
		
		// ＮＨＫ団体一括契約対象フラグ値
		String nhk_dntiktkei_tg_flg = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_NHK_DNTIKTKEI_TG_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		serviceBean.sendMessageString(KKW21201SFConst.NHK_DNTIKTKEI_TG_FLG, X31CWebConst.DATABEAN_SET_VALUE, nhk_dntiktkei_tg_flg);
		
		// 更新区分
		String upd_div = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_UPD_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		serviceBean.sendMessageString(KKW21201SFConst.UPD_DIV, X31CWebConst.DATABEAN_SET_VALUE, upd_div);
		
		// 更新区分プルダウン初期値設定
		X31SDataBeanAccessArray  updDivlist = serviceBean.getDataBeanArray(KKW21201SFConst.UPD_DIV_LIST);
		updDivlist.clearArray();
		
		X31SDataBeanAccess upddivbean = updDivlist.addDataBean();
		
		// 追加の場合
		if (ADD.equals(upd_div))
		{
			upddivbean.sendMessageString(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, ADD);
			upddivbean.sendMessageString(KKW21201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "1.追加　");
			upddivbean.sendMessageString(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, REU);
			upddivbean.sendMessageString(KKW21201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "2.再利用");
			// 選択更新区分
			serviceBean.sendMessageString(KKW21201SFConst.CHOICE_UPD_DIV, X31CWebConst.DATABEAN_SET_VALUE, upd_div);
		}
		else
		{
			upddivbean.sendMessageString(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, UPD);
			upddivbean.sendMessageString(KKW21201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "3.変更　");
			upddivbean.sendMessageString(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, DSL);
			upddivbean.sendMessageString(KKW21201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "4.解約　");
			// 選択更新区分
			serviceBean.sendMessageString(KKW21201SFConst.CHOICE_UPD_DIV, X31CWebConst.DATABEAN_SET_VALUE, upd_div);
		}
		setComboIndex(KKW21201SFConst.UPD_DIV_LIST, KKW21201SFConst.SELECT_INDEX_01, "0");
		setComboIndex(KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, "0");
		
		setSelectComboData(KKW21201SFConst.UPD_DIV_LIST,
				KKW21201SFConst.SELECT_INDEX_01,
				KKW21201SFConst.CD_DIV_CD_01,
				KKW21201SFConst.CD_DIV_NM_01,
				KKW21201SFConst.CD_DIV_CD_LIST_01,
				KKW21201SFConst.CD_DIV_NM_LIST_01);
		
		// 各プルダウンリスト、NHK団体一括情報取得を取得する
		if(!callServiceKKSV0798(serviceBean))
		{
			// 自画面へ遷移する
			setMyScreen(commonBean);
			return true;
		}
		
		return true;
	}
	
	/**
	 * 処理区分変更時の処理
	 * 
	 * @return boolean
	 * @throws Exception
	 */
	public boolean changeUpdDiv() throws Exception 
	{
		HashMap<String, Object> paramMap  = null;
		HashMap<String, Object> inputMap  = null;
		HashMap<String, Object> outputMap = null;
		
		
		// サービスフォームBeanのアクセスクラス取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
        
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
		
		serviceBean.sendMessageString(KKW21201SFConst.S_MODE, X31CWebConst.DATABEAN_SET_VALUE, SMODE_CHG);
		
		// 選択した更新区分を取得
		String updDiv = getSelectComboData(serviceBean, KKW21201SFConst.UPD_DIV_LIST, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_CD_LIST_01);
		serviceBean.sendMessageString(KKW21201SFConst.CHOICE_UPD_DIV, X31CWebConst.DATABEAN_SET_VALUE, updDiv);
		
		// 各プルダウンリスト、NHK団体一括情報取得を取得する
		if(!callServiceKKSV0798(serviceBean))
		{
			// 自画面へ遷移する
			setMyScreen(commonBean);
			return true;
		}
		
		if (REU.equals(updDiv) || UPD.equals(updDiv))
		{
			// NHK外部連携契約コードプルダウンチェック
			X31SDataBeanAccessArray rnkiKei =  serviceBean.getDataBeanArray(KKW21201SFConst.RNKI_KEI);
			X31SDataBeanAccess rnkiKeiInf = rnkiKei.getDataBean(0);
			
			// 選択したNHK外部連携契約コードを取得
			String nhk_out_rnki_kei_cd = getSelectComboData(serviceBean, KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_NM_LIST_01);
			int length = (Integer)rnkiKeiInf.sendMessage(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
			if (length == 1)
			{
				// メッセージエリアにエラーメッセージを表示する。
				// EKBE168-KW：%1%の指定に誤りがあります。
				JCCWebCommon.setMessageInfo(this, "EKBE168-KW", new String[]{"加入者コード"}, "rnki_kei");
				// 自画面へ遷移する
				setMyScreen(commonBean);
				return true;
			}
		}
		
		// 自画面へ遷移する
		setMyScreen(commonBean);
		
		return true;
	}
	
	
	/**
	 * 更新確認ボタン押下時
	 * <p>
	 * </p>
	 * @return
	 */
	public boolean forwardUpdCfm() throws Exception
	{
		HashMap<String, Object> paramMap  = null;
		HashMap<String, Object> inputMap  = null;
		HashMap<String, Object> outputMap = null;
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 選択した処理区分を取得
		String updDiv = getSelectComboData(bean, KKW21201SFConst.UPD_DIV_LIST, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_CD_LIST_01);
		bean.sendMessageString(KKW21201SFConst.CHOICE_UPD_DIV, X31CWebConst.DATABEAN_SET_VALUE, updDiv);
		
		// 遷移モード
		bean.sendMessageString(KKW21201SFConst.S_MODE, X31CWebConst.DATABEAN_SET_VALUE, SMODE_UPD);
		
		if (REU.equals(updDiv) || UPD.equals(updDiv))
		{
			// 選択したNHK外部連携契約コードを取得
			String nhk_out_rnki_kei_cd = getSelectComboData(bean, KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_NM_LIST_01);
			bean.sendMessageString(KKW21201SFConst.NHK_OUT_RNKI_KEI_CD, X31CWebConst.DATABEAN_SET_VALUE, nhk_out_rnki_kei_cd);
			
			// 初期設定した請求契約番/号請求オプションサービス契約番号を取得
			String kei_no = getSelectComboData(bean, KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_CD_LIST_01);
			// 請求契約番号
			bean.sendMessageString(KKW21201SFConst.MOTO_SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, "");
			// 請求オプションサービス契約番号
			bean.sendMessageString(KKW21201SFConst.MOTO_OP_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, "");
			
			if (kei_no !=null && !"".equals(kei_no))
			{
				String[] buf = kei_no.split("/");
				// 請求契約番号
				String seiky_kei_no = buf[0];
				// 請求オプションサービス契約番号
				String seiopsvc_kei_no = buf[1];
				// 請求契約番号
				bean.sendMessageString(KKW21201SFConst.MOTO_SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiky_kei_no);
				// 請求オプションサービス契約番号
				bean.sendMessageString(KKW21201SFConst.MOTO_OP_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiopsvc_kei_no);
			}
		}
		
		// 選択した契約内容を取得
		String kei_naiyo = getSelectComboData(bean, KKW21201SFConst.KEI_NAIYO, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_NM_LIST_01);
		String nhk_grp_ikt_pay_cycle_cd = getSelectComboData(bean, KKW21201SFConst.KEI_NAIYO, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_CD_LIST_01);
		if (!"".equals(nhk_grp_ikt_pay_cycle_cd))
		{
			bean.sendMessageString(KKW21201SFConst.KEI_NAIYO_DISP, X31CWebConst.DATABEAN_SET_VALUE, kei_naiyo);
			bean.sendMessageString(KKW21201SFConst.NHK_GRP_IKT_PAY_CYCLE_CD, X31CWebConst.DATABEAN_SET_VALUE, nhk_grp_ikt_pay_cycle_cd);
		}
		
		if (REU.equals(updDiv) || UPD.equals(updDiv))
		{
			// NHK外部連携契約コードプルダウンチェック
			X31SDataBeanAccessArray rnkiKei =  bean.getDataBeanArray(KKW21201SFConst.RNKI_KEI);
			X31SDataBeanAccess rnkiKeiInf = rnkiKei.getDataBean(0);
			
			// 選択したNHK外部連携契約コードを取得
			String nhk_out_rnki_kei_cd = getSelectComboData(bean, KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_NM_LIST_01);
			int length = (Integer)rnkiKeiInf.sendMessage(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
			if (length == 1 || "".equals(nhk_out_rnki_kei_cd))
			{
				if (UPD.equals(updDiv))
				{
					// メッセージエリアにエラーメッセージを表示する。
					// EKB0010-TW：%1%の指定に誤りがあります。
					JCCWebCommon.setMessageInfo(this, "EKB0010-TW", new String[]{"加入者コード"}, "rnki_kei");
				}
				else if (length == 1)
				{
					// メッセージエリアにエラーメッセージを表示する。
					// EKBE168-KW：%1%の指定に誤りがあります。
					JCCWebCommon.setMessageInfo(this, "EKBE168-KW", new String[]{"加入者コード"}, "rnki_kei");
				}
				else
				{
					// メッセージエリアにエラーメッセージを表示する。
					// EKB0010-TW：%1%の指定に誤りがあります。
					JCCWebCommon.setMessageInfo(this, "EKB0010-TW", new String[]{"加入者コード"}, "rnki_kei");
				}
				// 共有フォームBean設定（遷移先画面）
				X31SDataBeanAccess commonBean = super.getCommonInfoBean();
				// 自画面へ遷移する
				setMyScreen(commonBean);
				return true;
			}
		}
		
		// ■関連チェック
		if (ADD.equals(updDiv) || REU.equals(updDiv))
		{
			if(!checkNextEvenMonth(bean) || !checkFutureDate(bean))
			{
				// 共有フォームBean設定（遷移先画面）
				X31SDataBeanAccess commonBean = super.getCommonInfoBean();
				// 自画面へ遷移する
				setMyScreen(commonBean);
				return true;
			}
		}
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		paramMap  = new HashMap<String, Object>();
		inputMap  = new HashMap<String, Object>();
		outputMap = new HashMap<String, Object>();
		
		// 更新区分名称
		String updDivNm = getSelectComboData(bean, KKW21201SFConst.UPD_DIV_LIST, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_NM_LIST_01);
		bean.sendMessageString(KKW21201SFConst.UPD_DIV_DISP, X31CWebConst.DATABEAN_SET_VALUE, updDivNm);
		
		// 契約日（年）
		String kei_ymd_year = bean.sendMessageString(KKW21201SFConst.KEI_YMD_YEAR , X31CWebConst.DATABEAN_GET_VALUE);
		// 契約日（月）
		String kei_ymd_mon = bean.sendMessageString(KKW21201SFConst.KEI_YMD_MON , X31CWebConst.DATABEAN_GET_VALUE);
		// 契約日（日）
		String kei_ymd_day = bean.sendMessageString(KKW21201SFConst.KEI_YMD_DAY , X31CWebConst.DATABEAN_GET_VALUE);
		// NHK団体一括契約NHK締結年月日
		bean.sendMessageString(KKW21201SFConst.NHK_DNTIKTKEI_NHK_CNC_YMD , X31CWebConst.DATABEAN_SET_VALUE, kei_ymd_year + kei_ymd_mon + kei_ymd_day);
		// 契約期間（年）
		String kei_prd_year = bean.sendMessageString(KKW21201SFConst.KEI_PRD_YEAR , X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（月）
		String kei_prd_mon = bean.sendMessageString(KKW21201SFConst.KEI_PRD_MON , X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（日）
		String kei_prd_day = bean.sendMessageString(KKW21201SFConst.KEI_PRD_DAY , X31CWebConst.DATABEAN_GET_VALUE);
		// サービス利用開始希望年月日
		bean.sendMessageString(KKW21201SFConst.SEIOPSVC_USE_STA_KIBO_YMD , X31CWebConst.DATABEAN_SET_VALUE, kei_prd_year + kei_prd_mon + kei_prd_day);
		// 初回請求年月（年）
		String chrg_sta_ym_year = bean.sendMessageString(KKW21201SFConst.KEI_PRD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		// 初回請求年月（月）
		String chrg_sta_ym_mon = bean.sendMessageString(KKW21201SFConst.KEI_PRD_MON , X31CWebConst.DATABEAN_GET_VALUE);
		// NHK団体一括契約初回請求年月日
		bean.sendMessageString(KKW21201SFConst.NHK_DNTIKTKEI_FIRST_SEIYMD , X31CWebConst.DATABEAN_SET_VALUE, chrg_sta_ym_year + chrg_sta_ym_mon + "01");
		// ユースケースID格納用マップを生成。
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0799");
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "KKSV0799OP");
			
		mappingForDB_BP_KKSV0799_SET(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		  	
		// サービス呼出処理
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// 共有フォームBean設定（遷移先画面）
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		HashMap<String, Object> errMap = (HashMap<String, Object>) outputMap.get("KKSV0799CC");
		if (errMap != null){
			// サーバーチェックのエラーを設定します。
			if(!isServerCheckMessage(outputMap, JKKCommonConst.FUNC_CODE_2, errMap, "NHK団体一括支払更新・照会"))
			{
				// 自画面へ遷移する
				setMyScreen(commonBean);
				return true;
			}
		}
		
		// 自画面に表示するメッセージを設定する。
		if (ADD.equals(updDiv))
		{
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の追加"});
		}
		else if (REU.equals(updDiv))
		{
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の再利用"});
		}
		else if (UPD.equals(updDiv))
		{
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の変更"});
		}
		else if (DSL.equals(updDiv))
		{
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の解約"});
		}
		
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW21202);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW21202);
	
		return true;
	}
	
	/**
	 * 確定ボタン押下時
	 * <p>
	 * </p>
	 * @return
	 */
	public boolean forwardFix() throws Exception 
	{
		// サービスフォームBeanのアクセスクラス取得
		HashMap<String, Object> paramMap  = null;
		HashMap<String, Object> inputMap  = null;
		HashMap<String, Object> outputMap = null;
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 選択した処理区分を取得
		String updDiv = getSelectComboData(bean, KKW21201SFConst.UPD_DIV_LIST, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_CD_LIST_01);
		bean.sendMessageString(KKW21201SFConst.CHOICE_UPD_DIV, X31CWebConst.DATABEAN_SET_VALUE, updDiv);
		
		// 遷移モード
		bean.sendMessageString(KKW21201SFConst.S_MODE, X31CWebConst.DATABEAN_SET_VALUE, SMODE_UPD);
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		paramMap  = new HashMap<String, Object>();
		inputMap  = new HashMap<String, Object>();
		outputMap = new HashMap<String, Object>();
		
		// ユースケースID格納用マップを生成。
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0799");
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "KKSV0799OP");
			
		mappingForDB_BP_KKSV0799_SET(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		
		// サービス呼出処理
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		} 

		// 自画面に表示するメッセージを設定する。
		if (ADD.equals(updDiv))
		{
			JCCWebCommon.setMessageInfo(this, "EKB4390--I", new String[]{"ＮＨＫ団体一括支払の追加"});
		}
		else if (REU.equals(updDiv))
		{
			JCCWebCommon.setMessageInfo(this, "EKB4390--I", new String[]{"ＮＨＫ団体一括支払の再利用"});
		}
		else if (UPD.equals(updDiv))
		{
			JCCWebCommon.setMessageInfo(this, "EKB4390--I", new String[]{"ＮＨＫ団体一括支払の変更"});
		}
		else if (DSL.equals(updDiv))
		{
			JCCWebCommon.setMessageInfo(this, "EKB4390--I", new String[]{"ＮＨＫ団体一括支払の解約"});
		}
		
		// 共有フォームBean設定（遷移先画面）
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW21203);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW21203);
		
		return true;
	}
	
	/**
	 * 修正ボタン押下時
	 * <p>
	 * </p>
	 * @return
	 */
	public boolean forwardShusei()
	{
		
		// 共有フォームBean設定（遷移先画面）
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 選択した更新区分を取得
		String updDiv = getSelectComboData(bean, KKW21201SFConst.UPD_DIV_LIST, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_CD_LIST_01);
		bean.sendMessageString(KKW21201SFConst.CHOICE_UPD_DIV, X31CWebConst.DATABEAN_SET_VALUE, updDiv);
		
		// 契約内容プルダウン初期値設定
		X31SDataBeanAccessArray keiNaiyo =  bean.getDataBeanArray(KKW21201SFConst.KEI_NAIYO);
		X31SDataBeanAccess keiNaiyoInf = keiNaiyo.getDataBean(0);
		
		int length = (Integer)keiNaiyoInf.sendMessage(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
		if (length > 0)
		{
			
			setSelectComboData(KKW21201SFConst.KEI_NAIYO,
					KKW21201SFConst.SELECT_INDEX_01,
					KKW21201SFConst.CD_DIV_CD_01,
					KKW21201SFConst.CD_DIV_NM_01,
					KKW21201SFConst.CD_DIV_CD_LIST_01,
					KKW21201SFConst.CD_DIV_NM_LIST_01);
		}
			
		if (!ADD.equals(updDiv))
		{
			// NHK団体一括支払サイクルコード
			String nhk_grp_ikt_pay_cycle_cd = bean.sendMessageString(KKW21201SFConst.NHK_GRP_IKT_PAY_CYCLE_CD, X31CWebConst.DATABEAN_GET_VALUE);
			
			setComboIndex(KKW21201SFConst.KEI_NAIYO, KKW21201SFConst.SELECT_INDEX_01, "0");
			if (length > 0)
			{
				for(int i = 0; i <  length; i++)
				{
					String cd_div = keiNaiyoInf.sendMessageString(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
					String cd_nam = keiNaiyoInf.sendMessageString(KKW21201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
					if (nhk_grp_ikt_pay_cycle_cd.equals(cd_div))
					{
						// 契約内容に初期値を設定
						setComboIndex(KKW21201SFConst.KEI_NAIYO, KKW21201SFConst.SELECT_INDEX_01, String.valueOf(i));
						bean.sendMessageString(KKW21201SFConst.KEI_NAIYO_DISP, X31CWebConst.DATABEAN_SET_VALUE,  cd_nam);
					}
				}
			}
			// NHK外部連携契約コードプルダウン初期値設定
			X31SDataBeanAccessArray rnkiKei =  bean.getDataBeanArray(KKW21201SFConst.RNKI_KEI);
			X31SDataBeanAccess rnkiKeiInf = rnkiKei.getDataBean(0);
			
			length = (Integer)rnkiKeiInf.sendMessage(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
			if (length > 0)
			{
				// NHK外部連携契約コード
				setComboIndex(KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, "0");
				
				setSelectComboData(KKW21201SFConst.RNKI_KEI,
						KKW21201SFConst.SELECT_INDEX_01,
						KKW21201SFConst.CD_DIV_CD_01,
						KKW21201SFConst.CD_DIV_NM_01,
						KKW21201SFConst.CD_DIV_CD_LIST_01,
						KKW21201SFConst.CD_DIV_NM_LIST_01);
			}
			
			// NHK外部連携契約コード
			String nhk_out_rnki_kei_cd = bean.sendMessageString(KKW21201SFConst.NHK_OUT_RNKI_KEI_CD, X31CWebConst.DATABEAN_GET_VALUE);
			
			setComboIndex(KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, "0");
			if (!"".equals(nhk_out_rnki_kei_cd))
			{
				if (length > 0)
				{
					for(int i = 0; i <  length; i++)
					{
						String cd_div = rnkiKeiInf.sendMessageString(KKW21201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
						if (nhk_out_rnki_kei_cd.equals(cd_div))
						{
							// NHK外部連携契約コードに初期値を設定
							setComboIndex(KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, String.valueOf(i));
						}
					}
				}
			}
		}
		
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW21201);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW21201);
		
		return true;
		
	}
	
	/**
	 * 閉じるボタン押下時
	 * <p>
	 * </p>
	 * @return
	 */
	public boolean close() throws Exception 
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 次画面への引継情報を設定
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);

		// 次画面への引継情報を設定
		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW01601, dataMap);
		
		// モーダル用反映画面へ画面遷移
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_ID_CCW00105);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_NAME_CCW00105);
		
		return true;
	
	}
	
	/**
	 * 画面初期表示時の取得処理を行います。
	 * <br>
	 * @param serviceBean 設定する画面のBean
	 * 
	 * @return boolean サービス呼び出し結果
	 * @throws Exception
	 */
	private boolean callServiceKKSV0798(X31SDataBeanAccess serviceBean) throws Exception
	{
		// マッピングクラスに渡すために配列にする
		X31SDataBeanAccess[] paramBean = {serviceBean};
		
		// 検索処理のユースケースID格納用マップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0798");
		
		// データBeanとBPをマッピングするインスタンスを生成
		KKSV0798_KKSV0798OPDBMapper mapper = new KKSV0798_KKSV0798OPDBMapper();
		
		// 共通情報の設定
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		mapper.setKKSV079801CC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);// NHK団体一括情報取得CC
		
		// サービスの呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// メッセージ定義ファイルを読み込む
		JCCMessageCache.setMessageCache();
		
		// サービス結果の転記
		mapper.getKKSV079801CC(paramBean, outputMap);
		
		// 初期値を設定する
		setInitData();
		
		return true;
	}
	
	/**
	 * 初期値設定処理
	 * 
	 */
	private void setInitData() throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 選択した更新区分を取得
		String updDiv = getSelectComboData(bean, KKW21201SFConst.UPD_DIV_LIST, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_CD_LIST_01);
		bean.sendMessageString(KKW21201SFConst.CHOICE_UPD_DIV, X31CWebConst.DATABEAN_SET_VALUE, updDiv);
		
		// 契約内容プルダウン初期値設定
		X31SDataBeanAccessArray keiNaiyo =  bean.getDataBeanArray(KKW21201SFConst.KEI_NAIYO);
		X31SDataBeanAccess keiNaiyoInf = keiNaiyo.getDataBean(0);
		
		int length = (Integer)keiNaiyoInf.sendMessage(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
		if (length > 0)
		{
			
			setSelectComboData(KKW21201SFConst.KEI_NAIYO,
					KKW21201SFConst.SELECT_INDEX_01,
					KKW21201SFConst.CD_DIV_CD_01,
					KKW21201SFConst.CD_DIV_NM_01,
					KKW21201SFConst.CD_DIV_CD_LIST_01,
					KKW21201SFConst.CD_DIV_NM_LIST_01);
		}
			
		if (!ADD.equals(updDiv))
		{
			// NHK団体一括支払サイクルコード
			String nhk_grp_ikt_pay_cycle_cd = bean.sendMessageString(KKW21201SFConst.NHK_GRP_IKT_PAY_CYCLE_CD, X31CWebConst.DATABEAN_GET_VALUE);
			
			setComboIndex(KKW21201SFConst.KEI_NAIYO, KKW21201SFConst.SELECT_INDEX_01, "0");
			if (length > 0)
			{
				for(int i = 0; i <  length; i++)
				{
					String cd_div = keiNaiyoInf.sendMessageString(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
					String cd_nam = keiNaiyoInf.sendMessageString(KKW21201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
					if (nhk_grp_ikt_pay_cycle_cd.equals(cd_div))
					{
						// 契約内容に初期値を設定
						setComboIndex(KKW21201SFConst.KEI_NAIYO, KKW21201SFConst.SELECT_INDEX_01, String.valueOf(i));
						bean.sendMessageString(KKW21201SFConst.KEI_NAIYO_DISP, X31CWebConst.DATABEAN_SET_VALUE,  cd_nam);
					}
				}
			}
			// NHK外部連携契約コードプルダウン初期値設定
			X31SDataBeanAccessArray rnkiKei =  bean.getDataBeanArray(KKW21201SFConst.RNKI_KEI);
			X31SDataBeanAccess rnkiKeiInf = rnkiKei.getDataBean(0);
			
			length = (Integer)rnkiKeiInf.sendMessage(KKW21201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
			if (length > 0)
			{
				// NHK外部連携契約コード
				setComboIndex(KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, "0");
				
				setSelectComboData(KKW21201SFConst.RNKI_KEI,
						KKW21201SFConst.SELECT_INDEX_01,
						KKW21201SFConst.CD_DIV_CD_01,
						KKW21201SFConst.CD_DIV_NM_01,
						KKW21201SFConst.CD_DIV_CD_LIST_01,
						KKW21201SFConst.CD_DIV_NM_LIST_01);
			}
			
			// NHK外部連携契約コード
			String nhk_out_rnki_kei_cd = bean.sendMessageString(KKW21201SFConst.NHK_OUT_RNKI_KEI_CD, X31CWebConst.DATABEAN_GET_VALUE);
			
			setComboIndex(KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, "0");
			if (!"".equals(nhk_out_rnki_kei_cd))
			{
				if (length > 0)
				{
					for(int i = 0; i <  length; i++)
					{
						String cd_div = rnkiKeiInf.sendMessageString(KKW21201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
						if (nhk_out_rnki_kei_cd.equals(cd_div))
						{
							// NHK外部連携契約コードに初期値を設定
							setComboIndex(KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, String.valueOf(i));
						}
					}
				}
			}
		}
		
		if (REU.equals(updDiv))
		{
			// NHK外部連携契約コードに初期値を設定
			setComboIndex(KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, "0");
			// 請求オプションサービス契約番号
			bean.sendMessageString(KKW21201SFConst.SAKI_OP_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, "999999999999");
		}
		if (UPD.equals(updDiv))
		{
			// 初期設定した請求契約番/号請求オプションサービス契約番号を取得
			String kei_no = getSelectComboData(bean, KKW21201SFConst.RNKI_KEI, KKW21201SFConst.SELECT_INDEX_01, KKW21201SFConst.CD_DIV_CD_LIST_01);
			if (kei_no !=null && !"".equals(kei_no))
			{
				String[] buf = kei_no.split("/");
				// 請求契約番号
				String seiky_kei_no = buf[0];
				// 請求オプションサービス契約番号
				String seiopsvc_kei_no = buf[1];
				// 請求契約番号
				bean.sendMessageString(KKW21201SFConst.SAKI_SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiky_kei_no);
				// 請求オプションサービス契約番号
				bean.sendMessageString(KKW21201SFConst.SAKI_OP_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seiopsvc_kei_no);
			}
		}
		// 運用日
		String unyoYmd = bean.sendMessageString(KKW21201SFConst.UNYO_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		// 運用日の翌偶数月
		String nextEvenMonthDate = getNextEvenMonth(unyoYmd);
		
		// 追加、再利用の場合
		if (ADD.equals(updDiv) || REU.equals(updDiv))
		{
			// NHKお客様No
			bean.sendMessageString(KKW21201SFConst.NHK_CUST_NO, X31CWebConst.DATABEAN_SET_VALUE, "");
			// NHK外部連携契約コード
			bean.sendMessageString(KKW21201SFConst.NHK_OUT_RNKI_KEI_CD, X31CWebConst.DATABEAN_SET_VALUE, "");
			// 契約間隔
			bean.sendMessageString(KKW21201SFConst.NHK_GRP_IKT_PAY_CYCLE_CD, X31CWebConst.DATABEAN_SET_VALUE, "2");
			// 契約状態
			bean.sendMessageString(KKW21201SFConst.SEIOPSVC_KEI_STAT_NM, X31CWebConst.DATABEAN_SET_VALUE, "");
			// 契約内容にＮＨＫ代行徴収(２ヵ月)を設定
			setComboIndex(KKW21201SFConst.KEI_NAIYO, KKW21201SFConst.SELECT_INDEX_01, String.valueOf("0"));
			// 契約間隔
			bean.sendMessageString(KKW21201SFConst.NHK_GRP_IKT_PAY_CYCLE_CD, X31CWebConst.DATABEAN_SET_VALUE,  "2");
			// 契約日（年）
			bean.sendMessageString(KKW21201SFConst.KEI_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, unyoYmd.substring(0, 4));
			// 契約日（月）
			bean.sendMessageString(KKW21201SFConst.KEI_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, unyoYmd.substring(4, 6));
			// 契約日（日）
			bean.sendMessageString(KKW21201SFConst.KEI_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, unyoYmd.substring(6, 8));
			// 契約期間（年）
			bean.sendMessageString(KKW21201SFConst.KEI_PRD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, nextEvenMonthDate.substring(0, 4));
			// 契約期間（月）
			bean.sendMessageString(KKW21201SFConst.KEI_PRD_MON, X31CWebConst.DATABEAN_SET_VALUE, nextEvenMonthDate.substring(4, 6));
			// 契約期間（日）
			bean.sendMessageString(KKW21201SFConst.KEI_PRD_DAY, X31CWebConst.DATABEAN_SET_VALUE, "01");
			// 契約期間（至）
			bean.sendMessageString(KKW21201SFConst.KEI_PRD_END, X31CWebConst.DATABEAN_SET_VALUE, "");
			// 初回請求年月（年）
			bean.sendMessageString(KKW21201SFConst.CHRG_STA_YM_YEAR, X31CWebConst.DATABEAN_SET_VALUE, nextEvenMonthDate.substring(0, 4));
			// 初回請求年月（月）
			bean.sendMessageString(KKW21201SFConst.CHRG_STA_YM_MON, X31CWebConst.DATABEAN_SET_VALUE, nextEvenMonthDate.substring(4, 6));
			// 契約者住所メモ
			bean.sendMessageString(KKW21201SFConst.NHK_DNTIKTKEI_AD_MEMO, X31CWebConst.DATABEAN_SET_VALUE, "");
			// 契約者住所メモ
			bean.sendMessageString(KKW21201SFConst.NHK_DNTIKTKEI_AD_MEMO, X31CWebConst.DATABEAN_SET_VALUE, "");
			// 変更理由メモ
			bean.sendMessageString(KKW21201SFConst.NHK_DNTIKTKEI_CHRGE_MEMO, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		else
		{
			// NHKお客様No
			bean.sendMessageString(KKW21201SFConst.MOTO_NHK_CUST_NO, bean.sendMessageString(KKW21201SFConst.NHK_CUST_NO, X31CWebConst.DATABEAN_GET_VALUE));
			// NHK団体一括契約NHK締結年月日
			String nhk_dntiktkei_nhk_cnc_ymd = bean.sendMessageString(KKW21201SFConst.NHK_DNTIKTKEI_NHK_CNC_YMD, X31CWebConst.DATABEAN_GET_VALUE);
			if (!"".equals(nhk_dntiktkei_nhk_cnc_ymd))
			{
				// 契約日（年）
				bean.sendMessageString(KKW21201SFConst.KEI_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, nhk_dntiktkei_nhk_cnc_ymd.substring(0, 4));
				// 契約日（月）
				bean.sendMessageString(KKW21201SFConst.KEI_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, nhk_dntiktkei_nhk_cnc_ymd.substring(4, 6));
				// 契約日（日）
				bean.sendMessageString(KKW21201SFConst.KEI_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, nhk_dntiktkei_nhk_cnc_ymd.substring(6, 8));
			}
			// サービス利用開始希望年月日
			String seiopsvc_use_sta_kibo_ymd = bean.sendMessageString(KKW21201SFConst.SEIOPSVC_USE_STA_KIBO_YMD, X31CWebConst.DATABEAN_GET_VALUE);
			if (!"".equals(seiopsvc_use_sta_kibo_ymd))
			{
				// 契約期間（年）
				bean.sendMessageString(KKW21201SFConst.KEI_PRD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, seiopsvc_use_sta_kibo_ymd.substring(0, 4));
				// 契約期間（月）
				bean.sendMessageString(KKW21201SFConst.KEI_PRD_MON, X31CWebConst.DATABEAN_SET_VALUE, seiopsvc_use_sta_kibo_ymd.substring(4, 6));
				// 契約期間（日）
				bean.sendMessageString(KKW21201SFConst.KEI_PRD_DAY,  X31CWebConst.DATABEAN_SET_VALUE, seiopsvc_use_sta_kibo_ymd.substring(6, 8));
			}
			// 契約期間（至）
			String svc_endymd = bean.sendMessageString(KKW21201SFConst.SVC_ENDYMD, X31CWebConst.DATABEAN_GET_VALUE);
			// 契約期間（至）
			bean.sendMessageString(KKW21201SFConst.KEI_PRD_END, X31CWebConst.DATABEAN_SET_VALUE, "");
			if (!"20991231".equals(svc_endymd))
			{
				// 契約期間（至）
				bean.sendMessageString(KKW21201SFConst.KEI_PRD_END, X31CWebConst.DATABEAN_SET_VALUE, svc_endymd);
			}
			// NHK団体一括契約初回請求年月日
			String nhk_dntiktkei_first_seiymd = bean.sendMessageString(KKW21201SFConst.NHK_DNTIKTKEI_FIRST_SEIYMD, X31CWebConst.DATABEAN_GET_VALUE);
			if (!"".equals(nhk_dntiktkei_first_seiymd))
			{
				// 初回請求年月（年）
				bean.sendMessageString(KKW21201SFConst.CHRG_STA_YM_YEAR, X31CWebConst.DATABEAN_SET_VALUE, nhk_dntiktkei_first_seiymd.substring(0, 4));
				// 初回請求年月（月）
				bean.sendMessageString(KKW21201SFConst.CHRG_STA_YM_MON, X31CWebConst.DATABEAN_SET_VALUE, nhk_dntiktkei_first_seiymd.substring(4, 6));
			}
		}
	}
	
	/**
	 * コンボボックスの選択状態を設定します。
	 * @param comboItemId 対象とするコンボボックスの項目ID
	 * @param selIdxId 選択行インデックスが格納されている項目ID
	 * @param selectIndex 選択位置
	 */
	private void setComboIndex(String comboItemId, String selIdxId, String selectIndex)
	{
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess subbean = null;
		// コンボボックスのデータタイプを取得する。
		subbean = bean.getDataBeanArray(comboItemId).getDataBean(0);
		
		// インデックスを設定
		subbean.sendMessageString(selIdxId, X31CWebConst.DATABEAN_SET_VALUE, selectIndex);
	}
	
	/**
	 * コンボボックスの選択情報を転記する。
	 * 
	 * @param comboItemId 対象とするコンボボックスの項目ID
	 * @param selIdxId 選択行インデックスが格納されている項目ID
	 * @param selCodeId 選択されたコードを格納する項目ID
	 * @param selNameId 選択された名称を格納する項目ID
	 * @param cdListId  コードの選択候補リストを格納している項目ID
	 * @param nmListId  名称の選択候補リストを格納している項目ID
	 */
	private void setSelectComboData(String comboItemId, String selIdxId, String selCodeId, String selNameId, String cdListId, String nmListId)
	{
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess subbean = null;
		
		// コンボボックスのデータタイプを取得する。
		subbean = bean.getDataBeanArray(comboItemId).getDataBean(0);
		String selectedIndex = subbean.sendMessageString(selIdxId, X31CWebConst.DATABEAN_GET_VALUE);
		if (selectedIndex == null || "".equals(selectedIndex))
		{
			subbean.sendMessageString(selCodeId, X31CWebConst.DATABEAN_SET_VALUE, "");
			if(!"".equals(selNameId))
			{
				subbean.sendMessageString(selNameId, X31CWebConst.DATABEAN_SET_VALUE, "");
			}
			return;
		}
		int selIdx = Integer.valueOf(selectedIndex);
		subbean.sendMessageString(selCodeId, 
								X31CWebConst.DATABEAN_SET_VALUE, subbean.sendMessageString(cdListId, 
																							X31CWebConst.DATABEAN_GET_VALUE, selIdx));
		if(!"".equals(selNameId))
		{
			subbean.sendMessageString(selNameId, 
									X31CWebConst.DATABEAN_SET_VALUE, subbean.sendMessageString(nmListId, 
																								X31CWebConst.DATABEAN_GET_VALUE, selIdx));
		}
	}
	
	/**
	 * コンボボックスのコードを取得する。
	 * 
	 * @param bean 画面データ
	 * @param comboItemId 対象とするコンボボックスの項目ID
	 * @param selIdxId 選択行インデックスが格納されている項目ID
	 * @param selCodeId 選択されたコードを取得する項目ID
	 * @return String 選択されたコード値
	 */
	private String getSelectComboData(X31SDataBeanAccess bean, String comboItemId, String selIdxId, String selCodeId)
	{
		
		// コンボボックスのデータタイプを取得する。
		X31SDataBeanAccess subbean = bean.getDataBeanArray(comboItemId).getDataBean(0);
		String selectedIndex = subbean.sendMessageString(selIdxId, X31CWebConst.DATABEAN_GET_VALUE);
		if (selectedIndex == null || "".equals(selectedIndex))
		{
			return "";

		}
		
		int selIdx = Integer.valueOf(selectedIndex);
		
		return subbean.sendMessageString(selCodeId, X31CWebConst.DATABEAN_GET_VALUE, selIdx);
		
	}
	
	/**
	 * サービスフォームBean項目とサービス項目のマッピングを行う
	 * @param  paramBean  DataBean項目の配列
	 * @param  inputMap   上りデータマップ
	 * @param  func_code  機能コード
	 */
	private void mappingForDB_BP_KKSV0799_SET(X31SDataBeanAccess[] paramBean, HashMap<String, Object> inputMap, String func)
	{
		// DataBean-BPマッピングクラス生成
		KKSV0799_KKSV0799OPDBMapper mapper = new KKSV0799_KKSV0799OPDBMapper();

		mapper.setKKSV079901CC(paramBean, inputMap, func);

		return;
	}
	
	/**	
	 * <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;	
	}
	
	/**
	 * 自画面へ遷移します。
	 * <br>
	 * @param commoninfoBean 共有フォームBean
	 * @return なし
	 */
	private void setMyScreen(X31SDataBeanAccess commoninfoBean) 
	{
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW21201);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW21201);
	}
	
	/**
	 * 未来日チェックを行います。
	 * <br>
	 * エラーの場合、エラーメッセージを設定し、falseを返却する。
	 * 
	 * @param bean
	 * @return 処理の成否
	 */
	private boolean checkFutureDate(X31SDataBeanAccess bean)
	{
		
		
		// ■ 警告メッセージ設定
		
		// 運用日
		String ope_date = bean.sendMessageString(KKW21201SFConst.UNYO_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		// 運用日＋未来日許容期間を求める
		int future_day_prd = Integer.parseInt(bean.sendMessageString(KKW00838SFConst.FUTURE_DAY_PRD, X31CWebConst.DATABEAN_GET_VALUE));
		String ope_date_future_day_prd = JPCDateUtil.addDay(ope_date, future_day_prd);
		
		
		// 契約日（年）
		String kei_ymd_year = bean.sendMessageString(KKW21201SFConst.KEI_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約日（月）
		String kei_ymd_mon = bean.sendMessageString(KKW21201SFConst.KEI_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約日（日）
		String kei_ymd_day = bean.sendMessageString(KKW21201SFConst.KEI_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約日
		String kei_ymd = kei_ymd_year + kei_ymd_mon + kei_ymd_day;
		
		// 契約期間（年）
		String kei_prd_year = bean.sendMessageString(KKW21201SFConst.KEI_PRD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（月）
		String kei_prd_mon = bean.sendMessageString(KKW21201SFConst.KEI_PRD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（日）
		String kei_prd_day = bean.sendMessageString(KKW21201SFConst.KEI_PRD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（自）
		String kei_prd_sta_ymd = kei_prd_year + kei_prd_mon + kei_prd_day;
		
		// 初回請求年月（年）
		String chrg_sta_ym_year = bean.sendMessageString(KKW21201SFConst.CHRG_STA_YM_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		// 初回請求年月（月）
		String chrg_sta_ym_mon = bean.sendMessageString(KKW21201SFConst.CHRG_STA_YM_MON, X31CWebConst.DATABEAN_GET_VALUE);
		// 初回請求年月
		String chrg_sta_ymd = chrg_sta_ym_year + chrg_sta_ym_mon + "01";;
		
		// 入力された契約日が運用日＋未来日許容期間を超過していた場合
		if (JPCDateChecker.isFutureDate(kei_ymd, ope_date_future_day_prd, "0"))
		{
			// メッセージエリアに警告メッセージを表示する。
			// EKB2990--Q：%1%に%2%日より未来の日付が入力されています。登録してよろしいですか？
			JCCWebCommon.setMessageInfo(this, "EKB2990--Q", new String[]{"契約日", editReplaceMessage(ope_date_future_day_prd)});
		}
		
		// 入力された契約期間（自）が運用日＋未来日許容期間を超過していた場合
		if (JPCDateChecker.isFutureDate(kei_prd_sta_ymd, ope_date_future_day_prd, "0"))
		{
			// メッセージエリアに警告メッセージを表示する。
			// EKB2990--Q：%1%に%2%日より未来の日付が入力されています。登録してよろしいですか？
			JCCWebCommon.setMessageInfo(this, "EKB2990--Q", new String[]{"契約期間（自）", editReplaceMessage(ope_date_future_day_prd)});
		}
		
		// 入力された課金開始年月が運用日＋未来日許容期間を超過していた場合
		if (JPCDateChecker.isFutureDate(chrg_sta_ymd, ope_date_future_day_prd, "0"))
		{
			// メッセージエリアに警告メッセージを表示する。
			// EKB2990--Q：%1%に%2%日より未来の日付が入力されています。登録してよろしいですか？
			JCCWebCommon.setMessageInfo(this, "EKB2990--Q", new String[]{"初回請求年月", editReplaceMessage(ope_date_future_day_prd)});
		}

		
		return true;
	}
	
	/**
	 * 翌偶数月チェックを行います。
	 * <br>
	 * エラーの場合、エラーメッセージを設定し、falseを返却する。
	 * 
	 * @param bean
	 * @return 処理の成否
	 * @throws ParseException 
	 */
	private boolean checkNextEvenMonth(X31SDataBeanAccess bean) throws ParseException
	{
		
		// 契約日（年）
		String kei_ymd_year = bean.sendMessageString(KKW21201SFConst.KEI_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約日（月）
		String kei_ymd_mon = bean.sendMessageString(KKW21201SFConst.KEI_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約日（日）
		String kei_ymd_day = bean.sendMessageString(KKW21201SFConst.KEI_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約日
		String kei_ymd = kei_ymd_year + kei_ymd_mon + kei_ymd_day;
		// 契約期間（年）
		String kei_prd_year = bean.sendMessageString(KKW21201SFConst.KEI_PRD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（月）
		String kei_prd_mon = bean.sendMessageString(KKW21201SFConst.KEI_PRD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（日）
		String kei_prd_day = bean.sendMessageString(KKW21201SFConst.KEI_PRD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（自）
		String kei_prd_sta_ymd = kei_prd_year + kei_prd_mon + kei_prd_day;
		// 初回請求年月（年）
		String chrg_sta_ym_year = bean.sendMessageString(KKW21201SFConst.CHRG_STA_YM_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		// 初回請求年月（月）
		String chrg_sta_ym_mon = bean.sendMessageString(KKW21201SFConst.CHRG_STA_YM_MON, X31CWebConst.DATABEAN_GET_VALUE);
		// 課金開始年月日
		String chrg_sta_ymd = chrg_sta_ym_year + chrg_sta_ym_mon + "01";
		
		// 契約日の翌偶数月
		String kei_ymd_next_even_mon = getNextEvenMonth(kei_ymd);
		
		String yyyy = JPCEditString.toYearFromYmd(kei_prd_sta_ymd);
		String mm = JPCEditString.toMonthFromYmd(kei_prd_sta_ymd);
		String ymd = yyyy + mm + "01";
		
		boolean errchk = true;
		
		// 契約期間（自）が契約日の翌偶数月でない場合
		if (!JPCDateChecker.isEqualDate(ymd, kei_ymd_next_even_mon))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB5590-KW：%1%の指定に誤りがあります。
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"契約期間（自）"}, "kei_prd_year");
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"契約期間（自）"}, "kei_prd_mon");
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"契約期間（自）"}, "kei_prd_day");
			errchk =  false;
		}
		
		// 初回請求年月が契約日の翌偶数月でない場合
		if (!JPCDateChecker.isEqualDate(chrg_sta_ymd, kei_ymd_next_even_mon))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB5590-KW：%1%の指定に誤りがあります。
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"初回請求年月"}, "chrg_sta_ym_year");
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"初回請求年月"}, "chrg_sta_ym_mon");
			errchk =  false;
		}
		
		return errchk;
	}
	
	/**
	 * 引数に指定した日付の翌偶数月(yyyyMM01)を返します。
	 * 
	 * @param date
	 * @return 翌偶数月
	 * @throws ParseException 
	 */
	private String getNextEvenMonth(String date) throws ParseException
	{
		String yyyy = JPCEditString.toYearFromYmd(date);
		String mm = JPCEditString.toMonthFromYmd(date);
		String ymd = yyyy + mm + "01";
		
		int addMonth = ((Integer.parseInt(mm) % 2 == 0) ? 2 : 1);
		
		return JPCDateUtil.addMonth(ymd, addMonth);
	}
	
	/**
	 * 引数に指定した年月日を警告メッセージに出力するための置換文字列に編集します。
	 * 
	 * @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>メソッド説明：
	 * <dd>備考：
	 * @param outputMap
	 * @param funcCd
	 * @param errMap
	 * @param pMessage
	 * @return boolean
	 */
	@SuppressWarnings("unchecked")
	private boolean isServerCheckMessage(HashMap<String, Object> outputMap, String funcCd, HashMap<String, Object> errMap, String pMessage)
	{
		
		ArrayList messageList = (ArrayList)errMap.get("message_list");

		String errFlg = (String)errMap.get("err_flg");
		String replaceChar = "";
		String errItem = "";
		
		// if(!"W".equals(errFlg) && JKKCommonConst.FUNC_CODE_1.equals(funcCd)){
		// サーバからのエラーを設定
		if(0 < messageList.size())
		{
			for (int i = 0; i < messageList.size(); i++)
			{
				HashMap messageMap = (HashMap)messageList.get(i);
				String message = (String)messageMap.get("messageId");
				replaceChar = (String)messageMap.get("replaceCha");
				errItem = (String)messageMap.get("errItem");

				if(!"".equals(replaceChar) && !"".equals(errItem))
				{
					JCCWebCommon.setMessageInfo(this, message, replaceChar.split(","), errItem);
				}
				else if(!"".equals(replaceChar))
				{
					JCCWebCommon.setMessageInfo(this, message, replaceChar.split(","));
				}
				else if(!"".equals(errItem))
				{
					JCCWebCommon.setMessageInfo(this, message, errItem);
				}
				else
				{
					JCCWebCommon.setMessageInfo(this, message);
				}
			}
			// }
		}
		// エラーの場合画面遷移しません。
		if("E".equals(errFlg))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * Nullの場合空白を返却します。
	 * @param str 文字列
	 * @return 連結した住所コード
	 */
	private String getNullToStr(String str)
	{
		
		if(str == null)
		{
			return "";
		}
		
		
		return str.trim();
	}
	
}
