/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：ACSV0001_ACSV0001OPDBMapper
*	ソースファイル名：ACSV0001_ACSV0001OPDBMapper.java
*	作成者			：富士通
*	日付			：2012年02月06日
*＜機能概要＞
*	BP（一時金登録画面情報取得）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/02/06	富士通		新規作成
*	v5.00.00	2013/07/03	FJ)垣内		【LT-2013-0000203】料金サービスコードリストを保持するよう修正
*	v5.00.01	2013/07/24	FJ)文元		【LT-2013-0000229】料金内訳ComboBoxでの重複行2行目以降を表示しないよう対応
*	v8.00.00	2013/12/25  FJ)江森     【ANK-1584-00-00】一時金スキーマに項目「サービス詳細契約番号」追加対応
*	v9.00.00	2014/04/16	FJ)小野     【ANK-2054-00-00】eoスマートリンク改修(端末補償)。
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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.common.constant.JZM0171Constant;
import eo.web.webview.ACW00102SF.ACW00102SFConst;
import eo.web.webview.common.JCHDspEditUtil;
import eo.web.webview.common.JCHWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class ACSV0001_ACSV0001OPDBMapper {

	/**
	 * コンストラクタ
	 */
	public ACSV0001_ACSV0001OPDBMapper(){
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：一時金登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setACSV000101SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 1){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 請求契約番号 → サービス契約番号一覧照会マップ.ＫＥＹ＿請求契約番号
		parentMap.put("key_seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("ACSV000101SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：一時金登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setACSV000102SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 1){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// コード種別(固定値) → 投入区分一覧取得マップ.ＫＥＹ＿コード種別コード
		parentMap.put("key_cd_sbt_cd", JZM0171Constant.CD00972);

		outputMap.put("ACSV000102SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：一時金登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setACSV000103SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		if(bean == null){
			return null;
		}

		if(bean.length != 1){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// システムコード → 料金項目一覧取得マップ.ＫＥＹ＿システムコード
		parentMap.put("key_sys_cd", JACStrConst.SYS_CD_AC);

		// 業務機能識別コード → 料金項目一覧取得マップ.ＫＥＹ＿業務機能識別コード
		parentMap.put("key_work_kino_skbt_cd", JACStrConst.WORK_KINO_SKBT_ICJKN_SCR);

		// 抽出変換コード → 料金項目一覧取得マップ.ＫＥＹ＿抽出変換コード
		parentMap.put("key_chsht_chg_cd", JACStrConst.CHSHT_CHG_CD_CST);

		// 料金グループコード → 料金項目一覧取得マップ.ＫＥＹ＿料金グループコード
		parentMap.put("key_prc_grp_cd", JACStrConst.PRC_GRP_CD_SP);

		// 料金コースコード → 料金項目一覧取得マップ.ＫＥＹ＿料金コースコード
		parentMap.put("key_pcrs_cd", JACStrConst.PCRS_CD_SP);

		outputMap.put("ACSV000103SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：一時金登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setGETPRCKMKCSCHGELISTCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		ArrayList<HashMap<String, Object>> prcKmkList = new ArrayList<HashMap<String, Object>>();

		// -------------------------------------------------- //
		// 1件目 料金項目コード（必須詳細料金項目）
		// -------------------------------------------------- //
		HashMap<String, Object> childMap = null;
		childMap = new HashMap();
		childMap.put("key_work_param_id", JACStrConst.WKPARA_AC_RE_DT_PRC);
		childMap.put("key_sys_cd", JACStrConst.SYS_CD_AC);
		childMap.put("key_work_kino_skbt_cd", JACStrConst.RE_DT_PRC);
		childMap.put("key_chsht_chg_cd", JACStrConst.CHSHT_CHG_CD_1);
		prcKmkList.add(childMap);

		// -------------------------------------------------- //
		// 2件目 料金項目コード（必須詳細料金項目（タブレット））
		// -------------------------------------------------- //
		HashMap<String, Object> childMap1 = new HashMap();
		childMap1.put("key_work_param_id", JACStrConst.WKPARA_AC_RE_DT_TAB_PRC);
		childMap1.put("key_sys_cd", JACStrConst.SYS_CD_AC);
		childMap1.put("key_work_kino_skbt_cd", JACStrConst.REDTTTPRC);
		childMap1.put("key_chsht_chg_cd", JACStrConst.CHSHT_CHG_CD_1);
		prcKmkList.add(childMap1);

		parentMap.put("PRC_KMK_CS_CHGE_LIST", prcKmkList);

		outputMap.put("GETPRCKMKCSCHGELISTCC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：一時金登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getACSV000101SC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("ACSV000101SC")){
			parentMap = (HashMap)outputMap.get("ACSV000101SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listACSV000101SC_svc_kei_no_info_EKK0321B011CBSMsg1List = bean[0].getDataBeanArray(ACW00102SFConst.SVC_KEI_NO_INFO);
		X31SDataBeanAccess subbean = listACSV000101SC_svc_kei_no_info_EKK0321B011CBSMsg1List.getDataBean(0);

		subbean.sendMessage(ACW00102SFConst.SVC_KEI_NO_LIST_01, X31CWebConst.DATABEAN_CLEAR);
		subbean.sendMessageString(ACW00102SFConst.SVC_KEI_NO_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, JACStrConst.KARA_MOJI);

		childList = null;
		if(parentMap.containsKey("EKK0321B011CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EKK0321B011CBSMsg1List");

			for(int i = 0; i < childList.size(); i++){
				HashMap childMap = (HashMap)childList.get(i);

				// サービス契約番号情報.サービス契約番号リスト ← サービス契約番号一覧照会マップ.サービス契約番号一覧照会明細.サービス契約番号
				subbean.sendMessageString(ACW00102SFConst.SVC_KEI_NO_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get("svc_kei_no"));
			}
		}

		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：一時金登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getACSV000102SC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("ACSV000102SC")){
			parentMap = (HashMap)outputMap.get("ACSV000102SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listACSV000102SC_tonyu_div_info_EZM0171B012CBSMsg1List = bean[0].getDataBeanArray(ACW00102SFConst.TONYU_DIV_INFO);
		X31SDataBeanAccess subbean = listACSV000102SC_tonyu_div_info_EZM0171B012CBSMsg1List.getDataBean(0);

		subbean.sendMessage(ACW00102SFConst.TONYU_DIV_CD_LIST_04, X31CWebConst.DATABEAN_CLEAR);
		subbean.sendMessage(ACW00102SFConst.TONYU_DIV_NM_LIST_04, X31CWebConst.DATABEAN_CLEAR);
		subbean.sendMessage(ACW00102SFConst.TONYU_DIV_SHK_DSP_CD_LIST_04, X31CWebConst.DATABEAN_CLEAR);

		childList = null;
		if(parentMap.containsKey("EZM0171B012CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EZM0171B012CBSMsg1List");

			for(int i = 0; i < childList.size(); i++){
				HashMap childMap = (HashMap)childList.get(i);

				// 投入区分情報.投入区分コードリスト ← 投入区分一覧取得マップ.コード名称管理コード区分一覧照会明細.コード区分
				subbean.sendMessageString(ACW00102SFConst.TONYU_DIV_CD_LIST_04, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get("cd_div"));

				// 投入区分情報.投入区分名称リスト ← 投入区分一覧取得マップ.コード名称管理コード区分一覧照会明細.コード区分名
				String tonyuDivNm = JCHDspEditUtil.codeNameEdit((String)childMap.get("cd_div"), (String)childMap.get("cd_div_nm"));
				subbean.sendMessageString(ACW00102SFConst.TONYU_DIV_NM_LIST_04, X31CWebConst.DATABEAN_ADD_VALUE, tonyuDivNm);

				// 投入区分情報.投入区分初期表示コードリスト ← 投入区分一覧取得マップ.コード名称管理コード区分一覧照会明細.初期表示コード
				subbean.sendMessageString(ACW00102SFConst.TONYU_DIV_SHK_DSP_CD_LIST_04, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get("shk_dsp_cd"));
			}
		}

		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：一時金登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getACSV000103SC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("ACSV000103SC")){
			parentMap = (HashMap)outputMap.get("ACSV000103SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listACSV000105SC_prc_kmk_info_ECH0401B010CBSMsg1List = bean[0].getDataBeanArray(ACW00102SFConst.PRC_KMK_INFO);
		X31SDataBeanAccess subbean = listACSV000105SC_prc_kmk_info_ECH0401B010CBSMsg1List.getDataBean(0);

		subbean.sendMessage(ACW00102SFConst.PRC_KMK_CD_LIST_03, X31CWebConst.DATABEAN_CLEAR);
		subbean.sendMessage(ACW00102SFConst.PRC_KMK_NM_LIST_03, X31CWebConst.DATABEAN_CLEAR);

		HashMap<String, String> chkMap = new HashMap<String, String>(); // 重複行チェック用リスト
		
		// 選択されているキャンペーンの料金サービスコードを取得
		String selPrcSvcCd = bean[0].sendMessageString(ACW00102SFConst.PRC_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE);
		Boolean isSelectedCamp = false;
		// キャンペーンの選択有無を判断
		if(JCHWebCommon.isNotNullOrEmpty(selPrcSvcCd))
		{
			isSelectedCamp = true;
		}

		childList = null;
		if(parentMap.containsKey("ECH0401B010CBSMsg1List")){
			childList = (ArrayList)parentMap.get("ECH0401B010CBSMsg1List");

			// 詳細必須料金項目情報の料金項目コード群を取得
			HashMap<String, String> dtlReqMap =
				JCHWebCommon.getPrcKmkCdMap(bean[0], ACW00102SFConst.DTL_REQUIRE_PRC_KMK_CD_INFO, ACW00102SFConst.DTL_REQUIRE_PRC_KMK_CD_05);

			// 詳細必須料金項目情報（タブレット）の料金項目コード群を取得
			HashMap<String, String> tabDtlReqMap =
				JCHWebCommon.getPrcKmkCdMap(bean[0], ACW00102SFConst.TAB_DTL_REQUIRE_PRC_KMK_CD_INFO, ACW00102SFConst.TAB_DTL_REQUIRE_PRC_KMK_CD_06);

			for(int i = 0; i < childList.size(); i++){
				HashMap childMap = (HashMap)childList.get(i);

				String prcSvcCd = (String)childMap.get("prc_svc_cd"); 	// 料金項目一覧取得マップ.料金項目抽出変換一覧照会明細.料金サービスコード
				String prcKmkCd = (String)childMap.get("prc_kmk_cd"); 	// 料金項目一覧取得マップ.料金項目抽出変換一覧照会明細.料金項目コード
				String prcKmkNm = (String)childMap.get("prc_kmk_cd_nm"); // 料金項目一覧取得マップ.料金項目抽出変換一覧照会明細.料金項目コード名称

				// 重複チェック
				String chkValue = prcKmkCd + prcKmkNm;
				if (chkMap.containsKey(chkValue))
				{
					// チェックマップに「料金項目コード＋料金項目コード名称」が既に存在する場合、読み飛ばし
					continue;
				}

				// 保持
				chkMap.put(chkValue, chkValue);
				
				// 料金項目情報.料金項目コードリスト ← 料金項目一覧取得マップ.料金項目抽出変換一覧照会明細.料金項目コード
				subbean.sendMessageString(ACW00102SFConst.PRC_KMK_CD_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, prcKmkCd);

				// 料金項目情報.料金項目名称リスト ← 料金項目コード + 料金サービスコード + ":" + 料金項目コード名称
				String prcKmkCdNm = JCHDspEditUtil.prcKmkNmEdit(prcKmkCd, prcKmkNm, prcSvcCd, isSelectedCamp);
				subbean.sendMessageString(ACW00102SFConst.PRC_KMK_NM_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, prcKmkCdNm);

				// 料金項目情報.料金グループコード変換リスト ← 料金項目一覧取得マップ.料金項目抽出変換一覧照会明細.料金グループコード
				subbean.sendMessageString(ACW00102SFConst.PRC_GRP_CD_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get("prc_grp_cd"));

				// 料金項目情報.料金サービスコードリスト ← 料金項目一覧取得マップ.料金項目抽出変換一覧照会明細.料金サービスコード
				subbean.sendMessageString(ACW00102SFConst.PRC_SVC_CD_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, prcSvcCd);

				// 料金項目情報.詳細必須料金項目フラグリストを設定
				String dtlReqFlg = "0";
				if (dtlReqMap.containsKey(prcKmkCd))
				{
					dtlReqFlg = "1";
				}
				subbean.sendMessageString(ACW00102SFConst.DTL_REQUIRE_FLG_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, dtlReqFlg);

				// 料金項目情報.詳細必須料金項目フラグリスト（タブレット）を設定
				String tabDtlReqFlg = "0";
				if (tabDtlReqMap.containsKey(prcKmkCd))
				{
					tabDtlReqFlg = "1";
				}
				subbean.sendMessageString(ACW00102SFConst.TAB_DTL_REQUIRE_FLG_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, tabDtlReqFlg);

				// 料金項目コードリストの1件目の場合、初期値を設定する
				if (i == 0)
				{
					bean[0].sendMessageString(ACW00102SFConst.PRC_KMK_CD, X31CWebConst.DATABEAN_SET_VALUE, prcKmkCd);
					bean[0].sendMessageString(ACW00102SFConst.DTL_REQUIRE_FLG, X31CWebConst.DATABEAN_SET_VALUE, dtlReqFlg);
					bean[0].sendMessageString(ACW00102SFConst.TAB_DTL_REQUIRE_FLG, X31CWebConst.DATABEAN_SET_VALUE, tabDtlReqFlg);
				}

			}
		}

		return bean;
	}

	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：一時金登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getGETPRCKMKCSCHGELISTCC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey(JACStrConst.PRC_KMK_CS_CHGE_LIST_CC)){
			parentMap = (HashMap)outputMap.get(JACStrConst.PRC_KMK_CS_CHGE_LIST_CC);
		}

		if(parentMap != null && parentMap.containsKey(JACStrConst.PRC_KMK_CS_CHGE_LIST)){

			ArrayList<HashMap<String, Object>> mainList = (ArrayList)parentMap.get(JACStrConst.PRC_KMK_CS_CHGE_LIST);

			// in料金項目抽出変換一覧照会明細リストの内容をmapに格納
			HashMap<String, Object> prcMap = new HashMap<String, Object>();
			for (HashMap<String, Object> mainObj : mainList)
			{
				prcMap.put((String)mainObj.get("key_work_param_id"), mainObj);
			}

			// mapからＫＥＹ＿業務パラメータIDをキーに、各料金項目コードを取得する

			// 料金項目コード（必須詳細料金項目）
			if (prcMap.containsKey(JACStrConst.WKPARA_AC_RE_DT_PRC))
			{
				HashMap<String, Object> map1 = (HashMap<String, Object>)prcMap.get(JACStrConst.WKPARA_AC_RE_DT_PRC);

				List<HashMap<String, Object>> childList = (List<HashMap<String, Object>>) map1.get("ECH0401B010CBSMsg1List");

				X31SDataBeanAccessArray dtl_req__prc_kmk_cd_list = bean[0].getDataBeanArray("詳細必須料金項目情報");
				dtl_req__prc_kmk_cd_list.clearArray();

				for (int i = 0; i < childList.size(); i++)
				{
					X31SDataBeanAccess subbean = null;
					if (dtl_req__prc_kmk_cd_list.getCount() - 1 >= i)
					{
						subbean = dtl_req__prc_kmk_cd_list.getDataBean(i);
					}
					else
					{
						subbean = dtl_req__prc_kmk_cd_list.addDataBean();
					}
					HashMap childMap = (HashMap)childList.get(i);

					// 詳細必須料金項目情報.詳細必須料金項目コード ← 料金項目抽出変換一覧照会CCマップ.料金項目抽出変換一覧照会明細.料金項目コード
					subbean.sendMessageString("詳細必須料金項目コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("prc_kmk_cd"));
				}

			}

			// 料金項目コード（必須詳細料金項目（タブレット））
			if (prcMap.containsKey(JACStrConst.WKPARA_AC_RE_DT_TAB_PRC))
			{
				HashMap<String, Object> map2 = (HashMap<String, Object>)prcMap.get(JACStrConst.WKPARA_AC_RE_DT_TAB_PRC);

				List<HashMap<String, Object>> childList = (List<HashMap<String, Object>>) map2.get("ECH0401B010CBSMsg1List");

				X31SDataBeanAccessArray tab_dtl_req__prc_kmk_cd_list = bean[0].getDataBeanArray("詳細必須料金項目情報（タブレット）");
				tab_dtl_req__prc_kmk_cd_list.clearArray();

				for (int i = 0; i < childList.size(); i++)
				{
					X31SDataBeanAccess subbean = null;
					if (tab_dtl_req__prc_kmk_cd_list.getCount() - 1 >= i)
					{
						subbean = tab_dtl_req__prc_kmk_cd_list.getDataBean(i);
					}
					else
					{
						subbean = tab_dtl_req__prc_kmk_cd_list.addDataBean();
					}
					HashMap childMap = (HashMap)childList.get(i);

					// 詳細必須料金項目情報.詳細必須料金項目コード ← 料金項目抽出変換一覧照会CCマップ.料金項目抽出変換一覧照会明細.料金項目コード
					subbean.sendMessageString("詳細必須料金項目コード（タブレット）", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("prc_kmk_cd"));
				}

			}
		}
		return bean;
	}

}