/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CHSV0050_CHSV0050OPDBMapper
 *	ソースファイル名：CHSV0050_CHSV0050OPDBMapper.java
 *	作成者			：富士通
 *	日付			：2011年11月23日
 *＜機能概要＞
 *	BP（金庫統合登録）へのＤ−Ｂマッピングクラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/11/23	富士通		新規作成
 *	v11.00.00	2014/11/29	FJ)阪口		【OM-2014-0003631】金庫統合可否チェックの追加
 *
 **********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

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.JACStrConst;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CHW01104SF.CHW01104SFConst;
import eo.web.webview.CHW01110SF.CHW01110SFConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHCommonServiceUtil;
import eo.web.webview.common.JCHPulldownUtil;
import eo.web.webview.common.JCRWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CHSV0050_CHSV0050OPDBMapper
{

	/**
	 * コンストラクタ
	 */
	public CHSV0050_CHSV0050OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：金庫統合登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKNKTGKHCHKCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		X31SDataBeanAccessArray arraybean = null;
		X31SDataBeanAccess beanTemp = null;
		ArrayList list = null;

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 金庫ステータス選択された情報を取得
		X31SDataBeanAccess knkStatInfo = bean[0].getDataBeanArray(CHW01110SFConst.KNK_STAT_INFO).getDataBean(0);
		String knkStatInfoIndex = knkStatInfo.sendMessageString(CHW01110SFConst.KNK_STAT_SEL_02, X31CWebConst.DATABEAN_GET_VALUE);
		String knkStatInfoCd = knkStatInfo.sendMessageString(CHW01110SFConst.KNK_PRC_KMK_CD_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(knkStatInfoIndex));

		// 金庫ステータスコード → 金庫統合可否チェックマップ.移動先金庫料金項目コード
		parentMap.put("idsaki_knk_prc_kmk_cd", knkStatInfoCd);

		beanTemp = bean[0];
		arraybean = beanTemp.getDataBeanArray("未処理金金庫情報");
		if (parentMap.containsKey("ECH0191C030CBSMsg1List"))
		{
			list = (ArrayList) parentMap.get("ECH0191C030CBSMsg1List");
		}
		else
		{
			list = new ArrayList();
		}
		if (arraybean != null && arraybean.getCount() > 0)
		{
			for (int i = 0; i < arraybean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);

				// 未処理金金庫情報.未処理金金庫情報選択
				boolean choice = subbean.sendMessageBoolean(CHW01110SFConst.MI_TRN_KNK_ICRN_SEL_01, X31CWebConst.DATABEAN_GET_VALUE);

				// 選択されている情報のみをマッピングする
				if (choice)
				{
					HashMap childMap = null;
					if (list.size() - 1 >= i)
					{
						childMap = (HashMap) list.get(i);
					}
					else
					{
						childMap = new HashMap();
					}

					if (subbean != null)
					{
						// 未処理金金庫情報.金庫料金項目コード → 金庫統合可否チェックマップ.移動元金庫料金項目コードリスト.移動元金庫料金項目コード
						childMap.put("idomoto_knk_prc_kmk_cd", subbean.sendMessageString("金庫料金項目コード", X31CWebConst.DATABEAN_GET_VALUE));

						// 未処理金金庫情報.移動元金庫情報インデックス → 金庫統合可否チェックマップ.移動元金庫料金項目コードリスト.移動元金庫情報インデックス
						childMap.put("tg_knk_info_idx", String.valueOf(i));

						// 空白 → 金庫統合可否チェックマップ.移動元金庫料金項目コードリスト.エラーフラグ
						childMap.put("err_flg", "");
					}

					list.add(childMap);
				}
			}
		}
		parentMap.put("idomoto_knk_prc_kmk_cd_list", list);

		outputMap.put(JACStrConst.KNKTGKHCHKCC_MAP_ID, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：金庫統合登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV005001SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		X31SDataBeanAccessArray arraybean = null;
		X31SDataBeanAccess beanTemp = null;
		ArrayList list = null;

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 請求契約番号 → 金庫統合マップ.請求契約番号
		parentMap.put("seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));

		// 金庫ステータス選択された情報を取得
		X31SDataBeanAccess knkStatInfo = bean[0].getDataBeanArray(CHW01110SFConst.KNK_STAT_INFO).getDataBean(0);
		String knkStatInfoIndex = knkStatInfo.sendMessageString(CHW01110SFConst.KNK_STAT_SEL_02, X31CWebConst.DATABEAN_GET_VALUE);
		String knkStatInfoCd = knkStatInfo.sendMessageString(CHW01110SFConst.KNK_PRC_KMK_CD_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(knkStatInfoIndex));

		// 金庫ステータスコード → 金庫一覧照会マップ.ＫＥＹ＿金庫料金項目コード
		parentMap.put("knk_prc_kmk_cd", knkStatInfoCd);

		beanTemp = bean[0];
		arraybean = beanTemp.getDataBeanArray("未処理金金庫情報");
		if (parentMap.containsKey("ECH0191C030CBSMsg1List"))
		{
			list = (ArrayList) parentMap.get("ECH0191C030CBSMsg1List");
		}
		else
		{
			list = new ArrayList();
		}
		if (arraybean != null && arraybean.getCount() > 0)
		{
			for (int i = 0; i < arraybean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);

				// 未処理金金庫情報.未処理金金庫情報選択
				boolean choice = subbean.sendMessageBoolean(CHW01110SFConst.MI_TRN_KNK_ICRN_SEL_01, X31CWebConst.DATABEAN_GET_VALUE);

				// 選択されている情報のみをマッピングする
				if (choice)
				{
					HashMap childMap = null;
					if (list.size() - 1 >= i)
					{
						childMap = (HashMap) list.get(i);
					}
					else
					{
						childMap = new HashMap();
					}

					if (subbean != null)
					{
						// 未処理金金庫情報.金庫番号 → 金庫統合マップ.金庫統合明細.統合対象＿金庫番号
						childMap.put("tg_knk_no", subbean.sendMessageString("金庫番号", X31CWebConst.DATABEAN_GET_VALUE));

						// 未処理金金庫情報.世代登録年月日時分秒 → 金庫統合マップ.金庫統合明細.統合対象＿世代登録年月日時分秒
						childMap.put("tg_gene_add_dtm", subbean.sendMessageString("世代登録年月日時分秒", X31CWebConst.DATABEAN_GET_VALUE));

						// 未処理金金庫情報.入金番号 → 金庫統合マップ.金庫統合明細.統合対象＿入金番号
						childMap.put("tg_nyukin_no", subbean.sendMessageString("入金番号", X31CWebConst.DATABEAN_GET_VALUE));

						// 未処理金金庫情報.入金日 → 金庫統合マップ.金庫統合明細.統合対象＿入金処理年月日
						childMap.put("tg_nyukin_trn_ymd", subbean.sendMessageString("入金日", X31CWebConst.DATABEAN_GET_VALUE));

						// 未処理金金庫情報.入金経路コード → 金庫統合マップ.金庫統合明細.統合対象＿入金経路コード
						childMap.put("tg_nyukin_route_cd", subbean.sendMessageString("入金経路コード", X31CWebConst.DATABEAN_GET_VALUE));

						// 未処理金金庫情報.未処理金 → 金庫統合マップ.金庫統合明細.統合対象＿金庫金額
						childMap.put("tg_knk_amnt", subbean.sendMessageString("未処理金", X31CWebConst.DATABEAN_GET_VALUE));

						// 未処理金金庫情報.更新年月日時分秒 → 金庫統合マップ.金庫統合明細.統合対象＿更新前更新年月日時分秒
						childMap.put("tg_upd_dtm_af", subbean.sendMessageString("更新年月日時分秒", X31CWebConst.DATABEAN_GET_VALUE));
					}

					list.add(childMap);
				}
			}
		}
		parentMap.put("ECH0191C030CBSMsg1List", list);

		outputMap.put("CHSV005001SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：金庫統合登録
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param bl　 ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setTAIOKIROKADDCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, JCCWebBusinessLogic bl)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		String wkkbtOrgCd = JCRWebCommon.getWkkbtOrgCd(bean[1]);
		String wkkbtOrgNm = JCRWebCommon.getWkkbtOrgNm(bean[1]);
		String userId = bean[1].sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		String userNm = bean[1].sendMessageString(CommonInfoCFConst.USER_NM, X31CWebConst.DATABEAN_GET_VALUE);
		String dtm = JCCWebCommon.getSysDateTime();

		String kiji = bean[0].sendMessageString(CHW01110SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE);

		ArrayList<HashMap<String, Object>> taioKirokAddList = new ArrayList<HashMap<String, Object>>();

		HashMap<String, Object> childMap = new HashMap<String, Object>();

		// 金庫異動登録["124"固定] → 対応記録登録マップ.対応記録登録リスト.料金対応記録種別コード
		childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_KNK_IDO_ADD);

		// 金庫統合["1404"固定] → 対応記録登録マップ.対応記録登録リスト.料金対応記録種別詳細コード
		childMap.put("prc_taio_kirok_dtl_bunrui_cd", JACStrConst.TKRK_SBTD_KNK_TOGO);

		// "金庫統合登録" → 対応記録登録マップ.対応記録登録リスト.タイトル
		childMap.put("title", JACScreenConst.SCREEN_NAME_CHW01110);

		// 記事 → 対応記録登録マップ.対応記録登録リスト.問合せ内容
		childMap.put("toiawase_naiyo", kiji);

		// 業務個別設定組織コード → 対応記録登録マップ.対応記録登録リスト.業務個別設定組織コード
		childMap.put("wkkbt_org_cd", wkkbtOrgCd);

		// 業務個別設定組織名 → 対応記録登録マップ.対応記録登録リスト.業務個別設定組織名
		childMap.put("wkkbt_org_nm", wkkbtOrgNm);

		// ユーザーＩＤ → 対応記録登録マップ.対応記録登録リスト.ユーザーＩＤ
		childMap.put("user_id", userId);

		// ユーザー名 → 対応記録登録マップ.対応記録登録リスト.ユーザー名
		childMap.put("user_nm", userNm);

		// 年月日時分秒 → 対応記録登録マップ.対応記録登録リスト.年月日時分秒
		childMap.put("dtm", dtm);

		// 応対区分カテゴリーリストの作成
		ArrayList<HashMap<String, Object>> rspCtgrList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> ctgrMap = new HashMap<String, Object>();

		// 金庫異動登録["124"固定] → 対応記録登録マップ.応対区分カテゴリーリスト.料金対応記録種別コード
		ctgrMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_KNK_IDO_ADD);

		// 金庫統合["1404"固定] → 対応記録登録マップ.応対区分カテゴリーリスト.料金対応記録種別詳細コード
		ctgrMap.put("prc_taio_kirok_dtl_bunrui_cd", JACStrConst.TKRK_SBTD_KNK_TOGO);

		// taio_kirok_add_listにrsp_ctgr_listを追加
		rspCtgrList.add(ctgrMap);
		childMap.put("rsp_ctgr_list", rspCtgrList);

		taioKirokAddList.add(childMap);

		parentMap.put("taio_kirok_add_list", taioKirokAddList);

		parentMap.put("seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(JACStrConst.TAIOKIROKADDCC_MAP_ID, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：金庫統合登録
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param bl　 ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setADDHOTVOICCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, JCCWebBusinessLogic bl)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 応対区分カテゴリーリストの作成
		ArrayList<HashMap<String, Object>> rspCtgrList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> ctgrMap = new HashMap<String, Object>();
		rspCtgrList.add(ctgrMap);

		parentMap.put("RSP_CTGR_List", rspCtgrList);
		outputMap.put("ADDHOTVOICCC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：金庫統合登録
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param bl　 ビューロジックインスタンス
	 */
	@SuppressWarnings("unchecked")
	public HashMap setPRCTAIOKIROKADDCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, JCCWebBusinessLogic bl)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		String userId = bean[1].sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);

		X31SDataBeanAccessArray arraybean = null;
		ArrayList list = null;

		String kiji = bean[0].sendMessageString(CHW01110SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE);
		Boolean isTaioRirekiDsp = bean[0].sendMessageBoolean(CHW01110SFConst.TAIO_RIREKI_DSP, X31CWebConst.DATABEAN_GET_VALUE);

		// 選択されたステータスコード（料金項目コード）を取得
		String tgmkKnkSt = JCHPulldownUtil.getSelectedValue(bean, CHW01110SFConst.KNK_STAT_INFO, CHW01110SFConst.KNK_PRC_KMK_CD_LIST_02,
				CHW01110SFConst.KNK_STAT_SEL_02);

		if (parentMap.containsKey("prc_taio_kirok_list"))
		{
			list = (ArrayList) parentMap.get("prc_taio_kirok_list");
		}
		else
		{
			list = new ArrayList();
		}

		arraybean = bean[0].getDataBeanArray(CHW01110SFConst.MI_TRN_KNK_INFO);
		if (arraybean != null && arraybean.getCount() > 0)
		{
			for (int i = 0; i < arraybean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);
				
				// 未処理金金庫情報.未処理金金庫情報選択
				boolean choice = subbean.sendMessageBoolean(CHW01110SFConst.MI_TRN_KNK_ICRN_SEL_01, X31CWebConst.DATABEAN_GET_VALUE);

				// 選択されている情報のみをマッピングする
				if (choice)
				{
					HashMap childMap = null;

					if (list.size() - 1 >= i)
					{
						childMap = (HashMap) list.get(i);
					}
					else
					{
						childMap = new HashMap();
					}

					// ユーザＩＤ → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応ユーザＩＤ
					childMap.put("prc_taio_user_id", userId);

					// 請求契約番号 → 料金対応記録登録マップ.料金対応記録明細リスト.請求契約番号
					childMap.put("seiky_kei_no", bean[0].sendMessageString(CHW01110SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

					// 金庫異動登録["124"固定] → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応記録種別コード
					childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_KNK_IDO_ADD);

					// 金庫統合["1404"固定] → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応記録種別詳細コード
					childMap.put("prc_taio_kirok_sbt_dtl_cd", JACStrConst.TKRK_SBTD_KNK_TOGO);

					// "金庫統合登録" → 料金対応記録登録マップ.料金対応記録明細リスト.タイトル
					childMap.put("title", JACScreenConst.SCREEN_NAME_CHW01110);

					// 記事 → 料金対応記録登録マップ.料金対応記録明細リスト.記事
					childMap.put("kiji", kiji);

					// 統合元の金庫ステータス → 料金対応記録登録マップ.料金対応記録明細リスト.変更前料金項目コード
					childMap.put("chg_bf_prc_kmk_cd", subbean.sendMessageString(CHW01110SFConst.TG_KNK_PRC_KMK_CD_01, X31CWebConst.DATABEAN_GET_VALUE));

					// 統合先の金庫ステータス → 料金対応記録登録マップ.料金対応記録明細リスト.変更後料金項目コード
					childMap.put("chg_af_prc_kmk_cd", tgmkKnkSt);

					// 統合元の金額 → 料金対応記録登録マップ.料金対応記録明細リスト.変更前金額
					childMap.put("chg_bf_amnt", subbean.sendMessageString(CHW01110SFConst.TG_KNK_AMNT_01, X31CWebConst.DATABEAN_GET_VALUE));

					// 統合先の金額 → 料金対応記録登録マップ.料金対応記録明細リスト.変更後金額
					childMap.put("chg_af_amnt", bean[0].sendMessageString(CHW01110SFConst.OUT_KNK_AMNT, X31CWebConst.DATABEAN_GET_VALUE));

					// 対応履歴表示 → 料金対応記録登録マップ.料金対応記録明細リスト.対応履歴連動対象フラグ
					if (isTaioRirekiDsp)
					{
						childMap.put("taiorrki_rendo_tg_flg", JACStrConst.TAIORRKI_RENDO_TG_FLG_HYOJI);
					}
					else
					{
						childMap.put("taiorrki_rendo_tg_flg", JACStrConst.TAIORRKI_RENDO_TG_FLG_HIHYOJI);
					}
					
					// 金庫番号 → 料金対応記録登録マップ.料金対応記録明細リスト.金庫番号
					childMap.put("knk_no", subbean.sendMessageString(CHW01110SFConst.TG_KNK_NO_01, X31CWebConst.DATABEAN_GET_VALUE));


					list.add(childMap);
				}
			}
		}

		parentMap.put("prc_taio_kirok_list", list);

		outputMap.put("PRCTAIOKIROKADDCC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：金庫統合登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCHSV005001SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("CHSV005001SC"))
		{
			parentMap = (HashMap) outputMap.get("CHSV005001SC");
		}

		if (parentMap != null)
		{
			// 金庫番号 ← 金庫統合マップ.金庫番号
			bean[0].sendMessageString("金庫番号", X31CWebConst.DATABEAN_SET_VALUE, (String) parentMap.get("knk_no"));

			// 入金日 ← 金庫統合マップ.出力＿入金処理年月日
			bean[0].sendMessageString("入金日", X31CWebConst.DATABEAN_SET_VALUE, (String) parentMap.get("out_nyukin_trn_ymd"));

			// 入金経路コード名称 ← 金庫統合マップ.出力＿入金経路コード名称
			bean[0].sendMessageString("入金経路コード名称", X31CWebConst.DATABEAN_SET_VALUE, (String) parentMap.get("out_nyukin_route_cd_nm"));

			// 未処理金 ← 金庫統合マップ.出力＿金庫金額
			bean[0].sendMessageString("未処理金", X31CWebConst.DATABEAN_SET_VALUE, (String) parentMap.get("out_knk_amnt"));
		}
		else
		{
			bean[0].sendMessageString("金庫番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
			bean[0].sendMessageString("入金日", X31CWebConst.DATABEAN_SET_VALUE, new String());
			bean[0].sendMessageString("入金経路コード名称", X31CWebConst.DATABEAN_SET_VALUE, new String());
			bean[0].sendMessageString("未処理金", X31CWebConst.DATABEAN_SET_VALUE, new String());
		}

		return bean;
	}

}