/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：顧客契約
 *	モジュール名	：KKW08605SFLogic
 *	ソースファイル名：KKW08605SFLogic.java
 *	作成者			：FJ
 *	日付			：2012年02月16日
 *＜機能概要＞
 *	サービスエリア警告マスタメンテ更新画面のビューロジッククラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v4.00.00	2012/09/10	FJ		新規作成
 *
 **********************************************************************/
package eo.web.webview.KKW08605SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW08601SF.KKW08601SFLogic;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0617_KKSV0617OPDBMapper;
import eo.web.webview.mapping.KKSV0619_KKSV0619OPDBMapper;


/**
 * <dd>クラス名：サービスエリア警告マスタメンテ更新画面のビューロジック
 * 
 * @version 4.0 2012/09/10
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW08605SFLogic extends JCCWebBusinessLogic
{
	/** 最大年月日 */
	private static final String MAX_YMD = "20991231";

	private static final String KKSV061901CC = "KKSV061901CC";

	/** ブランク付与フラグ */
	private static final boolean BLANK_ON  = true;
	/** インデックス付与フラグ */
	private static final boolean INDEX_ON  = true;

	/** プルダウン情報：自動照査チェックリスト（キー） */
	private static final String[][] PD_KEYS_AUTO_SHOSA = { { KKW08605SFConst.AUTO_SHOSA_CHECK_LIST }, { "auto_shosa_check_list" } };
	/** プルダウン情報：自動照査チェックリスト（コード） */
	private static final String[][] PD_CDS_AUTO_SHOSA  = { { KKW08605SFConst.CD_DIV_02 }, { "cd_div" } };
	/** プルダウン情報：自動照査チェックリスト（名称） */
	private static final String[][] PD_NMS_AUTO_SHOSA  = { { KKW08605SFConst.CD_DIV_NM_02 }, { "cd_div_nm" } };

	/**
	 * 更新画面初期表示処理<br>
	 * <br>
	 * @return	正常終了:true 異常修了:false
	 * @throws	Exception 
	 */
	public boolean actionInit() throws Exception
	{
		// 共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// 引継ぎデータ取得
		HashMap<String, Object> hikiMap = JCCWebCommon.getScreenInfo(this);
		ArrayList<HashMap<String, Object>> dataArray = (ArrayList<HashMap<String, Object>>)hikiMap.get(KKW08605SFConst.SVC_AREA_KKKU_HKTG_LIST);
		HashMap<String, Object> dataMap = dataArray.get(0);

		// 引継ぎ情報よりサービス提供エリア警告対象住所番号を取得する
		setString(svcFormBean, KKW08605SFConst.SVTA_KKKU_TAIAD_NO, (String)dataMap.get(KKW08605SFConst.SVTA_KKKU_TAIAD_NO_01));

		// 初期表示項目取得
		invoke(svcFormBean);

		// 初期表示画面編集
		editInitBean(svcFormBean);

		// 遷移先の設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW08605);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW08605);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}

	/**
	 * 更新確認ボタン押下処理<br>
	 * <br>
	 * @return	正常終了:true 異常修了:false
	 * @throws	Exception 
	 */
	public boolean actionAdd() throws Exception
	{
		// 共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		setBeanPulldownCd(svcFormBean, KKW08605SFConst.AUTO_SHOSA_CHECK_LIST, KKW08605SFConst.AUTO_SHOSA_CHECK_CD);

		// 機能コードを"2"でサービスを呼び出す
		invokeFix(svcFormBean, JPCModelConstant.FUNC_CD_2);

		// 画面表示用にフォームビーンを編集
		editFixBean(svcFormBean);

		// 更新確認メッセージを表示
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[] { "更新" });

		// 遷移先の設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW08606);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW08606);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}

	/**
	 * 戻るボタン押下処理<br>
	 * <br>
	 * @return	正常終了:true 異常修了:false
	 * @throws	Exception 
	 */
	public boolean actionBack()
	{
		// 共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 遷移先の指定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));

		return true;
	}

	/**
	 * 確定ボタン押下処理<br>
	 * <br>
	 * @return	正常終了:true 異常修了:false
	 * @throws	Exception 
	 */
	public boolean actionFix() throws Exception
	{
		// 共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// 機能コードを"1"でサービスを呼び出す
		invokeFix(svcFormBean, JPCModelConstant.FUNC_CD_1);

		// メッセージ表示処理
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB9360__I, new String[] { "サービスエリア警告マスタ情報の更新" });

		// 遷移先の設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW08607);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW08607);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}

	/**
	 * 修正ボタン押下処理<br>
	 * <br>
	 * @return	正常終了:true 異常修了:false
	 * @throws	Exception 
	 */
	public boolean actionShusei() throws Exception
	{
		// 共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 遷移先の設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW08605);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW08605);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}

	/**
	 * （完了画面）一覧照会ボタン押下処理<br>
	 * <br>
	 * @return	正常終了:true 異常修了:false
	 * @throws	Exception 
	 */
	public boolean actionIchiran()
	{
		// 共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// 遷移先の設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW08601);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW08601);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}


	/**
	 * サービス呼出処理（初期表示）<br>
	 * <br>
	 * @param	svcFormBean
	 * @throws	Exception 
	 */
	private void invoke(X31SDataBeanAccess svcFormBean) throws Exception
	{
		// ユースケースID格納用のHashMap
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// マッピングクラスの結果を格納するHashMap
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// サービス呼出結果を格納するHashMap
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスパラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID,   JKKCommonConst.UCID_KKSV0619);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0619OP);

		// マッピング用paramBeanセット
		X31SDataBeanAccess[] paramBean = {svcFormBean};

		// 上りマッピング(サービス項目-DataBean項目マッピング)
		KKSV0619_KKSV0619OPDBMapper mapper = new KKSV0619_KKSV0619OPDBMapper();

		// 更新画面初期表示（機能コード：３）
		mapper.setKKSV061901CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_3);

		invokeService(paramMap, inputMap, outputMap);

		mapper.getKKSV061901CC(paramBean, outputMap);

		KKW08601SFLogic.setPulldownList(
				svcFormBean,
				outputMap,
				KKSV061901CC,
				BLANK_ON,
				INDEX_ON,
				PD_KEYS_AUTO_SHOSA,
				PD_CDS_AUTO_SHOSA,
				PD_NMS_AUTO_SHOSA
		);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
	}

	/**
	 * サービス呼出処理（登録確認、確定）<br>
	 * <br>
	 * @param	svcFormBean
	 * @param	funcCd
	 */
	private void invokeFix(X31SDataBeanAccess svcFormBean, String funcCd)
	{
		// ユースケースID格納用のHashMap
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// マッピングクラスの結果を格納するHashMap
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// サービス呼出結果を格納するHashMap
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスパラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID,   JKKCommonConst.UCID_KKSV0617);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0617OP);

		// マッピング用paramBeanセット
		X31SDataBeanAccess[] paramBean = {svcFormBean};

		// 上りマッピング(サービス項目-DataBean項目マッピング)
		KKSV0617_KKSV0617OPDBMapper mapper = new KKSV0617_KKSV0617OPDBMapper();

		mapper.setJKKSvcAreaKkkuMstCC(paramBean, inputMap, funcCd);

		invokeService(paramMap, inputMap, outputMap);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
	}


	/**
	 * 初期画面表示用に編集を行う。<br>
	 * <br>
	 * @param	svcFormBean
	 */
	private void editInitBean(X31SDataBeanAccess svcFormBean)
	{
		X31SDataBeanAccessArray svcAreaKkkuList = svcFormBean.getDataBeanArray(KKW08605SFConst.SVC_AREA_KKKU_LIST);

		// データBeanアクセスクラスに対象のBeanを設定します
		X31SDataBeanAccess svcAreaKkku = svcAreaKkkuList.getDataBean(0);

		// 料金グループ名
		setString(svcFormBean, KKW08605SFConst.PRC_GRP_NM,   getString(svcAreaKkku, KKW08605SFConst.PRC_GRP_CD_NM_03));
		// 料金
		setString(svcFormBean, KKW08605SFConst.PPLAN_NM,     getString(svcAreaKkku, KKW08605SFConst.PPLAN_CD_NM_03));
		// チェック種別名
		setString(svcFormBean, KKW08605SFConst.CHECK_SBT_NM, getString(svcAreaKkku, KKW08605SFConst.CHK_SBT_NM_03));
		// 郵便番号
		setString(svcFormBean, KKW08605SFConst.PCD,          JPCUtilCommon.hyhunPcd(getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TG_PCD_03)));
		// 住所コード
		setString(svcFormBean, KKW08605SFConst.AD_CD,        JPCUtilCommon.hyhunAdCd(getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TAIAD_CD_03)));
		// 都道府県名
		setString(svcFormBean, KKW08605SFConst.STATE_NM,     getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TG_STATE_NM_03));
		// 市区町村名
		setString(svcFormBean, KKW08605SFConst.CITY_NM,      getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TG_CITY_NM_03));
		// 大字通称名
		setString(svcFormBean, KKW08605SFConst.OAZTSU_NM,    getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TG_OAZTSU_NM_03));
		// 字丁目名
		setString(svcFormBean, KKW08605SFConst.AZCHO_NM,     getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TG_AZCHO_NM_03));
		// 番地号
		setString(svcFormBean, KKW08605SFConst.BNCHIGO,      getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TG_BNCHIGO_03));

		// 自動照査チェックリスト選択
		KKW08601SFLogic.selectedPulldownIndex(
				svcFormBean,
				KKW08605SFConst.AUTO_SHOSA_CHECK_LIST,
				KKW08605SFConst.CD_DIV_02,
				KKW08605SFConst.INDEX_02,
				getString(svcAreaKkku, KKW08605SFConst.AUTO_SHOSA_CHK_TG_CD_03)
		);

		// 適用開始年月日
		setString(svcFormBean, KKW08605SFConst.TSTAYMD, JPCUtilCommon.formatDate(getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TAIAD_TSTAYMD_03)));
		// 適用終了年月日
		String tendymd = getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_TAIAD_TENDYMD_03);

		// 最大年月日でない場合は編集して各項目に設定
		if (!tendymd.isEmpty() && !MAX_YMD.equals(tendymd))
		{
			// 適用終了年月日より年を設定する
			setString(svcFormBean, KKW08605SFConst.TENDYMD_YEAR, JPCUtilCommon.toYearFromYmd(tendymd));
			// 適用終了年月日より月を設定する
			setString(svcFormBean, KKW08605SFConst.TENDYMD_MON,  JPCUtilCommon.toMonthFromYmd(tendymd));
			// 適用終了年月日より日を設定する
			setString(svcFormBean, KKW08605SFConst.TENDYMD_DAY,  JPCUtilCommon.toDayFromYmd(tendymd));
		}
		// 備考
		setString(svcFormBean, KKW08605SFConst.BIKO, getString(svcAreaKkku, KKW08605SFConst.SVTA_KKKU_RSN_MEMO_03));

		//更新年月日時分秒
		setString(svcFormBean, KKW08605SFConst.UPD_DTM, getString(svcAreaKkku, KKW08605SFConst.UPD_DTM_03));
	}

	/**
	 * 確認画面表示用に編集を行う。<br>
	 * <br>
	 * @param	svcFormBean
	 */
	private void editFixBean(X31SDataBeanAccess svcFormBean)
	{
		// 自動照査チェック名
		setString(
				svcFormBean,
				KKW08605SFConst.AUTO_SHOSA_CHECK_NM,
				getSelectedPulldownName(
						svcFormBean,
						KKW08605SFConst.AUTO_SHOSA_CHECK_LIST,
						KKW08605SFConst.INDEX_02,
						KKW08605SFConst.CD_DIV_02,
						KKW08605SFConst.CD_DIV_NM_02
				)
		);

		// 適用終了年月日
		setString(
				svcFormBean,
				KKW08605SFConst.TENDYMD,
				JPCUtilCommon.formatDate(
						JPCUtilCommon.concatYmd(
								getString(svcFormBean, KKW08605SFConst.TENDYMD_YEAR), 
								getString(svcFormBean, KKW08605SFConst.TENDYMD_MON), 
								getString(svcFormBean, KKW08605SFConst.TENDYMD_DAY)
						)
				)
		);
	}

	private String getString(X31SDataBeanAccess bean, String key)
	{
		return bean.sendMessageString(key, X31CWebConst.DATABEAN_GET_VALUE);
	}

	private void setString(X31SDataBeanAccess bean, String key, String val)
	{
		bean.sendMessageString(key, X31CWebConst.DATABEAN_SET_VALUE, val);
	}

	/**
	 * プルダウンで取得したコードを対象のBEANに設定する。<br>
	 * <br>
	 * @param	bean
	 * @param	pulldownNm
	 * @param	trgtBeanKey
	 */
	private void setBeanPulldownCd(X31SDataBeanAccess bean, String pulldownNm, String trgtBeanKey)
	{
		setString(bean, trgtBeanKey, KKW08601SFLogic.getPulldownCd(bean, pulldownNm, KKW08605SFConst.INDEX_02, KKW08605SFConst.CD_DIV_02));
	}

	/**
	 * <dd>メソッド名	：選択されているプルダウン名称取得処理
	 * <dd>メソッド説明	：選択されているコードに該当するプルダウン表示名を取得する。
	 * <dd>備考			：なし。
	 * <br>
	 * @param	bean			サービスフォームBean
	 * @param	pulldownInfName	プルダウン情報名(キー値)
	 * @param	beanIndex		インデックス名
	 * @param	beanCdDiv		コード名
	 * @param	beanCdDivNm		名称名
	 * @return 				選択されているプルダウン名称
	 */
	private String getSelectedPulldownName(
			X31SDataBeanAccess bean,
			String pulldownInfName,
			String beanIndex,
			String beanCdDiv,
			String beanCdDivNm
	)
	{
		return KKW08601SFLogic.getPulldownName(
				bean,
				pulldownInfName,
				KKW08601SFLogic.getPulldownCd(bean, pulldownInfName, beanIndex, beanCdDiv),
				beanCdDiv,
				beanCdDivNm
		);
	}
}
