/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CHSV0048_CHSV0048OPDBMapper
*	ソースファイル名：CHSV0048_CHSV0048OPDBMapper.java
*	作成者			：FJ
*	日付			：2012年08月02日
*＜機能概要＞
*	BP（請求内訳再発行）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/08/02	FJ		新規作成
*	v12.00.00	2015/03/04	FJ)桑島		【OM-2014-0003792】料金対応記録設定対応
*	v68.00.00	2023/10/25	FJ)寺田		【ANK-4475-00-00】 インボイス対応 STEP2
*   v71.00.00   2024/04/01  FJ)張       【ANK-4543-00-00】【eo定期】NTT卸対応：Step0
**********************************************************************/
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.CHW00109SF.CHW00109SFConst;
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.JCHWebCommon;
import eo.web.webview.common.JCRWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CHSV0048_CHSV0048OPDBMapper {
	
	/**
	 * コンストラクタ
	 */
	public CHSV0048_CHSV0048OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：請求内訳再発行
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV004801SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		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_RYOKIN_KEISAN_YMD);

		outputMap.put("CHSV004801SC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：請求内訳再発行
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV004802SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		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("seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// 固定値:投入区分（請求月指定） → 一時金登録マップ.投入区分
		parentMap.put("tonyu_div", JACStrConst.TONYU_DIV_SEIKY_MON);

		// 手数料コード → 一時金登録マップ.一時金料金
		parentMap.put("icjkn_prc", bean[0].sendMessageString("手数料有無コード", X31CWebConst.DATABEAN_GET_VALUE));

		// 手数料選択出力料金グループコード → 一時金登録マップ.対象料金グループコード
		parentMap.put("trgt_prc_grp_cd", bean[0].sendMessageString("手数料選択出力料金グループコード", X31CWebConst.DATABEAN_GET_VALUE));
		// 手数料選択出力料金コースコード → 一時金登録マップ.対象料金コースコード
		parentMap.put("trgt_pcrs_cd", bean[0].sendMessageString("手数料選択出力料金コースコード", X31CWebConst.DATABEAN_GET_VALUE));
		// 手数料選択出力料金サービスコード → 一時金登録マップ.対象料金サービスコード
		parentMap.put("trgt_prc_svc_cd", bean[0].sendMessageString("手数料選択出力料金サービスコード", X31CWebConst.DATABEAN_GET_VALUE));
		// 手数料選択出力料金項目コード → 一時金登録マップ.対象料金項目コード
		parentMap.put("trgt_prc_kmk_cd", bean[0].sendMessageString("手数料選択出力料金項目コード", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("CHSV004802SC", 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();

		ArrayList<HashMap<String, Object>> taioKirokAddList = new ArrayList<HashMap<String, Object>>();

		HashMap<String, Object> childMap = new HashMap<String, Object>();

		// 請求書再発行["104"固定] → 対応記録登録マップ.対応記録登録リスト.料金対応記録種別コード
		childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_SKS_SAIHAKKO);

		// 料金対応記録種別詳細コード → 対応記録登録マップ.対応記録登録リスト.料金対応記録種別詳細コード
		childMap.put("prc_taio_kirok_dtl_bunrui_cd", getPrcTaioKirokSbtDtlCd(bean));

		// "請求内訳再発行画面" → 対応記録登録マップ.対応記録登録リスト.タイトル
		childMap.put("title", JACScreenConst.SCREEN_NAME_CHW00109);

		// 記事 → 対応記録登録マップ.対応記録登録リスト.問合せ内容
		childMap.put("toiawase_naiyo", bean[0].sendMessageString("記事", 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>();

		// 請求書再発行["104"固定] → 対応記録登録マップ.応対区分カテゴリーリスト.料金対応記録種別コード
		ctgrMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_SKS_SAIHAKKO);

		// 料金対応記録種別詳細コード → 対応記録登録マップ.応対区分カテゴリーリスト.料金対応記録種別詳細コード
		ctgrMap.put("prc_taio_kirok_dtl_bunrui_cd", getPrcTaioKirokSbtDtlCd(bean));

		// 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);

		ArrayList list = null;

		if(parentMap.containsKey("prc_taio_kirok_list")){
			list = (ArrayList)parentMap.get("prc_taio_kirok_list");
		}else{
			list = new ArrayList();
		}

		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(CHW00109SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 請求書再発行["104"固定] → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応記録種別コード
		childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_SKS_SAIHAKKO);

		// 料金対応記録種別詳細コード → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応記録種別詳細コード
		childMap.put("prc_taio_kirok_sbt_dtl_cd", getPrcTaioKirokSbtDtlCd(bean));

		//OM-2014-0003792 MOD START
		// "請求内訳再発行画面" → 料金対応記録登録マップ.料金対応記録明細リスト.タイトル
		//childMap.put("title", JACScreenConst.SCREEN_NAME_CHW00109);
		childMap.put("title", getPrcTaioKirokSbtDtlCdNm(bean));
		//OM-2014-0003792 MOD START

		// 記事 → 料金対応記録登録マップ.料金対応記録明細リスト.記事
		childMap.put("kiji", bean[0].sendMessageString(CHW00109SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE));

		// 請求年月 → 料金対応記録登録マップ.料金対応記録明細リスト.記録対象年月
		childMap.put("kirok_tg_ym", bean[0].sendMessageString("請求年月", X31CWebConst.DATABEAN_GET_VALUE));

		// 対応履歴表示 → 料金対応記録登録マップ.料金対応記録明細リスト.対応履歴連動対象フラグ
		childMap.put("taiorrki_rendo_tg_flg", JCHWebCommon.getRendoFlg(bean[0], CHW00109SFConst.TAIO_RIREKI_DSP));

		list.add(childMap);

		parentMap.put("prc_taio_kirok_list", list);
		outputMap.put("PRCTAIOKIROKADDCC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：請求内訳再発行
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setTUSHINSVCPRCCHOHYOCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		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);

// ANK-4475-00-00 MOD START
//		// 請求契約番号 → 通信サービス料金帳票マップ.ＫＥＹ＿請求契約番号
//		parentMap.put("key_seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));
//		// 請求番号 → 通信サービス料金帳票マップ.ＫＥＹ＿請求番号
//		parentMap.put("key_seiky_no", bean[0].sendMessageString("請求番号", X31CWebConst.DATABEAN_GET_VALUE));
//		// 請求年月 → 通信サービス料金帳票マップ.ＫＥＹ＿請求年月
//		parentMap.put("key_seiky_ym", bean[0].sendMessageString("請求年月", X31CWebConst.DATABEAN_GET_VALUE));
//		// "5"内訳出力 → 通信サービス料金帳票マップ.帳票区分
//		parentMap.put("chohyo_kbn", "5");
//		// "0"出力なし → 通信サービス料金帳票マップ.内訳出力フラグ
//		parentMap.put("ucwk_oput_flg", "0");
//		// 通信サービス料金帳票マップ.サービス名
//		parentMap.put("sc_name", null);

		ArrayList list = null;
		if (parentMap.containsKey("tushin_svc_prc_output_list")) {
			list = (ArrayList) parentMap.get("tushin_svc_prc_output_list");
		} else {
			list = new ArrayList();
		}

		// 請求年月・請求番号のMAX情報
		X31SDataBeanAccessArray seiky_ym_info = bean[0].getDataBeanArray("請求年月出力情報");
		X31SDataBeanAccess subbean1 = seiky_ym_info.getDataBean(0);
		// 請求年月リストの件数を格納
		int seiky_ym_count = ((Integer) subbean1.sendMessage("請求年月出力リスト", X31CWebConst.DATABEAN_GET_COUNT)).intValue();

		for (int i = 0; i < seiky_ym_count; i++) {

			HashMap childMap = new HashMap();

			// 請求番号 → 通信サービス料金帳票マップ.List_請求番号
			childMap.put("list_seiky_no", subbean1.sendMessageString("請求番号出力リスト", X31CWebConst.DATABEAN_GET_VALUE, i));
			// 請求年月 → 通信サービス料金帳票マップ.List_請求年月
			childMap.put("list_seiky_ym", subbean1.sendMessageString("請求年月出力リスト", X31CWebConst.DATABEAN_GET_VALUE, i));

			// スキップフラグ(固定値：0(スキップしない)) → 通信サービス料金帳票マップ.List_スキップフラグ
			childMap.put("list_skip_flg", "0");
			// 再計算金額出力文字 → 通信サービス料金帳票マップ.再計算金額出力文字
			// 再計算が発生した場合、文字が設定され料金履歴・対応履歴の記事・問い合わせ内容の頭に設定される。101文字以上は切り捨て加工を行う。
			childMap.put("list_recal_amount", "");

			// 記事 → 通信サービス料金帳票マップ.List_記事 再計算額出力文字＋記事(１００字以内)で料金履歴・対応記録に登録する
			childMap.put("list_recal_kiji", bean[0].sendMessageString(CHW00109SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE));
			// 記事 → 通信サービス料金帳票マップ.List_記事_初期化・初期値用
			childMap.put("list_init_kiji", bean[0].sendMessageString(CHW00109SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE));
// ANK-4543-00-00 ADD START
			// NTT卸契約が重複取得した場合、通信サービス料金帳票マップ.List_NTTエラーフラグが設定される。。
			childMap.put("ntt_err_flg", "");
// ANK-4543-00-00 ADD END			
			list.add(childMap);
		}

		// 1件目のKEY情報は先に入れておく
		// 請求契約番号 → 通信サービス料金帳票マップ.ＫＥＹ＿請求契約番号
		parentMap.put("key_seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// 請求番号 → 通信サービス料金帳票マップ.ＫＥＹ＿請求番号
		parentMap.put("key_seiky_no", subbean1.sendMessageString("請求番号出力リスト", X31CWebConst.DATABEAN_GET_VALUE, 0));
		// 請求年月 → 通信サービス料金帳票マップ.ＫＥＹ＿請求年月
		parentMap.put("key_seiky_ym", subbean1.sendMessageString("請求年月出力リスト", X31CWebConst.DATABEAN_GET_VALUE, 0));

		// "5"内訳出力 → 通信サービス料金帳票マップ.帳票区分
		parentMap.put("chohyo_kbn", "5");
		// "0"出力なし → 通信サービス料金帳票マップ.内訳出力フラグ
		parentMap.put("ucwk_oput_flg", "0");
		// 通信サービス料金帳票マップ.サービス名
		parentMap.put("sc_name", null);

		parentMap.put("tushin_svc_prc_output_list", list);
// ANK-4475-00-00 MOD END
		
		outputMap.put("TUSHINSVCPRCCHOHYOCC", parentMap);

		return outputMap;
	}

	/**
	 * 料金対応記録種別詳細コードを取得します。
	 * @param bean　[0]：請求内訳再発行
	 * @return String　料金対応記録種別詳細コード
	 */
	private String getPrcTaioKirokSbtDtlCd(X31SDataBeanAccess[] bean) {

		String prcTaioKirokSbtDtlCd = null;

		// 手数料コード
		String tesuryo = bean[0].sendMessageString(CHW00109SFConst.TESURYO_UM_CD, X31CWebConst.DATABEAN_GET_VALUE);

		if (JCHWebCommon.isNullOrEmpty(tesuryo))
		{
			prcTaioKirokSbtDtlCd = JACStrConst.TKRK_SBTD_SEIKYUW_CMS_NON;
		}
		else
		{
			prcTaioKirokSbtDtlCd = JACStrConst.TKRK_SBTD_SEIKYUW_CMS_ARI;
		}

		return prcTaioKirokSbtDtlCd;
	}
	
	//OM-2014-0003792 ADD START
	/**
	 * 料金対応記録種別詳細コードを取得します。
	 * @param bean　[0]：請求内訳再発行
	 * @return String　料金対応記録種別詳細コード
	 */
	private String getPrcTaioKirokSbtDtlCdNm(X31SDataBeanAccess[] bean) {

		String prcTaioKirokSbtDtlCdNm = null;

		// 手数料コード
		String tesuryo = bean[0].sendMessageString(CHW00109SFConst.TESURYO_UM_CD, X31CWebConst.DATABEAN_GET_VALUE);

		if (JCHWebCommon.isNullOrEmpty(tesuryo))
		{
			prcTaioKirokSbtDtlCdNm = JACStrConst.SEIKYUW_CMS_NON;
		}
		else
		{
			prcTaioKirokSbtDtlCdNm = JACStrConst.SEIKYUW_CMS_ARI;
		}

		return prcTaioKirokSbtDtlCdNm;
	}
	//OM-2014-0003792 ADD START

// ANK-4475-00-00 ADD START
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：請求書（宛名）
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setSKSATENACHOHYOCC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {

		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_seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));

		// 宛名出力有無コード → 請求書（宛名）帳票マップ.宛名出力有無コード(実行判定部品に使用)
		parentMap.put("atena_output_um_cd", bean[0].sendMessageString("宛名出力有無コード", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("SKSATENACHOHYOCC", parentMap);

		return outputMap;
	}
// ANK-4475-00-00 ADD END
	
}