package eo.web.webview.KKW14905SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JSYwebLog;
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 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.KKSV0692_KKSV0692OPDBMapper;
import eo.web.webview.mapping.KKSV0693_KKSV0693OPDBMapper;

public class KKW14905SFLogic extends JCCWebBusinessLogic {
	
	/** 実行サービスID(KKSV0692) */
	public static final String SVC_ID_KKSV0692 = "KKSV0692";
	
	/** 実行サービスID(KKSV0693) */
	public static final String SVC_ID_KKSV0693 = "KKSV0693";
	
	/** 加入御礼書発行コード 加入御礼書なし */
	private static final String KORS_HAKKO_CD_3 = "3";
	
	/** 加入御礼書発行コード 番ポなし */
	private static final String KORS_HAKKO_CD_4 = "4";
	
	/**
	 * 初期表示処理です。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	public boolean actionInit() throws Exception
	{
		JCCWebCommon.getScreenInfo(this);
		
		// サービスフォームBeanのアクセスクラス取得
		X31SDataBeanAccess srvBean = super.getServiceFormBean();
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return false;
		}
		
		String screenId = 
			commoninfoBean.sendMessageString(
					CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		
		if (JKKScreenConst.SCREEN_ID_KKW14905.equals(screenId))
		{
			
			// ■ サービス呼び出し準備
			HashMap<String, String> paramMap = new HashMap<String, String>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_KKSV0692);
	
			X31SDataBeanAccess[] bean = {srvBean};
	
			HashMap<String, Object> inputMap = new HashMap<String, Object>();
			HashMap<String, Object> outputMap = new HashMap<String, Object>();
			
			KKSV0692_KKSV0692OPDBMapper mapper = new KKSV0692_KKSV0692OPDBMapper();
			HashMap<String, Object> parentMap = new HashMap<String, Object>();
			parentMap.put("func_code", JKKCommonConst.FUNC_CODE_1);
			inputMap.put("JKKKorsHakJknYksUpdCC", parentMap);
	
			// ■ サービス呼び出し
			X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
			
			// エラー処理 
			if (msgResult != null)
			{
				JCCWebCommon.setMessageInfo(this, msgResult);
				return true;
			}
			
			mapper.getJKKKorsHakJknYksUpdCC(bean, outputMap);
			
			// 取得した加入御礼書発行条件一覧情報を画面表示用に詰め替える
			parentMap = null;
			if(outputMap.containsKey("JKKKorsHakJknYksUpdCC")){
				parentMap = (HashMap)outputMap.get("JKKKorsHakJknYksUpdCC");
			}
	
			ArrayList childList = null;		
	
			X31SDataBeanAccessArray displayList = srvBean.getDataBeanArray(KKW14905SFConst.YOKSI_ADD_MSKMSHO_NO_LIST);
	
			if(parentMap.containsKey("yoksi_add_mskmsho_no_list")){
				childList = (ArrayList)parentMap.get("yoksi_add_mskmsho_no_list");
	
				for(int i = 0; i < childList.size(); i++){
					X31SDataBeanAccess subbean = null;
					subbean = displayList.addDataBean();
					HashMap childMap = (HashMap)childList.get(i);
				
					// 抑止登録申込番号一覧情報.削除
					subbean.sendMessageBoolean(KKW14905SFConst.SAKUJO_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
					
					// 抑止登録申込番号一覧情報.加入 ← 加入御礼書発行条件一覧照会マップ.抑止登録申込番号一覧情報.加入
					if ("true".equals((String)childMap.get("kanyu")))
					{
						subbean.sendMessageBoolean(KKW14905SFConst.KANYU_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
					}
	
					// 抑止登録申込番号一覧情報.番ポ ← 加入御礼書発行条件一覧照会マップ.抑止登録申込番号一覧情報.番ポ
					if ("true".equals((String)childMap.get("banpo")))
					{
						subbean.sendMessageBoolean(KKW14905SFConst.BANPO_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
					}
	
					// 抑止登録申込番号一覧情報.申込番号 ← 加入御礼書発行条件一覧照会マップ.抑止登録申込番号一覧情報.申込番号
					subbean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("moshikomi_no"));
					// 抑止登録申込番号一覧情報.登録年月日時分秒 ← 加入御礼書発行条件一覧照会マップ.抑止登録申込番号一覧情報.登録年月日時分秒
					subbean.sendMessageString(KKW14905SFConst.ADD_DTM_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("add_dtm"));
				}
			}
			
			// 
			srvBean.sendMessageBoolean(KKW14905SFConst.KANYU, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
			srvBean.sendMessageBoolean(KKW14905SFConst.BANPO, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
			srvBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO, X31CWebConst.DATABEAN_SET_VALUE, "");
			srvBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_EX1, X31CWebConst.DATABEAN_SET_VALUE, "..JP.*");
			srvBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_EX2, X31CWebConst.DATABEAN_SET_VALUE, "13JP00001");
			
			// 遷移先の指定
			// 遷移先画面名を設定
			commoninfoBean.sendMessageString(
					CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW14905);
			
			// DataBeanログ出力
			JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		}
		return true;
	}
	
	/**
	 * 更新確認ボタン押下処理です。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	public boolean actionUpdIcrn() throws Exception
	{
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanの取得
		X31SDataBeanAccess srvBean = super.getServiceFormBean();
		
		// 入力項目の編集を行う
		X31SDataBeanAccessArray displayList = srvBean.getDataBeanArray(KKW14905SFConst.YOKSI_ADD_MSKMSHO_NO_LIST);
		X31SDataBeanAccessArray basicList = srvBean.getDataBeanArray(KKW14905SFConst.YOKSI_ADD_MSKMSHO_NO_LIST_BF);
		X31SDataBeanAccessArray modDisplayList = srvBean.getDataBeanArray(KKW14905SFConst.YOKSI_ADD_MSKMSHO_NO_LIST_MOD);
		X31SDataBeanAccessArray modCntlList = srvBean.getDataBeanArray(KKW14905SFConst.YOKSI_ADD_MSKMSHO_NO_LIST_MOD_CTL);
		
		// 変更情報をクリアする
		modDisplayList.clearArray();
		modCntlList.clearArray();
		
		String mskmNo = srvBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		Boolean kanyu = srvBean.sendMessageBoolean(KKW14905SFConst.KANYU, X31CWebConst.DATABEAN_GET_VALUE);
		Boolean banpo = srvBean.sendMessageBoolean(KKW14905SFConst.BANPO, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 新規登録情報があれば、変更情報に詰め替える
		if (null != mskmNo && !"".equals(mskmNo))
		{
			if (Boolean.TRUE.equals(kanyu))
			{
				// 抑止登録申込番号変更制御情報に設定
				X31SDataBeanAccess modCntlBean = null;
				modCntlBean = modCntlList.addDataBean();
				modCntlBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_04, X31CWebConst.DATABEAN_SET_VALUE, mskmNo);
				modCntlBean.sendMessageString(KKW14905SFConst.KANYU_04, X31CWebConst.DATABEAN_SET_VALUE, "true");
			}
			
			if (Boolean.TRUE.equals(banpo))
			{
				// 抑止登録申込番号変更制御情報に設定
				X31SDataBeanAccess modCntlBean = null;
				modCntlBean = modCntlList.addDataBean();
				modCntlBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_04, X31CWebConst.DATABEAN_SET_VALUE, mskmNo);
				modCntlBean.sendMessageString(KKW14905SFConst.BANPO_04, X31CWebConst.DATABEAN_SET_VALUE, "true");
			}
		}

		
		// 削除対象の情報を変更情報へ詰め替える
		for (int i = 0; i < displayList.getCount(); i++)
		{
			X31SDataBeanAccess displayBean = displayList.getDataBean(i);
			
			Boolean sakujoFlg = displayBean.sendMessageBoolean(KKW14905SFConst.SAKUJO_01, X31CWebConst.DATABEAN_GET_VALUE);
			String dpMskmNo = displayBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
			displayBean.sendMessageBoolean(KKW14905SFConst.KANYU_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
			displayBean.sendMessageBoolean(KKW14905SFConst.BANPO_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.FALSE);
			
			// 画面表示用の加入/番ポのチェックボックスは非活性により、
			// 値が消えてしまうため、再度設定する。
			for (int k = 0; k < basicList.getCount(); k++)
			{
				X31SDataBeanAccess basicBean = basicList.getDataBean(k);
				String bcMskmNo = basicBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_03, X31CWebConst.DATABEAN_GET_VALUE);
				
				if (null != dpMskmNo && bcMskmNo != null && dpMskmNo.equals(bcMskmNo))
				{
					String korsHakkoCd = basicBean.sendMessageString(KKW14905SFConst.KORS_HAKKO_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
					
					// 加入御礼書発行コードが3の場合
					if (KORS_HAKKO_CD_3.equals(korsHakkoCd))
					{
						// 抑止登録申込番号情報.加入にTrueを設定
						displayBean.sendMessageBoolean(KKW14905SFConst.KANYU_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
					}
					
					// 加入御礼書発行コードが4の場合
					if (KORS_HAKKO_CD_4.equals(korsHakkoCd))
					{
						// 抑止登録申込番号情報.番ポにTrueを設定
						displayBean.sendMessageBoolean(KKW14905SFConst.BANPO_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
					}
				}
			}
			
			if (Boolean.TRUE.equals(sakujoFlg))
			{
				String dpAddDtm = displayBean.sendMessageString(KKW14905SFConst.ADD_DTM_01, X31CWebConst.DATABEAN_GET_VALUE);
				
				X31SDataBeanAccess modDisplayBean = null;
				modDisplayBean = modDisplayList.addDataBean();
				// 抑止登録申込番号変更情報.申込番号に設定
				modDisplayBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_01, X31CWebConst.DATABEAN_SET_VALUE, dpMskmNo);
				// 抑止登録申込番号変更情報.削除に設定
				modDisplayBean.sendMessageBoolean(KKW14905SFConst.SAKUJO_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
				// 抑止登録申込番号変更情報.登録年月日に設定
				modDisplayBean.sendMessageString(KKW14905SFConst.ADD_DTM_01, X31CWebConst.DATABEAN_SET_VALUE, dpAddDtm);
				
				for (int j = 0; j < basicList.getCount(); j++)
				{
					X31SDataBeanAccess basicBean = basicList.getDataBean(j);
					
					String bsMskmNo = basicBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_03, X31CWebConst.DATABEAN_GET_VALUE);
					String updDtm = basicBean.sendMessageString(KKW14905SFConst.UPD_DTM_03, X31CWebConst.DATABEAN_GET_VALUE);
					
					if (null != dpMskmNo && null != bsMskmNo 
							&& dpMskmNo.equals(bsMskmNo))
					{
						String korsHkCd = basicBean.sendMessageString(KKW14905SFConst.KORS_HAKKO_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
						String korsHkjkn = basicBean.sendMessageString(KKW14905SFConst.KANYUONREISHO_HAKKO_JOKEN_NO_03, X31CWebConst.DATABEAN_GET_VALUE);

						// 加入御礼書発行コードが3の場合
						if (KORS_HAKKO_CD_3.equals(korsHkCd))
						{
							// 抑止登録申込番号変更情報.加入にTrueを設定
							modDisplayBean.sendMessageBoolean(KKW14905SFConst.KANYU_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
						}
						
						// 加入御礼書発行コードが4の場合
						if (KORS_HAKKO_CD_4.equals(korsHkCd))
						{
							// 抑止登録申込番号変更情報.番ポにTrueを設定
							modDisplayBean.sendMessageBoolean(KKW14905SFConst.BANPO_01, X31CWebConst.DATABEAN_SET_VALUE, Boolean.TRUE);
						}
						
						X31SDataBeanAccess modCntlBean = modCntlList.addDataBean();
						
						// 抑止登録申込番号変更制御情報.削除にTrueを設定
						modCntlBean.sendMessageString(KKW14905SFConst.SAKUJO_04, X31CWebConst.DATABEAN_SET_VALUE, "true");
						// 抑止登録申込番号変更制御情報.申込番号に設定
						modCntlBean.sendMessageString(KKW14905SFConst.MOSHIKOMI_NO_04, X31CWebConst.DATABEAN_SET_VALUE, bsMskmNo);
						// 抑止登録申込番号変更制御情報.加入御礼書発行条件番号に設定
						modCntlBean.sendMessageString(KKW14905SFConst.KANYUONREISHO_HAKKO_JOKEN_NO_04, X31CWebConst.DATABEAN_SET_VALUE, korsHkjkn);
						// 抑止登録申込番号変更制御情報.更新年月日時分秒に設定
						modCntlBean.sendMessageString(KKW14905SFConst.UPD_DTM_04, X31CWebConst.DATABEAN_SET_VALUE, updDtm);
					}
				}
			}
		}
		
		// ■ サービス呼び出し準備
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_KKSV0693);

		X31SDataBeanAccess[] bean = {srvBean};

		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		KKSV0693_KKSV0693OPDBMapper mapper = new KKSV0693_KKSV0693OPDBMapper();
		mapper.setJKKKorsHakJknYksUpdCC(bean, inputMap, JKKCommonConst.FUNC_CODE_2);

		// ■ サービス呼び出し
		invokeService(paramMap, inputMap, outputMap);
		
		//共有フォームBean設定
		commonInfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW14906);
		commonInfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW14906);
		
		// 次画面に表示するメッセージを設定する。
		JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"抑止番号のデータ更新"});
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		return true;
	}
	
	/**
	 * 一覧画面に戻る処理
	 * <br>
	 * @return 正常終了:true 異常修了:false
	 * @throws Exception 
	 */
	public boolean actionFin() throws Exception
	{
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		//共有フォームBean設定
		commonInfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		return true;
		
	}
	
