/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0120_KKSV0120OPDBMapper
*	ソースファイル名：KKSV0120_KKSV0120OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年07月09日
*＜機能概要＞
*	BP（ｅｏ光テレビ登録）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/09	FJ			新規作成
*	V4.00.00    2012/09/04  FJ) 高川    【ANK-1200-00-00】申込書番号、申込書明細番号の名称見出し変更
*   v4.01.00    2012/11/20  FJ) 北浦    【IT1-2012-0002082】ＳＴＢ（２台目以降）不正対応
*   v4.02.00    2012/11/20  FJ) 渡邉    【IT1-2012-0001132】サービス契約内訳の支払い方法継続フラグにはNULLを設定する
*   v4.03.00    2012/11/28  FJ）松川    【ANK-1247-00-00】工事依頼情報_連絡事項桁数対応
*   v4.04.00    2013/01/07  FJ）谷口    【ST2-2013-0000002】再送信多CH時の料金プランコード不審
*   v5.00.00    2013/01/17  FJ）松川    【ANK-1355-00-00】必須チェック外し
*   v5.01.00    2013/01/23  FJ) 北浦    【KAD-2012-0001108】書面での受付番号の申込イメージの紐付けについて
*   v5.02.00    2013/01/30  FJ）中山    【ST1-2013-0000265】マンションコースでeo光テレビのコースがＨＤコース固定になる処理を排除
*   v5.03.00    2013/02/09  FJ）渡邉    【IT1-2013-0000244】メゾンタイプ、K-CATのSTB5台申込時の登録処理を修正
*   v5.04.00    2013/02/19  FJ）松田    【ANK-1447-00-00】買取機器の返品処理機能の漏れ対応
*   v5.05.00    2013/02/26  FJ）渡邉    【ST1-2013-0000253】ケーブルガイド誌のガイド誌送付先名、カナ名、電話番号にはNULLを設定する
*   v8.00.00    2014/02/04  FJ）松田    【ANK-1589-00-00】消費増税に伴う料金施策
*   v45.00.00   2019/07/30  FJ) 三原    【IT1-2019-0000063】事務手数料の更新不正
*   v74.00.00   2024/12/05  FJ) 森下    【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応）
**********************************************************************/
package eo.web.webview.mapping;

import static eo.web.webview.common.JKKKeiNewCmnLogicUtil.*;

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.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.KKW00121SF.KKW00121SFConst;
import eo.web.webview.KKW00121SF.KKW00121SFLogic;
import eo.web.webview.common.JKKWebCommon;

/**
 * DataBean-BPマッピングをする。
 * <BR>
 * @author 富士通
 */
public class KKSV0120_KKSV0120OPDBMapper
{

	/**
	 * コンストラクタ
	 */
	public KKSV0120_KKSV0120OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：申込新規登録画面
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return マッピング結果
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV012001SC(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);

