/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CKSV0003_CKSV0003OPDBMapper
*	ソースファイル名：CKSV0003_CKSV0003OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2011年08月13日
*＜機能概要＞
*	BP（お客様情報登録初期表示情報取得OP）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/13	Fujitsu		新規作成
*	v4.00.00	2012/12/10	FJ）庭山	【IT1-2012-0002197】対応
*	v4.00.01	2012/12/21	FJ）庭山	【IT1-2012-0002526】対応
*	v39.00.00	2018/10/30	FJ）大崎	【ANK-3478-00-00】eo光設備卸対応(サービス開始対応)
*	v45.00.00	2019/08/01	FJ)Dave		【ANK-3699-00-00】
**********************************************************************/
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.util.JKKStringUtil;
import eo.web.webview.CKW00201SF.CKW00201SFConst;
import eo.web.webview.common.JCKCommonConst;
import eo.web.webview.common.JKKCommonConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CKSV0003_CKSV0003OPDBMapper {
	
	/** 初期値フラグ：0 */
	private static final String SHK_VALUE_FLG_0 = "0";
	/** 初期値フラグ：1 */
	private static final String SHK_VALUE_FLG_1 = "1";
	
	/**
	 * コンストラクタ
	 */
	public CKSV0003_CKSV0003OPDBMapper(){
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：お客様情報登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCKSV000301CC(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>();
		X31SDataBeanAccess subbean = bean[0].getDataBeanArray(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST).getDataBean(0);

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		// オンライン運用日付
		parentMap.put("ope_date", bean[0].sendMessageString(CKW00201SFConst.OPEDATE, X31CWebConst.DATABEAN_GET_VALUE));
		// 契約者分割フラグ
		parentMap.put("bnkt_flg", bean[0].sendMessageBoolean(CKW00201SFConst.KSH_BNKT_FLG, X31CWebConst.DATABEAN_GET_VALUE));

		// 顧客契約引継リスト.SYSID
		parentMap.put("key_sysid", subbean.sendMessageString(JKKCommonConst.HKTGI_SYSID, X31CWebConst.DATABEAN_GET_VALUE));
		// 顧客契約引継リスト.サービス契約番号
		parentMap.put("key_svc_kei_no", bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("CKSV000301CC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：お客様情報登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCKSV000301CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = (HashMap)outputMap.get("CKSV000301CC");
		boolean bnktFlg = bean[0].sendMessageBoolean(CKW00201SFConst.KSH_BNKT_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 会員種別
		X31SDataBeanAccessArray mmbSbtList = bean[0].getDataBeanArray(CKW00201SFConst.MEMBER_SBT);
		mmbSbtList.clearArray();
		
		ArrayList childList = (ArrayList)parentMap.get("mmb_sbt_list");
		X31SDataBeanAccess mmbSbtBean = mmbSbtList.addDataBean();
		int index = 0;
		
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);
			
			// 分割時
			if (bnktFlg)
			{
				// 00:非eo会員 以外は対象外
				if (!JCKCommonConst.CD00039_NOT_EO_MMB.equals((String)childMap.get("cd_div")))
				{
					continue;
				}
			}
			else
			{
				// 00:非eo会員 10:マスター会員（個人） 20:マスター会員（法人）は対象外
				if (JCKCommonConst.CD00039_NOT_EO_MMB.equals((String)childMap.get("cd_div"))
						|| JCKCommonConst.CD00039_MASTER_KOJIN.equals((String)childMap.get("cd_div"))
						|| JCKCommonConst.CD00039_MASTER_HOJIN.equals((String)childMap.get("cd_div")))
				{
					continue;
				}
			}
			
			setCodeListValue(mmbSbtBean, childMap, index++);
		}
		mmbSbtBean.sendMessageString(CKW00201SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, "0");
		
		// 契約者タイプ
		X31SDataBeanAccessArray kshTypeList = bean[0].getDataBeanArray(CKW00201SFConst.KYS_TYPE);
		kshTypeList.clearArray();
		
		childList = (ArrayList)parentMap.get("ksh_type_list");
		X31SDataBeanAccess kshTypeBean = kshTypeList.addDataBean();
		index = 0;
		
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);
			
			if (bnktFlg)
			{
				// 5:マンションオーナーは対象外
				if (JCKCommonConst.CD00036_MANS_OWNR.equals((String)childMap.get("cd_div")))
				{
					continue;
				}
			}
			else
			{
				// 2:法人 4:自社利用 5:マンションオーナーは対象外
				if (JCKCommonConst.CD00036_HOJIN.equals((String)childMap.get("cd_div"))
						|| JCKCommonConst.CD00036_JISHA_USE.equals((String)childMap.get("cd_div"))
						|| JCKCommonConst.CD00036_MANS_OWNR.equals((String)childMap.get("cd_div")))
				{
					continue;
				}
			}
			
			setCodeListValue(kshTypeBean, childMap, index++);
		}
		kshTypeBean.sendMessageString(CKW00201SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, "0");
		
		setCodeList(bean[0], parentMap, CKW00201SFConst.FAMILY_NINSHO_WAY, "ninsho_way_list");					// 家族認証方法
		setCodeList(bean[0], parentMap, CKW00201SFConst.HOJIN_ZENGO_STI, "zengo_sti_list");						// 法人格種別（前後指定）
		setCodeList(bean[0], parentMap, CKW00201SFConst.HOJIN_SBT, "hojin_sbt_list");							// 法人格種別
		setCodeList(bean[0], parentMap, CKW00201SFConst.CUST_BIRTHD_NENGO, "nengo_list");						// 契約者の年号
		setCodeList(bean[0], parentMap, CKW00201SFConst.SKSHA_BIRTHD_NENGO, "nengo_list");						// 親権者の年号
		setCodeList(bean[0], parentMap, CKW00201SFConst.CONT_CUST_BIRTHD_NENGO, "nengo_list");					// コンテンツの年号
		setCodeList(bean[0], parentMap, CKW00201SFConst.JOB, "job_list");										// 職業
		setCodeList(bean[0], parentMap, CKW00201SFConst.GSHU, "gshu_list");										// 業種
		setCodeList(bean[0], parentMap, CKW00201SFConst.SKSHA_ZOKUGARA, "zokugara_list");						// 続柄
		setCodeList(bean[0], parentMap, CKW00201SFConst.SECR_QS, "secr_qs_list");								// 秘密の質問
		setCodeList(bean[0], parentMap, CKW00201SFConst.RRK_JOKEN, "rrk_joken_list");							// 連絡条件
		setCodeList(bean[0], parentMap, CKW00201SFConst.KEI_JOTO_TESURYO, "kei_joto_cms_list");					// 契約譲渡手数料
		// ANK-3699-00-00 ADD START
		setCodeList(bean[0], parentMap, CKW00201SFConst.JOTO_KBN, "joto_kbn_list");								// 譲渡区分
		// ANK-3699-00-00 ADD END
		
		// 内販・外販情報
		X31SDataBeanAccessArray naigaihanList = bean[0].getDataBeanArray(CKW00201SFConst.NAIHAN_GAIHAN_IF);
		naigaihanList.clearArray();
		
		childList = (ArrayList)parentMap.get("nainan_gaihan_list");
		X31SDataBeanAccess naigaihanBean = naigaihanList.addDataBean();
		index = 0;
		
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);
			
			// "003":その他 は対象外
			if ("003".equals((String)childMap.get("cd_div")))
			{
				continue;
			}
			
			setCodeListValue(naigaihanBean, childMap, index++);
		}
		naigaihanBean.sendMessageString(CKW00201SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, "0");
		
		// 適用開始日登録可能期間
		bean[0].sendMessageString(CKW00201SFConst.TSTA_ADD, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("tsta_add"));
		// ファミリー会員＿個人＿登録上限数
		bean[0].sendMessageString(CKW00201SFConst.FAMILY_KJ_ADD_LIMIT, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("kojin_limit"));
		// ファミリー会員＿法人＿登録上限数
		bean[0].sendMessageString(CKW00201SFConst.FAMILY_HJ_ADD_LIMIT, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("hojin_limit"));
		// 一時支払料金番号
		bean[0].sendMessageString(CKW00201SFConst.TMP_PAY_PRC_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("tmp_pay_prc_no"));
		// 一時支払料金額
		bean[0].sendMessageString(CKW00201SFConst.TMP_PAY_PRC_AMNT, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("tmp_pay_prc_amnt"));
		// 発生コード
		bean[0].sendMessageString(CKW00201SFConst.HASSEI_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("hassei_cd"));
		
		// オプトインメール
		X31SDataBeanAccessArray mailList = bean[0].getDataBeanArray(CKW00201SFConst.MAIL_RCV_SETTEI);
		mailList.clearArray();
		
		childList = (ArrayList)parentMap.get("optinm_list");
		
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);
			X31SDataBeanAccess mailBean = mailList.addDataBean();
			
			// オプトインメール名
			mailBean.sendMessageString(CKW00201SFConst.OPTINM_NM_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("optinm_nm"));
			// オプトインメール番号
			mailBean.sendMessageString(CKW00201SFConst.OPTINM_NO_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("optinm_no"));
			
			// 分割時
			if (bnktFlg)
			{
				// 受信メール設定チェックボックス ← false
				mailBean.sendMessageBoolean(CKW00201SFConst.RCV_MAIL_SETTE_CHKBOX_02, X31CWebConst.DATABEAN_SET_VALUE, false);
			}
			else
			{
				String shkValueFlg = (String)childMap.get("shk_value_flg");
				
				// 初期値フラグ
				mailBean.sendMessageString(CKW00201SFConst.SHK_VALUE_FLG_02, X31CWebConst.DATABEAN_SET_VALUE, shkValueFlg);
				
				if (SHK_VALUE_FLG_0.equals(shkValueFlg))
				{
					// 受信メール設定チェックボックス ← false
					mailBean.sendMessageBoolean(CKW00201SFConst.RCV_MAIL_SETTE_CHKBOX_02, X31CWebConst.DATABEAN_SET_VALUE, false);
				}
				else if(SHK_VALUE_FLG_1.equals(shkValueFlg))
				{
					// 受信メール設定チェックボックス ← true
					mailBean.sendMessageBoolean(CKW00201SFConst.RCV_MAIL_SETTE_CHKBOX_02, X31CWebConst.DATABEAN_SET_VALUE, true);
				}
			}
		}
		
		// 分割の場合
		if (bnktFlg)
		{
			// サービス契約ステータス
			bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SVC_KEI_STAT, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("svc_kei_stat"));
			// 料金グループコード
			bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_PRC_GRP_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("prc_grp_cd"));
			childList = (ArrayList)parentMap.get("svc_kei_list");
			for(int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);
				
				// サービス開始年月日
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SVC_STA_YMD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_sta_ymd"));
				// 登録年月日時分秒
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_ADD_DTM, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("add_dtm"));
				// 登録オペレータアカウント
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_ADD_OPECNT, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("add_opeacnt"));
				// 最終更新年月日時分秒
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_UPD_DTM, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("last_upd_dtm"));
				// 更新オペレータアカウント
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_UPD_OPECNT, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("upd_opeacnt"));
				// 無効フラグ
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_MK_FLG, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mk_flg"));
				
				// 請求契約番号
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_kei_no"));
				// サービス契約ステータス
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SVC_KEI_STAT, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_kei_stat"));
				// サービスコード
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SVC_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_cd"));
				// 料金グループコード
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_PRC_GRP_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("prc_grp_cd"));
				// 料金コースコード
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("pcrs_cd"));
				// 料金プランコード
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("pplan_cd"));
				
				// サービス契約回線内訳番号
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_SVC_KEI_KAISEN_UCWK_NO, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_kei_kaisen_ucwk_no"));
				// ISP決済再設定優先順位
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_ISPKS_RESET_YUSEN_JUN, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("ispks_reset_yusen_jun"));
				// マンション物件コード
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_MANSION_BUKKEN_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mansion_bukken_cd"));
				// マンション通信設備コード
				bean[0].sendMessageString(CKW00201SFConst.BNKT_MT_MANS_TUSHIN_EQUIP_CD, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mans_tushin_equip_cd"));

// ANK-3478-00-00 ADD START 
				// 併合元＿パートナー会員フラグ
				bean[0].sendMessageString(CKW00201SFConst.MT_PTNR_MEMBER_FLG, X31CWebConst.DATABEAN_SET_VALUE, setPtnrMemberFlg((String)childMap.get("member_sbt_cd"), (String)childMap.get("orsjgs_cd")));
// ANK-3478-00-00 ADD END 
			}
		}
		
		return bean;
	}
	
	/**
	 * コードリストの設定をします。
	 * 
	 * @param bean
	 * @param map
	 * @param beanKey
	 * @param mapKey
	 */
	@SuppressWarnings("unchecked")
	private void setCodeList(X31SDataBeanAccess bean, HashMap map, String beanKey, String mapKey)
	{
		X31SDataBeanAccessArray beanList = bean.getDataBeanArray(beanKey);
		beanList.clearArray();
		
		ArrayList childList = (ArrayList)map.get(mapKey);
		X31SDataBeanAccess subBean = beanList.addDataBean();
		
		// 空白選択支の設定
		subBean.sendMessageString(CKW00201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "");
		subBean.sendMessageString(CKW00201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "");
		subBean.sendMessageString(CKW00201SFConst.DEFAULT_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, "");
		
		for (int i = 0; i < childList.size(); i++)
		{
			HashMap childMap = (HashMap)childList.get(i);
			
			setCodeListValue(subBean, childMap, i);
		}
		subBean.sendMessageString(CKW00201SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, "0");
	}

	/**
	 * コードリストの設定をします。
	 * 
	 * @param bean
	 * @param map
	 * @param index
	 */
	@SuppressWarnings("unchecked")
	private void setCodeListValue(X31SDataBeanAccess bean, HashMap map, int index)
	{
		String value = String.valueOf(index + 1) + ".";
		
		// コード区分
		bean.sendMessageString(CKW00201SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, (String)map.get("cd_div"));
		// コード区分名
		bean.sendMessageString(CKW00201SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, value + (String)map.get("cd_div_nm"));
	}

// ANK-3478-00-00 ADD START 
	/**
	 * パートナー会員か判定します。
	 * <br>
	 * @param	memberSbtCd	会員種別コード
	 * @param	orsjgsCd	卸先事業者コード
	 * @return	boolean		判定結果
	 */
	private String setPtnrMemberFlg(String memberSbtCd, String orsjgsCd)
	{
		if(JCKCommonConst.CD00039_MASTER_KOJIN.equals(memberSbtCd)
				&& !JKKStringUtil.isNullEmpty(orsjgsCd))
		{
			return "1";
		}
		
		return "0";
	}
	
// ANK-3478-00-00 ADD END 
}