	/**
	 * 修正ボタン押下処理
	 * <br>
	 * @return 正常終了:true 異常修了:false
	 * @throws Exception 
	 */
	public boolean actionShusei() throws Exception
	{
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		//共有フォームBean設定
		commonInfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW14905);
		commonInfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW14905);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		return true;
	}
	
	/**
	 * 確定ボタン押下処理
	 * <br>
	 * @return 正常終了:true 異常修了:false
	 * @throws Exception 
	 */
	public boolean actionFix() throws Exception
	{
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanの取得
		X31SDataBeanAccess srvBean = super.getServiceFormBean();
		
		// ■ サービス呼び出し準備
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_KKSV0693);

		X31SDataBeanAccess[] bean = {srvBean};

		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		KKSV0693_KKSV0693OPDBMapper mapper = new KKSV0693_KKSV0693OPDBMapper();
		mapper.setJKKKorsHakJknYksUpdCC(bean, inputMap, JKKCommonConst.FUNC_CODE_1);

		// ■ サービス呼び出し
		invokeService(paramMap, inputMap, outputMap);
		
		//共有フォームBean設定
		commonInfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW14907);
		commonInfoBean.sendMessageString(
				CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW14907);
		
		// 次画面に表示するメッセージを設定する。
		JCCWebCommon.setMessageInfo(this, "EKB2960--I", new String[]{"抑止番号", "登録"});
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		return true;
	}

	
}
