/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：ACSV0003_ACSV0003OPDBMapper
 *	ソースファイル名：ACSV0003_ACSV0003OPDBMapper.java
 *	作成者			：富士通
 *	日付			：2011年06月18日
 *＜機能概要＞
 *	BP（一時金更新画面情報取得）へのＤ−Ｂマッピングクラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/06/18	富士通		新規作成
 *	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 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.common.util.JCRUtilCommon;
import eo.web.webview.ACW00104SF.ACW00104SFConst;
import eo.web.webview.common.JCHDspEditUtil;
import eo.web.webview.common.JCHWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class ACSV0003_ACSV0003OPDBMapper
{

	/**
	 * コンストラクタ
	 */
	public ACSV0003_ACSV0003OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：一時金更新
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setACSV000301SC(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_icjkn_add_seq", bean[0].sendMessageString("一時金登録番号", X31CWebConst.DATABEAN_GET_VALUE));

		// 一時金更新枝番 → 一時金一意照会マップ.ＫＥＹ＿一時金更新枝番
		parentMap.put("key_icjkn_upd_seq", bean[0].sendMessageString("一時金更新枝番", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("ACSV000301SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：一時金更新
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setACSV000302SC(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("ACSV000302SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：一時金更新
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setACSV000303SC(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_chsht_chg_cd", JACStrConst.CHSHT_CHG_CD_CST);

		outputMap.put("ACSV000303SC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：一時金更新
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getACSV000301SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("ACSV000301SC"))
		{
			parentMap = (HashMap)outputMap.get("ACSV000301SC");
		}

		ArrayList childList = null;

		if (parentMap.containsKey("EAC0171A010CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("EAC0171A010CBSMsg1List");
			if (childList.size() > 0)
			{
				HashMap childMap = (HashMap)childList.get(0);

				// サービス契約番号 ← 一時金一意照会マップ.一時金一意照会明細.サービス契約番号
				bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_kei_no"));

				// 料金グループコード ← 一時金一意照会マップ.一時金一意照会明細.料金グループコード
				bean[0].sendMessageString("料金グループコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("trgt_prc_grp_cd"));

				// 料金コースコード ← 一時金一意照会マップ.一時金一意照会明細.料金コースコード
				bean[0].sendMessageString("料金コースコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("trgt_pcrs_cd"));

				// 料金サービスコード ← 一時金一意照会マップ.一時金一意照会明細.料金サービスコード
				bean[0].sendMessageString("料金サービスコード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("trgt_prc_svc_cd"));

				// 料金項目コード ← 一時金一意照会マップ.一時金一意照会明細.料金項目コード
				bean[0].sendMessageString("料金項目コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("trgt_prc_kmk_cd"));

				// 請求額 ← 一時金一意照会マップ.一時金一意照会明細.一時金料金
				bean[0].sendMessageString("請求額", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("icjkn_prc"));

				// 変更前請求額 ← 一時金一意照会マップ.一時金一意照会明細.一時金料金
				bean[0].sendMessageString("変更前請求額", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("icjkn_prc"));

				// 請求年月 ← 一時金一意照会マップ.一時金一意照会明細.請求年月
				bean[0].sendMessageString("請求年月", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_ym"));

				// 投入区分 ← 一時金一意照会マップ.一時金一意照会明細.投入区分
				bean[0].sendMessageString("投入区分", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("tonyu_div"));

				// サービス詳細識別番号 ← 一時金一意照会マップ.一時金一意照会明細.サービス詳細識別番号
				// 製造機器番号がある場合、製造機器番号を設定
				String svcDtlSkbtNo = "";
				if (childMap.get("kiki_seizo_no") != null && !JCRUtilCommon.isNull(childMap.get("kiki_seizo_no")))
				{
					svcDtlSkbtNo = (String)childMap.get("kiki_seizo_no");
				}
				else
				{
					svcDtlSkbtNo = (String)childMap.get("svc_dtl_skbt_no");
				}
				bean[0].sendMessageString("サービス詳細識別番号", X31CWebConst.DATABEAN_SET_VALUE, svcDtlSkbtNo);

				// 表示用料金コース名称 ← 料金コースコード + ":" + 料金コース名称
				String pcrsCdNm = JCHDspEditUtil.pcrsNmEdit((String)childMap.get("trgt_pcrs_cd"), (String)childMap.get("trgt_pcrs_cd_nm"));
				bean[0].sendMessageString("表示用料金コース名称", X31CWebConst.DATABEAN_SET_VALUE, pcrsCdNm);

				// 料金項目抽出変換一意照会マップ.料金項目抽出変換一意照会明細.割引サービスコード
				String wribSvcCd = (String)childMap.get("wrib_svc_cd");
				bean[0].sendMessageString("割引サービスコード", X31CWebConst.DATABEAN_SET_VALUE, wribSvcCd);

				// 表示用料金サービス名称 ← 割引サービスコード + 料金サービスコード + ":" + 料金サービス名称
				String prcSvcCdNm = JCHDspEditUtil.campaignNmEdit(wribSvcCd, (String)childMap.get("trgt_prc_svc_cd"), (String)childMap.get("trgt_prc_svc_cd_nm"));
				bean[0].sendMessageString("表示用料金サービス名称", X31CWebConst.DATABEAN_SET_VALUE, prcSvcCdNm);

			}
		}

		return bean;
	}

	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：一時金更新
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getACSV000302SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("ACSV000302SC"))
		{
			parentMap = (HashMap)outputMap.get("ACSV000302SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listACSV000302SC_tonyu_div_info_EZM0171B012CBSMsg1List = bean[0].getDataBeanArray(ACW00104SFConst.TONYU_DIV_INFO);
		X31SDataBeanAccess subbean = listACSV000302SC_tonyu_div_info_EZM0171B012CBSMsg1List.getDataBean(0);

		subbean.sendMessage(ACW00104SFConst.TONYU_DIV_CD_LIST_01, X31CWebConst.DATABEAN_CLEAR);
		subbean.sendMessage(ACW00104SFConst.TONYU_DIV_NM_LIST_01, X31CWebConst.DATABEAN_CLEAR);
		subbean.sendMessage(ACW00104SFConst.TONYU_DIV_SHK_DSP_CD_LIST_01, 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(ACW00104SFConst.TONYU_DIV_CD_LIST_01, 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(ACW00104SFConst.TONYU_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, tonyuDivNm);

				// 投入区分情報.投入区分初期表示コードリスト ← 投入区分一覧取得マップ.コード名称管理コード区分一覧照会明細.初期表示コード
				subbean.sendMessageString(ACW00104SFConst.TONYU_DIV_SHK_DSP_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, (String)childMap.get("shk_dsp_cd"));

			}
		}

		return bean;
	}

	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：一時金更新
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getACSV000303SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("ACSV000303SC"))
		{
			parentMap = (HashMap)outputMap.get("ACSV000303SC");
		}

		ArrayList childList = null;

		if (parentMap.containsKey("ECH0401A010CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("ECH0401A010CBSMsg1List");
			if (childList.size() > 0)
			{
				HashMap childMap = (HashMap)childList.get(0);

				String wribSvcCd = bean[0].sendMessageString("割引サービスコード", X31CWebConst.DATABEAN_GET_VALUE);

				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"); // 料金項目抽出変換一意照会マップ.料金項目抽出変換一意照会明細.料金項目コード名称

				Boolean isSelectedCamp = false;
				// キャンペーンの選択有無を判断
				if (JCHWebCommon.isNotNullOrEmpty(wribSvcCd.trim()))
				{
					isSelectedCamp = true;
				}

				// 出力料金項目コード ← 料金項目抽出変換一意照会マップ.料金項目抽出変換一意照会明細.料金項目コード
				bean[0].sendMessageString("出力料金項目コード", X31CWebConst.DATABEAN_SET_VALUE, prcKmkCd);

				// 表示用料金項目名称 ← 料金項目コード + 料金サービスコード + ":" + 料金項目コード名称
				String prcKmkCdNm = JCHDspEditUtil.prcKmkNmEdit(prcKmkCd, prcKmkNm, prcSvcCd, isSelectedCamp);
				bean[0].sendMessageString("表示用料金項目名称", X31CWebConst.DATABEAN_SET_VALUE, prcKmkCdNm);
			}
		}

		return bean;
	}

}
