/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CHSV0022_CHSV0022OPDBMapper
*	ソースファイル名：CHSV0022_CHSV0022OPDBMapper.java
*	作成者			：FJ
*	日付			：2013年08月09日
*＜機能概要＞
*	BP（請求書引抜き登録）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/08/09	FJ		新規作成
*
**********************************************************************/
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 eo.common.constant.JACStrConst;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CHW00501SF.CHW00501SFConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHWebCommon;
import eo.web.webview.common.JCRWebCommon;
/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CHSV0022_CHSV0022OPDBMapper
 {
	
	/**
	 * コンストラクタ
	 */
	public CHSV0022_CHSV0022OPDBMapper()
	{
	}
	

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：請求書引抜き登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV002201SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		// 引抜き種別選択された情報を取得
		X31SDataBeanAccess hikinukiSbtInfo = bean[0].getDataBeanArray(CHW00501SFConst.HIKINUKI_SBT_INFO).getDataBean(0);
		String hikinukiSbtIndex = hikinukiSbtInfo.sendMessageString(CHW00501SFConst.HIKINUKI_SBT_SEL_02, X31CWebConst.DATABEAN_GET_VALUE);
		String hikinukiSbtCd = hikinukiSbtInfo.sendMessageString(CHW00501SFConst.HIKINUKI_SBT_CD_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, Integer
				.parseInt(hikinukiSbtIndex));

		// 引抜き理由選択された情報を取得
		X31SDataBeanAccess hikinukiRsnInfo = bean[0].getDataBeanArray(CHW00501SFConst.HIKINUKI_RSN_INFO).getDataBean(0);
		String hikinukiRsnIndex = hikinukiRsnInfo.sendMessageString(CHW00501SFConst.HIKINUKI_RSN_SEL_03, X31CWebConst.DATABEAN_GET_VALUE);
		String hikinukiRsnCd = hikinukiRsnInfo.sendMessageString(CHW00501SFConst.HIKINUKI_RSN_CD_LIST_03, X31CWebConst.DATABEAN_GET_VALUE, Integer
				.parseInt(hikinukiRsnIndex));

		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));

		// 引抜種別コード → 請求書引抜登録マップ.引抜種別コード
		parentMap.put("hikinuki_sbt_cd", hikinukiSbtCd);

		// 引抜理由コード → 請求書引抜登録マップ.引抜理由コード
		parentMap.put("hikinuki_rsn_cd", hikinukiRsnCd);

		outputMap.put("CHSV002201SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：請求書引抜き登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV002202SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		// 引抜き種別選択された情報を取得
		X31SDataBeanAccess hikinukiSbtInfo = bean[0].getDataBeanArray(CHW00501SFConst.HIKINUKI_SBT_INFO).getDataBean(0);
		String hikinukiSbtIndex = hikinukiSbtInfo.sendMessageString(CHW00501SFConst.HIKINUKI_SBT_SEL_02, X31CWebConst.DATABEAN_GET_VALUE);
		String hikinukiSbtCd = hikinukiSbtInfo.sendMessageString(CHW00501SFConst.HIKINUKI_SBT_CD_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, Integer
				.parseInt(hikinukiSbtIndex));

		// 引抜き理由選択された情報を取得
		X31SDataBeanAccess hikinukiRsnInfo = bean[0].getDataBeanArray(CHW00501SFConst.HIKINUKI_RSN_INFO).getDataBean(0);
		String hikinukiRsnIndex = hikinukiRsnInfo.sendMessageString(CHW00501SFConst.HIKINUKI_RSN_SEL_03, X31CWebConst.DATABEAN_GET_VALUE);
		String hikinukiRsnCd = hikinukiRsnInfo.sendMessageString(CHW00501SFConst.HIKINUKI_RSN_CD_LIST_03, X31CWebConst.DATABEAN_GET_VALUE, Integer
				.parseInt(hikinukiRsnIndex));

		X31SDataBeanAccess hikinukiInfo = bean[0].getDataBeanArray(CHW00501SFConst.HIKINUKI_INFO).getDataBean(0);
		// 請求書引抜番号
		String hikinukiNo = hikinukiInfo.sendMessageString(CHW00501SFConst.SKS_HIKINUKI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		// 更新年月日時分秒
		String updDtm = hikinukiInfo.sendMessageString(CHW00501SFConst.UPD_DTM_01, X31CWebConst.DATABEAN_GET_VALUE);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 請求書引抜番号 → 請求書引抜変更マップ.請求書引抜番号
		parentMap.put("sks_hikinuki_no", hikinukiNo);

		// 請求契約番号 → 請求書引抜変更マップ.請求契約番号
		parentMap.put("seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));

		// 引抜種別コード → 請求書引抜変更マップ.引抜種別コード
		parentMap.put("hikinuki_sbt_cd", hikinukiSbtCd);

		// 引抜理由コード → 請求書引抜変更マップ.引抜理由コード
		parentMap.put("hikinuki_rsn_cd", hikinukiRsnCd);

		// 更新年月日時分秒 → 請求書引抜変更マップ.更新前請求引抜更新年月日時分秒
		parentMap.put("sks_hikinuki_dtm_af", updDtm);

		outputMap.put("CHSV002202SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：請求書引抜き登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV002203SC(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);

		// 部品呼び出し → 料金スケジュール定義一意照会マップ.ＫＥＹ＿イベントコード
		parentMap.put("key_event_cd", JACStrConst.EVENT_CD_SEIKYUS_HIKINUKI_DATA_SND_YMD_3);
		// 部品呼び出し → 料金スケジュール定義一意照会マップ.ＫＥＹ＿運用日
		parentMap.put("key_unyo_day", JCCWebCommon.getOpeDate(bl, null));

		outputMap.put("CHSV002203SC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：請求書引抜き登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV002204SC(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);

		// 部品呼び出し → 料金スケジュール定義一意照会マップ２.ＫＥＹ＿イベントコード
		parentMap.put("key_event_cd", JACStrConst.EVENT_CD_SEIKYUS_HIKINUKI_KAIJO_YMD);
		// 部品呼び出し → 料金スケジュール定義一意照会マップ２.ＫＥＹ＿運用日
		parentMap.put("key_unyo_day", JCCWebCommon.getOpeDate(bl, null));

		outputMap.put("CHSV002204SC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：請求書引抜き登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@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();

		ArrayList<HashMap<String, Object>> taioKirokAddList = new ArrayList<HashMap<String, Object>>();

		HashMap<String, Object> childMap = new HashMap<String, Object>();

		//料金対応記録種別コード(:入金登録) → 対応記録登録マップ.料金対応記録種別コード
		childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_SKS_HIKNK_ADD);

		// 料金対応記録種別詳細コード(:手動入金) → 対応記録登録マップ.料金対応記録種別詳細コード
		childMap.put("prc_taio_kirok_dtl_bunrui_cd", this.getPrcTaioKirokSbtDtlCd(bean));

		// "請求書再発行" → 対応記録登録マップ.対応記録登録リスト.タイトル
		childMap.put("title", JACScreenConst.SCREEN_NAME_CHW00501);

		// 記事 → 対応記録登録マップ.対応記録登録リスト.問合せ内容
		childMap.put("toiawase_naiyo", bean[0].sendMessageString(CHW00501SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE));

		// 業務個別設定組織コード → 対応記録登録マップ.業務個別設定組織コード
		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>();

		//料金対応記録種別コード(:入金登録) → 対応記録登録マップ.料金対応記録種別コード
		ctgrMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_SKS_HIKNK_ADD);

		// 料金対応記録種別詳細コード(:手動入金) → 対応記録登録マップ.料金対応記録種別詳細コード
		ctgrMap.put("prc_taio_kirok_dtl_bunrui_cd", this.getPrcTaioKirokSbtDtlCd(bean));
		rspCtgrList.add(ctgrMap);

		// taio_kirok_add_listにrsp_ctgr_listを追加
		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　機能コード
	 */
	@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;
		}

		List<HashMap<String, Object>> list = null;
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		if (parentMap.containsKey("prc_taio_kirok_list"))
		{
			list = (ArrayList) parentMap.get("prc_taio_kirok_list");
		}
		else
		{
			list = new ArrayList();
		}

		X31SDataBeanAccess hikinukiInfo = bean[0].getDataBeanArray(CHW00501SFConst.HIKINUKI_INFO).getDataBean(0);

		HashMap childMap = new HashMap();

		// ◇料金対応記録(手動入金) → 料金対応記録登録マップ.料金対応記録明細リスト
		// ユーザＩＤ → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応ユーザＩＤ
		childMap.put("prc_taio_user_id", bean[1].sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE));

		// 請求契約番号 → 料金対応記録登録マップ.料金対応記録明細リスト.請求契約番号
		childMap.put("seiky_kei_no", bean[0].sendMessageString(CHW00501SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 料金対応記録種別コード(:請求書引抜き登録) → 対応記録登録マップ.料金対応記録種別コード
		childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_SKS_HIKNK_ADD);

		// 料金対応記録種別詳細コー ド(:選択された引抜き種別) → 対応記録登録マップ.料金対応記録種別詳細コード
		childMap.put("prc_taio_kirok_sbt_dtl_cd", this.getPrcTaioKirokSbtDtlCd(bean));

		// 記事 → 料金対応記録登録マップ.料金対応記録明細リスト.記事
		childMap.put("kiji", bean[0].sendMessageString(CHW00501SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE));

		// "請求書引抜き登録画面" → 対応記録登録マップ.対応記録登録リスト.タイトル
		childMap.put("title", JACScreenConst.SCREEN_NAME_CHW00501);

		// オンライン運用日 → 料金対応記録登録マップ.料金対応記録明細リスト.記録対象年月
		childMap.put("kirok_tg_ym", hikinukiInfo.sendMessageString("請求年月", X31CWebConst.DATABEAN_GET_VALUE));

		// 対応履歴表示 → 料金対応記録登録マップ.料金対応記録明細リスト.対応履歴連動対象フラグ
		childMap.put("taiorrki_rendo_tg_flg", JCHWebCommon.getRendoFlg(bean[0], "対応履歴表示"));

		list.add(childMap);

		parentMap.put("prc_taio_kirok_list", list);

		outputMap.put(JACStrConst.PRCTAIOKIROKADDCC_MAP_ID, parentMap);

		return outputMap;
	}

	/**
	 * 料金対応記録種別詳細コードを取得します。
	 * 
	 * @param bean　[0]：請求書引抜き解除
	 * @return String　料金対応記録種別詳細コード
	 */
	private String getPrcTaioKirokSbtDtlCd(X31SDataBeanAccess[] bean)
	{

		String prcTaioKirokSbtDtlCd = null;

		// 選択された引抜き種別を取得
		X31SDataBeanAccess hikinukiSbtInfo = bean[0].getDataBeanArray(CHW00501SFConst.HIKINUKI_SBT_INFO).getDataBean(0);
		String hikinukiSbtIndex = hikinukiSbtInfo.sendMessageString(CHW00501SFConst.HIKINUKI_SBT_SEL_02, X31CWebConst.DATABEAN_GET_VALUE);
		String hikinukiSbtCd = hikinukiSbtInfo.sendMessageString(CHW00501SFConst.HIKINUKI_SBT_CD_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, Integer
				.parseInt(hikinukiSbtIndex));

		if (JACStrConst.HKNK_SBT_CD_KJ_HKNK.equals(hikinukiSbtCd))
		{
			prcTaioKirokSbtDtlCd = JACStrConst.PRC_TAIO_KIROK_SBT_KJ_HKNK;
		}
		else
		{
			prcTaioKirokSbtDtlCd = JACStrConst.PRC_TAIO_KIROK_SBT_ICJ_HKNK;
		}

		return prcTaioKirokSbtDtlCd;
	}

}