/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0886_KKSV0886OPDBMapper
*	ソースファイル名：KKSV0886_KKSV0886OPDBMapper.java
*	作成者			：FJ)麻生
*	日付			：2018年01月30日
*＜機能概要＞
*	BP（申込書イメージ付替対象検索）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v36.00.00	2018/01/30	FJ)麻生		新規作成【ANK-3296-00-00】標準工事費分割請求
*	v36.00.01	2018/02/16	FJ)麻生		【IT1-2018-0000028】該当のIT1障害と同時期のPT障害の修正
*	v37.00.00	2018/06/01	FJ)麻生		【IT2-2018-0000042】課金開始されていない契約が処理対象とならない（水平展開）
*   v45.00.00	2019/07/19	FJ)吉田		【ANK-3636-00-00】消費増税対応（8%⇒10%）
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

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.util.JKKKapPlanCdConv;
import eo.common.util.JKKStringUtil;
import eo.web.webview.KKW21901SF.KKW21901SFConst;


/**
 * DataBean-BPマッピングをする。
 * 
 * @author FJ)麻生
 */
public class KKSV0886_KKSV0886OPDBMapper 
{

	// ANK-3636-00-00 DEL START
//	/** 割賦販売形態・割賦プラン対応表 */
//	private static final String[][] KAP_PLAN_KAP_HAMBAI_FORM_TABLE = {
//			{"01", "KP0041"},	// 一括
//			{"04", "KP0040"},	// 割賦(30回)
//		};
	// ANK-3636-00-00 DEL END