		// 電障コード → サービス契約＜eo光テレビ＞登録マップ.ＫＥＹ＿電波障害案件番号
		parentMap.put("key_dmps_anken_no", bean[0].sendMessageString(KKW00121SFConst.DMPS_ANKEN_NO,
				X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("KKSV012001SC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：照査前登録画面
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param mskmMap
	 * @param opeDateTimeStamp 運用日時
	 * @param viewLogic ビューロジック
	 * @return データ格納マップ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV012001CC(X31SDataBeanAccess[] bean, HashMap outputMap, 
			String func_code, HashMap mskmMap, String opeDateTimeStamp, JCCWebBusinessLogic viewLogic) throws Exception
	{
		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		
		X31SDataBeanAccessArray dataBeanArray = null;
		X31SDataBeanAccess subBean = null;
		X31SDataBeanAccess dataBean = bean[0];
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		String catvCompFlg = dataBean.sendMessageString(KKW00121SFConst.CATV_COMP_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		
		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 異動区分
		String mskmFlg = bean[0].sendMessageString(KKW00121SFConst.MSKM_SBT_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String idoDiv = "";
		if (MSKM_FLG_SHINKI.equals(mskmFlg))
		{
			// 00001（新規契約）
			idoDiv = JKKStrConst.CD00576_00001;
		}
		else
		{
			// 00002（サービス追加）
			idoDiv = JKKStrConst.CD00576_00002;
		}
		
		/*-----------------------------------------------
		 * 申込明細登録
		 *-----------------------------------------------*/
		// 申込番号
		String mskmNo = bean[0].sendMessageString(KKW00121SFConst.MSKM_NO, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("kk0021_mskm_no", mskmNo);

		// 申込明細登録マップ.SYSID
		parentMap.put("kk0021_sysid", bean[0].sendMessageString(KKW00121SFConst.PARAM_SYSID, X31CWebConst.DATABEAN_GET_VALUE));

		// 申込形態コード
		parentMap.put("kk0021_mskm_form_cd", bean[0].sendMessageString(KKW00121SFConst.MSKM_FORM_CD, X31CWebConst.DATABEAN_GET_VALUE));

		// 新規申込種別コード
		parentMap.put("kk0021_new_mskm_sbt_cd", bean[0].sendMessageString(KKW00121SFConst.KAISEN_PLACE_TELNO, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 申込明細ステータス(010：受付済)
		parentMap.put("kk0021_mskm_dtl_stat", JKKStrConst.MSKM_DTL_STAT_UKETSUKEZUMI);

		// 新築物件コード
		parentMap.put("kk0021_newconst_bukken_cd", NEWCONST_BKN_CD_SHKV);	// 0:空白

		// 復活案件フラグ
		parentMap.put("kk0021_hukkat_anken_flg", HUKKAT_NASHI);	// 0:空白

		// 同一設備再申込コード
		parentMap.put("kk0021_same_equip_re_mskm_cd", SAME_EQUIP_RE_MSKM_CD_SHKV);	// 0:空白

		// 新規申込種別コード
		parentMap.put("kk0021_new_mskm_sbt_cd", JKKStrConst.CD00683_TTL_UK);	// 004:総合受付
		
		// オプションサービス引継有無
		parentMap.put("kk0021_op_svc_hktgi_um", bean[0].sendMessageString(KKW00121SFConst.SVC_NYO_HKTGI, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 解約書類送付希望有無
		parentMap.put("kk0021_dsl_aticle_sohu_kibo_um", 
				bean[0].sendMessageString(KKW00121SFConst.DSL_BUNSHO_KIND_SOHU_KIBO, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 本人確認書類種別コード
		String hninCfmCd = JKKWebCommon.getPullDownCode(bean[0], KKW00121SFConst.HNIN_CFM_BUNSHO_KIND_SBT_LIST, 
				KKW00121SFConst.SELECT_CD_58, KKW00121SFConst.CD_LIST_58);
		parentMap.put("kk0021_hnin_cfm_aticle_sbt_cd", hninCfmCd);
		
		// 地図添付有無
		String mapTempUm = JKKWebCommon.getPullDownCode(bean[0], KKW00121SFConst.MAPTEMP_ARI,
				KKW00121SFConst.MAP_TEMP_UM_CD_45, KKW00121SFConst.MAP_TEMP_UM_CD_LIST_45);
		parentMap.put("kk0021_map_temp_um", mapTempUm);

		/** KCN */
		if (catvCompFlg.equals(CATV_COMP_FLG_KCN))
		{	
			dataBeanArray = dataBean.getDataBeanArray(KKW00121SFConst.KCN_TUNER_USE_CNT_LIST);
			subBean = dataBeanArray.getDataBean(0);
			int kcnUseCnt = Integer.parseInt(subBean.sendMessageString(KKW00121SFConst.TUNER_USE_CNT_CD_23, X31CWebConst.DATABEAN_GET_VALUE)) + 1;
			String kcnCode = "";
			kcnCode = getKcnStbKindCd(dataBean, KKW00121SFConst.KCN_TUNER_USE_CNT_LIST, 
					KKW00121SFConst.TUNER_USE_CNT_CD_23, KKW00121SFConst.KCN_TV_TUNER_LIST , KKW00121SFConst.KCN_TV_TUNER_04);
			
			//KCNSTB申込台数
			parentMap.put("kk0021_kcn_stb_mskm_cnt", Integer.toString(kcnUseCnt));	
			//KCNSTB種類コード
			parentMap.put("kk0021_kcn_stb_kind_cd", kcnCode);	
		}


		// 申込年月日
		String mskmYmd =
				bean[0].sendMessageString(KKW00121SFConst.MSKM_YMD_Y, X31CWebConst.DATABEAN_GET_VALUE)
						+ bean[0].sendMessageString(KKW00121SFConst.MSKM_YMD_M, X31CWebConst.DATABEAN_GET_VALUE)
						+ bean[0].sendMessageString(KKW00121SFConst.MSKM_YMD_D, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("kk0021_mskm_ymd", mskmYmd);

		parentMap.put("kk0101_svc_kei_stat", JKKStrConst.CD00037_UK_ZM); // サービス契約ステータス
		parentMap.put("kk0101_svc_cd", JKKStrConst.CD00130_03); // サービスコード
		parentMap.put("kk0101_ido_div", idoDiv); // 異動区分
		parentMap.put("kk0101_sysid", dataBean.sendMessageString(KKW00121SFConst.PARAM_SYSID, X31CWebConst.DATABEAN_GET_VALUE)); // SYSID

		if (JPCModelConstant.FUNC_CD_1.equals(func_code))
		{
			//紹介コード
			parentMap.put("kk0101_intr_cd", bean[0].sendMessageString(KKW00121SFConst.INTR_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}

		parentMap.put("kk0101_rule0059_auto_aply", JKKStrConst.CD00001_0); // 事務手数料自動適用要否
		parentMap.put("kk0101_rule0079_auto_aply", JKKStrConst.CD00001_0); // 工事費自動適用要否
		// 業務連絡備考
		parentMap.put("kk0101_work_rrk_biko", bean[0].sendMessageString(KKW00121SFConst.TV_KIJIRAN, X31CWebConst.DATABEAN_GET_VALUE));
		// 自動照査処理状態コード
		parentMap.put("kk0101_auto_shosa_tran_stat_cd", JKKStrConst.CD00628_TGG);
		
		// 支払方法継続フラグ対応
		if (MSKM_FLG_TSUIKA.equals(mskmFlg))
		{
			// サービス契約＜ｅｏ光テレビ＞登録マップ.支払方法継続フラグ(追加時のみ)
			parentMap.put("kk0101_payway_keizoku_flg", dataBean.sendMessageString(
					KKW00121SFConst.PAYWAY_KEIZOKU_FLG, X31CWebConst.DATABEAN_GET_VALUE));
		}
		// 料金コースコード（サービス契約＜ＴＶ＞）
		parentMap.put("kk0101_pcrs_cd", getTvSvcKeiPcrsCd(dataBean));
		// 料金プランコード（サービス契約＜ＴＶ＞）
		parentMap.put("kk0101_pplan_cd", getTvSvcKeiPplanCd(dataBean));
		// 料金グループコード
		parentMap.put("kk0101_prc_grp_cd", getTvSvcKeiPgrpCd(dataBean));
		
		//再送信
		if (catvCompFlg.equals(CATV_COMP_FLG_RESEND))
		{
			parentMap.put("kk0101_dmps_anken_no", dataBean.sendMessageString(KKW00121SFConst.DMPS_ANKEN_NO,
			X31CWebConst.DATABEAN_GET_VALUE)); // 電波障害案件番号
			
			//チャンネル　多CH未選択時
			if (dataBean.sendMessageBoolean(KKW00121SFConst.MULTI_CHANNEL, X31CWebConst.DATABEAN_GET_VALUE).equals(false))
			{
				parentMap.put("kk0101_re_send_tk_svc_sbt_cd", JKKWebCommon.convertCode(dataBean, KKW00121SFConst.RE_SEND_TK_SVC_SBT_CD,
						KKW00121SFConst.SSSTYPE_CD_55, KKW00121SFConst.SSSTYPE_CD_LIST_55)); // 再送信種別
			}
		}

		ArrayList dataList = new ArrayList();
		parentMap.put("svc_kei_ucwk_list", dataList);

		// ANK-4592-00-00 MOD START
		/** K-CAT 或いは 再送信  かつ　ベーシック 或いは CSコース*/
//		if ((catvCompFlg.equals(CATV_COMP_FLG_KCAT) || catvCompFlg.equals(CATV_COMP_FLG_RESEND))
//				&& dataBean.sendMessageString(KKW00121SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE).equals("1"))
		if ((catvCompFlg.equals(CATV_COMP_FLG_KCAT) || catvCompFlg.equals(CATV_COMP_FLG_RESEND))
				&& (dataBean.sendMessageString(KKW00121SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE).equals("1")
						|| MSKM_SVC_CHOICE_CD_CSBASIC.equals(dataBean.sendMessageString(KKW00121SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))
						|| MSKM_SVC_CHOICE_CD_CSPREMIUM.equals(dataBean.sendMessageString(KKW00121SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE))))
		// ANK-4592-00-00 MOD END
		{
			parentMap.put("kk0381_op_svc_cd", JKKStrConst.OP_SVC_CABLE_GUDMG); // オプションサービスコード
			parentMap.put("kk0381_ido_div", idoDiv); // 異動区分
			parentMap.put("kk0381_op_svc_kei_stat", JKKStrConst.OP_SVC_STAT_UKETSUKEZUMI); // オプションサービス契約ステータス
			parentMap.put("kk0381_sysid", dataBean.sendMessageString(KKW00121SFConst.PARAM_SYSID, X31CWebConst.DATABEAN_GET_VALUE)); // SYSID
			parentMap.put("kk0381_pcrs_cd", JKKStrConst.CD00134_B36); // 料金コースコード（オプションサービス契約＜ＴＶ＞）
			parentMap.put("kk0381_pplan_cd", JKKStrConst.OPSVC_PPLAN_CABLE_GUDMG); // 料金プランコード（オプションサービス契約＜ＴＶ＞）

			/** 親契約識別コード */
			parentMap.put("kk0381_oya_kei_skbt_cd", JKKStrConst.CD_DIV_OYAKEISKBTCD_SVCKEI);

			/** ケーブルガイド誌の申込冊数 */
			String cnt = dataBean.sendMessageString(KKW00121SFConst.CABLE_GUIDE_MSKM_CNT, X31CWebConst.DATABEAN_GET_VALUE);
			int cable_guide_mskm_cnt = 0;
			if (!"".equals(cnt) && cnt.matches("[0-9]+"))
			{
				cable_guide_mskm_cnt = Integer.parseInt(cnt);
				parentMap.put("kk0381_cable_guide_mskm_cnt", String.valueOf(cable_guide_mskm_cnt));
			}	
			else
			{
				parentMap.put("kk0381_cable_guide_mskm_cnt", String.valueOf(cnt));
			}

			// ガイド誌送付先個別指定フラグ
			parentMap.put("kk0381_guidemg_shs_ksitei_flg", JKKStrConst.CD00010_KOBET_NASHI);
			
			//ガイド誌送付先住所手動入力フラグ
			parentMap.put("kk0381_gudmg_shs_ad_man_input_flg", JKKStrConst.AD_MAN_INPUT_NO);
		}

		outputMap.put("KKSV012001CC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：照査前登録画面
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param opeDate 運用日付
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV012002CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, String opeDate)
	{

		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);

		X31SDataBeanAccess dataBean = bean[0];
		String catvCompFlg = dataBean.sendMessageString(KKW00121SFConst.CATV_COMP_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		/*-----------------------------------------------
		 * 一時金設定登録
		 *-----------------------------------------------*/
		// 一時支払料金番号
		if (CATV_COMP_FLG_KCAT.equals(catvCompFlg))
		{
			// IT1-2019-0000063 MOD START
			//parentMap.put("tmp_pay_prc_no", JKKStrConst.TPP_KNYKEI_KCAT_8PER); // 加入契約料(K-CAT)
			parentMap.put("tmp_pay_prc_no", JKKStrConst.TPP_KNYKEI_KCAT_10PER); // 加入契約料(K-CAT)
			// IT1-2019-0000063 MOD END
		}

		// 一時金設定コード
		X31SDataBeanAccessArray dataBeanArray = bean[0].getDataBeanArray(KKW00121SFConst.SVC_MSKM_INFO);
		X31SDataBeanAccess subDataBean = dataBeanArray.getDataBean(KKW00121SFLogic.KKW00180_TAB_INDEX);
		String inputValue = null;
		int index = 0;
		try
		{
			String selectedIndex = subDataBean.sendMessageString(KKW00121SFConst.JIMU_COMMISION_22, X31CWebConst.DATABEAN_GET_VALUE);
			index = Integer.parseInt(selectedIndex);
			X31SDataBeanAccess comboBean = bean[0].getDataBeanArray(KKW00121SFConst.JIMU_COMMISION).getDataBean(0);
			inputValue = comboBean.sendMessageString(KKW00121SFConst.JIMU_COMMISION_CD_LIST_25, X31CWebConst.DATABEAN_GET_VALUE, index);
		}
		catch (NumberFormatException e)
		{
			inputValue = "00";
		}
		parentMap.put("icjkn_sette_cd", inputValue);

		// 一時金指定額
		String jimuCommisionShitei = subDataBean.sendMessageString(KKW00121SFConst.JIMU_COMMISION_SHITEI_22, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("icjkn_shitei_amnt", jimuCommisionShitei);

		outputMap.put("KKSV012002CC", parentMap);

		return outputMap;
	}
	
	/**
	 * 下りマッピングをする
	 * @param bean　[0]：申込新規登録画面
	 * @param outputMap
	 * @return X31SDataBeanAccess[]
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV012001SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		if (bean == null)
		{
			return null;
		}
		if (!outputMap.containsKey("KKSV012001SC"))
		{
			return null;
		}
		HashMap parentMap = (HashMap)outputMap.get("KKSV012001SC");
		if (parentMap == null)
		{
			return null;
		}

		ArrayList childList = null;

		childList = (ArrayList)parentMap.get("EKK0581A010CBSMsg1List");

		if (childList == null || 0 == childList.size())
		{
			return null;
		}

		HashMap childMap = (HashMap)childList.get(0);

		// 電波障害相対料金プランコード
		bean[0].sendMessageString(KKW00121SFConst.DMPS_ANKEN_AITAI_PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE,
				((String)childMap.get("dmps_anken_aitai_pplan_cd")));

		return bean;
	}
}