	/**
	 * コンストラクタ
	 */
	public KKSV0886_KKSV0886OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：工事費割賦契約参照更新
	 * @param outputMap
	 * @param func_code
	 * @return Map
	 */
	@SuppressWarnings("unchecked")
	// ANK-3636-00-00 MOD START
//	public Map setKKSV088601CC(X31SDataBeanAccess[] bean, Map<String, Object> outputMap, String func_code) 
	public Map setKKSV088601CC(X31SDataBeanAccess[] bean, Map<String, Object> outputMap, String func_code) throws Exception
	// ANK-3636-00-00 MOD END
	{
		if(bean == null)
		{
			return null;
		}
		
		if(bean.length != 1)
		{
			return null;
		}
		
		Map<String, Object> parentMap = new HashMap<String, Object>();

		// 機能コード
		parentMap.put("func_code", func_code);

		// サービス契約回線内訳番号
		parentMap.put("svc_kei_kaisen_ucwk_no", bean[0].sendMessageString(KKW21901SFConst.SVC_KEI_KAISEN_UCWK_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 工事費割賦契約番号
		parentMap.put("kojihi_kap_kei_no", bean[0].sendMessageString(KKW21901SFConst.KOJIHI_KAP_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		String kapPlanCd = "";
		// ANK-3636-00-00 DEL START
//		for (int i = 0; i < KAP_PLAN_KAP_HAMBAI_FORM_TABLE.length; i++)
//		{
//			if (KAP_PLAN_KAP_HAMBAI_FORM_TABLE[i][0].equals(bean[0].sendMessageString(KKW21901SFConst.KAP_HAMBAI_FORM_CD_CHOICE,
//					X31CWebConst.DATABEAN_GET_VALUE)))
//			{
//				kapPlanCd = KAP_PLAN_KAP_HAMBAI_FORM_TABLE[i][1];
//			}
//		}
		// ANK-3636-00-00 DEL END

		// ANK-3636-00-00 ADD START
		kapPlanCd = JKKKapPlanCdConv.convKapPlanCd(bean[0].sendMessageString(KKW21901SFConst.KAP_PLAN_CD, X31CWebConst.DATABEAN_GET_VALUE), JKKStrConst.CHGE_DIV_PAY_WAY, null, null, bean[0].sendMessageString(KKW21901SFConst.KAP_HAMBAI_FORM_CD_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));
		// ANK-3636-00-00 ADD END
		
		// 割賦プランコード
		parentMap.put("kap_plan_cd", kapPlanCd);
		// 更新用＿割賦一括請求切替年月
		parentMap.put("kap_ikt_siky_swch_ym", bean[0].sendMessageString(KKW21901SFConst.UPD_KAP_HAMBAI_FORM_SWCH_YM, X31CWebConst.DATABEAN_GET_VALUE));
		// 割賦請求開始年月
		parentMap.put("kap_seiky_sta_ym", bean[0].sendMessageString(KKW21901SFConst.KAP_SEIKY_STA_YM, X31CWebConst.DATABEAN_GET_VALUE));
		// 割賦支払い残回数
		parentMap.put("kap_pay_zan_cnt", bean[0].sendMessageString(KKW21901SFConst.KAP_PAY_ZAN_CNT, X31CWebConst.DATABEAN_GET_VALUE));
		// 更新年月日時分秒(更新前)
		parentMap.put("upd_dtm_bf", bean[0].sendMessageString(KKW21901SFConst.UPD_DTM_BF, X31CWebConst.DATABEAN_GET_VALUE));

		// 進捗特記事項1
		parentMap.put("prg_tkjk_1", getPrgTkjk1(bean));

		X31SDataBeanAccessArray custKeiHktgiList = bean[0].getDataBeanArray(KKW21901SFConst.CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiSubbean = custKeiHktgiList.getDataBean(0);
		String idoDiv = custKeiHktgiSubbean.sendMessageString(KKW21901SFConst.IDO_DIV_01, X31CWebConst.DATABEAN_GET_VALUE);

		// 異動区分
		parentMap.put("ido_div", idoDiv);

		ArrayList list = new ArrayList();
		if (parentMap.containsKey("ido_rsn_cd_list"))
		{
			list = (ArrayList)parentMap.get("ido_rsn_cd_list");
		}
		
		Integer maxIndex = (Integer)custKeiHktgiSubbean.sendMessage(KKW21901SFConst.IDO_RSN_CD_01, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0; i < maxIndex; i++)
		{
			Map childMap = new HashMap();
			if (list.size() > i)
			{
				childMap = (Map)list.get(i);
			}
			
			// 異動理由コード
			childMap.put("ido_rsn_cd", custKeiHktgiSubbean.sendMessageString(KKW21901SFConst.IDO_RSN_CD_01, X31CWebConst.DATABEAN_GET_VALUE, i));
			// 異動理由メモ
			childMap.put("ido_rsn_memo", custKeiHktgiSubbean.sendMessageString(KKW21901SFConst.IDO_RSN_MEMO_01, X31CWebConst.DATABEAN_GET_VALUE));

			list.add(childMap);
		}
		parentMap.put("ido_rsn_cd_list", list);

		// IT2-2018-0000042 ADD START
		// 変更前割賦一括請求切替年月
		String bfKapIktSikySwchYm = bean[0].sendMessageString(KKW21901SFConst.BK_KAP_HAMBAI_FORM_SWCH_YM_YEAR, X31CWebConst.DATABEAN_GET_VALUE)
			+ bean[0].sendMessageString(KKW21901SFConst.BK_KAP_HAMBAI_FORM_SWCH_YM_MONTH, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("bf_kap_ikt_siky_swch_ym", bfKapIktSikySwchYm);
		// 割賦契約課金開始年月日
		parentMap.put("kap_kei_chrg_staymd", bean[0].sendMessageString(KKW21901SFConst.KAP_KEI_CHRG_STDARD_YMD, X31CWebConst.DATABEAN_GET_VALUE));
		// ANK-3636-00-00 DEL START
//		String bfKapPlanCd = "";
//		for (int i = 0; i < KAP_PLAN_KAP_HAMBAI_FORM_TABLE.length; i++)
//		{
//			if (KAP_PLAN_KAP_HAMBAI_FORM_TABLE[i][0].equals(bean[0].sendMessageString(KKW21901SFConst.BK_KAP_HAMBAI_FORM_CD,
//					X31CWebConst.DATABEAN_GET_VALUE)))
//			{
//				bfKapPlanCd = KAP_PLAN_KAP_HAMBAI_FORM_TABLE[i][1];
//			}
//		}
		// ANK-3636-00-00 DEL END
		// ANK-3636-00-00 MOD START
		// 変更前割賦プランコード
//		parentMap.put("bf_kap_plan_cd", bfKapPlanCd);
		parentMap.put("bf_kap_plan_cd", bean[0].sendMessageString(KKW21901SFConst.KAP_PLAN_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// ANK-3636-00-00 MOD END
		// 初回請求サービス契約番号
		parentMap.put("first_seiky_svc_kei_no", bean[0].sendMessageString(KKW21901SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// IT2-2018-0000042 ADD END

		outputMap.put("KKSV088601CC", parentMap);

		return outputMap;
	}


	/**
	 * 進捗特記事項1を取得する
	 * @param bean　[0]：工事費割賦契約参照更新
	 * @return String
	 */
	private String getPrgTkjk1(X31SDataBeanAccess[] bean) 
	{
		String prgTkjk1 = "";

		// 割賦残回数
		String bkKapPayZanCnt = bean[0].sendMessageString(KKW21901SFConst.BK_KAP_PAY_ZAN_CNT, X31CWebConst.DATABEAN_GET_VALUE);
		String kapPayZanCnt = bean[0].sendMessageString(KKW21901SFConst.KAP_PAY_ZAN_CNT, X31CWebConst.DATABEAN_GET_VALUE);
		prgTkjk1 = getPrgTkjk1Item(prgTkjk1, bkKapPayZanCnt, kapPayZanCnt, "割賦残回数");

		// 販売形態
		String bkKapHambaiFormNm = getKapHambaiFormNm(bean, KKW21901SFConst.BK_KAP_HAMBAI_FORM_CD);
		String kapHambaiFormNm = getKapHambaiFormNm(bean, KKW21901SFConst.KAP_HAMBAI_FORM_CD_CHOICE);
		prgTkjk1 = getPrgTkjk1Item(prgTkjk1, bkKapHambaiFormNm, kapHambaiFormNm, "販売形態");

		// 一括請求月
		// IT1-2018-0000028 MOD START
//		String bkKapHambaiFormSwchYm = JKKStringUtil.nullToBlank(bean[0].sendMessageString(KKW21901SFConst.BK_KAP_HAMBAI_FORM_SWCH_YM_YEAR,
//				X31CWebConst.DATABEAN_GET_VALUE))
//				+ "年" + JKKStringUtil.nullToBlank(bean[0].sendMessageString(KKW21901SFConst.BK_KAP_HAMBAI_FORM_SWCH_YM_MONTH,
//						X31CWebConst.DATABEAN_GET_VALUE)) + "月";
//		String kapHambaiFormSwchYm = JKKStringUtil.nullToBlank(bean[0].sendMessageString(KKW21901SFConst.KAP_HAMBAI_FORM_SWCH_YM_YEAR,
//				X31CWebConst.DATABEAN_GET_VALUE))
//				+ "年" + JKKStringUtil
//						.nullToBlank(bean[0].sendMessageString(KKW21901SFConst.KAP_HAMBAI_FORM_SWCH_YM_MONTH, X31CWebConst.DATABEAN_GET_VALUE)) + "月";
//		prgTkjk1 = getPrgTkjk1Item(prgTkjk1, bkKapHambaiFormSwchYm, kapHambaiFormSwchYm, "一括請求月");
		// (IT1-2018-0000028と同時期のPT障害の修正)
		StringBuffer bkKapHambaiFormSwchYm = new StringBuffer();
		String bkKapHambaiFormSwchYmYear = bean[0].sendMessageString(KKW21901SFConst.BK_KAP_HAMBAI_FORM_SWCH_YM_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JKKStringUtil.isNullBlank(bkKapHambaiFormSwchYmYear))
		{
			bkKapHambaiFormSwchYm.append(bkKapHambaiFormSwchYmYear);
			bkKapHambaiFormSwchYm.append("年");
		}
		String bkKapHambaiFormSwchYmMonth = bean[0].sendMessageString(KKW21901SFConst.BK_KAP_HAMBAI_FORM_SWCH_YM_MONTH, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JKKStringUtil.isNullBlank(bkKapHambaiFormSwchYmMonth))
		{
			bkKapHambaiFormSwchYm.append(bkKapHambaiFormSwchYmMonth);
			bkKapHambaiFormSwchYm.append("月");
		}
		StringBuffer kapHambaiFormSwchYm = new StringBuffer();
		String kapHambaiFormSwchYmYear = bean[0].sendMessageString(KKW21901SFConst.KAP_HAMBAI_FORM_SWCH_YM_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JKKStringUtil.isNullBlank(kapHambaiFormSwchYmYear))
		{
			kapHambaiFormSwchYm.append(kapHambaiFormSwchYmYear);
			kapHambaiFormSwchYm.append("年");
		}
		String kapHambaiFormSwchYmMonth = bean[0].sendMessageString(KKW21901SFConst.KAP_HAMBAI_FORM_SWCH_YM_MONTH, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JKKStringUtil.isNullBlank(kapHambaiFormSwchYmMonth))
		{
			kapHambaiFormSwchYm.append(kapHambaiFormSwchYmMonth);
			kapHambaiFormSwchYm.append("月");
		}
		prgTkjk1 = getPrgTkjk1Item(prgTkjk1, bkKapHambaiFormSwchYm.toString(), kapHambaiFormSwchYm.toString(), "一括請求月");
		// IT1-2018-0000028 MOD END

		return prgTkjk1;
	}

	/**
	 * 変更前と変更後から進捗特記事項1を1項目分取得する
	 * @param prgTkjk1　進捗特記事項1
	 * @param before　変更前
	 * @param after　変更後
	 * @param fieldName　項目名
	 * @return String
	 */
	private String getPrgTkjk1Item(String prgTkjk1, String before, String after, String fieldName) 
	{
		StringBuffer sb = new StringBuffer();
		sb.append(JKKStringUtil.nullToBlank(prgTkjk1));

		if (!JKKStringUtil.nullToBlank(before).equals(JKKStringUtil.nullToBlank(after)))
		{
			if (!JKKStringUtil.isNullEmpty(prgTkjk1))
			{
				sb.append(" ");
			}
			sb.append(JKKStringUtil.nullToBlank(fieldName));
			sb.append("：(変更前)");
			sb.append(JKKStringUtil.nullToBlank(before));
			sb.append("(変更後)");
			sb.append(JKKStringUtil.nullToBlank(after));
		}

		return sb.toString();
	}

	/**
	 * 割賦販売形態名取得処理
	 * 
	 * @param bean サービスフォームBean
	 * @param key ビーンから値を取り出すためのキー
	 * @return 割賦販売形態名
	 */
	private String getKapHambaiFormNm(X31SDataBeanAccess[] bean, String key)
	{
		String kapHambaiFormNm = "";

		X31SDataBeanAccessArray pulldownInfList = bean[0].getDataBeanArray(KKW21901SFConst.KAP_HAMBAI_FORM);
		X31SDataBeanAccess pulldownInf = pulldownInfList.getDataBean(0);
		String kapHambaiFormCd = JKKStringUtil.nullToBlank(bean[0].sendMessageString(key, X31CWebConst.DATABEAN_GET_VALUE));;

		if (!JKKStringUtil.isNullEmpty(kapHambaiFormCd))
		{
			int count = (Integer)pulldownInf.sendMessage(KKW21901SFConst.CD_DIV_LIST_02, X31CWebConst.DATABEAN_GET_COUNT);
			for (int i = 0 ; i < count ; i++)
			{
				String cd = pulldownInf.sendMessageString(KKW21901SFConst.CD_DIV_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, i);
				if (cd.equals(kapHambaiFormCd))
				{
					kapHambaiFormNm = JKKStringUtil.nullToBlank(pulldownInf.sendMessageString(KKW21901SFConst.CD_DIV_NM_LIST_02,
							X31CWebConst.DATABEAN_GET_VALUE, i));
					kapHambaiFormNm = kapHambaiFormNm.replaceFirst("^\\d+\\.", "");
					break;
				}
			}
		}

		return kapHambaiFormNm;
	}
}
