/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CHSV0005_CHSV0005OPDBMapper
 *	ソースファイル名：CHSV0005_CHSV0005OPDBMapper.java
 *	作成者			：富士通
 *	日付			：2011年12月13日
 *＜機能概要＞
 *	BP（請求照会）へのＤ−Ｂマッピングクラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/12/13	富士通		新規作成
 *	v5.00.00	2013/07/13	FJ)吉田	   【LT-2013-0000464】請求種別コードが「3(再発行)」の場合、
 *										「請求処理日」に「請求書発行日」をセットするよう修正。
 *	v5.00.01	2013/07/28  FJ) 林     【LT-2013-0000600】 請求金額が取得できない場合0を出力する
*	v46.00.00   2019/10/14  FJ)星野     【ANK-3586-00-00】
*	v58.00.00   2022/04/11  FJ)北村     【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*	v67.00.00   2023/07/27  FJ)中川     【ANK-4415-00-00】口振請求及びWeb申込システム移行 STEP1
 **********************************************************************/
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.common.JCHWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CHSV0005_CHSV0005OPDBMapper
{

// ANK-4415-00-00 ADD START
	/** 支払期限日判定失敗時表示日 */
	private static final String PAYKIGENDAY_JUDGE_ERR_DSP_DAY = "20991231";
// ANK-4415-00-00 ADD END

	/**
	 * コンストラクタ
	 */
	public CHSV0005_CHSV0005OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：請求一覧照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV000501SC(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);

		// 請求契約番号 → 請求一覧照会マップ.ＫＥＹ＿請求契約番号
		parentMap.put("key_seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("CHSV000501SC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：請求一覧照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCHSV000501SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("CHSV000501SC"))
		{
			parentMap = (HashMap)outputMap.get("CHSV000501SC");
		}

		ArrayList childList = null;

// ANK-4415-00-00 ADD START
		HashMap payKigenMap = null;
		if (outputMap.containsKey("PAYKIGENDAYSTKUCC"))
		{
			payKigenMap = (HashMap)outputMap.get("PAYKIGENDAYSTKUCC");
		}
		// 料金スケジュール定義一意明細
		ArrayList payKigenList1 = null;
		// 口座一覧照会（口座支払方法受付区分）明細
		ArrayList payKigenList2 = null;
// ANK-4415-00-00 ADD END

		X31SDataBeanAccessArray listCHSV000505SC_seiky_icrn_info_ECH0051B010CBSMsg1List = bean[0].getDataBeanArray("請求一覧情報");
		childList = null;
		if (listCHSV000505SC_seiky_icrn_info_ECH0051B010CBSMsg1List != null && parentMap != null && parentMap.containsKey("ECH0051B010CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("ECH0051B010CBSMsg1List");

			for (int i = 0; i < childList.size(); i++)
			{
				X31SDataBeanAccess subbean = null;
				if (listCHSV000505SC_seiky_icrn_info_ECH0051B010CBSMsg1List.getCount() - 1 >= i)
				{
					subbean = listCHSV000505SC_seiky_icrn_info_ECH0051B010CBSMsg1List.getDataBean(i);
				}
				else
				{
					subbean = listCHSV000505SC_seiky_icrn_info_ECH0051B010CBSMsg1List.addDataBean();
				}

				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null)
				{
					continue;
				}

				if (childMap != null)
				{
					// 請求一覧情報.請求番号 ← 請求一覧照会マップ.請求一覧明細.請求番号
					subbean.sendMessageString("請求番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_no"));

					// 請求一覧情報.請求年月 ← 請求一覧照会マップ.請求一覧明細.請求年月
					subbean.sendMessageString("請求年月", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_ym"));

					// 請求一覧情報.請求種別 ← 請求一覧照会マップ.請求一覧明細.請求種別コード名称
					subbean.sendMessageString("請求種別", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_sbt_cd_nm"));

					// 請求一覧情報.請求書様式 ← 請求一覧照会マップ.請求一覧明細.請求方法コード名称
					subbean.sendMessageString("請求書様式", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_cd_nm"));

					// 請求一覧情報.請求状態 ← 請求一覧照会マップ.請求一覧明細.請求ステータス名称
					subbean.sendMessageString("請求状態", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_stat_nm"));

					// 請求一覧情報.請求金額 ← 請求一覧照会マップ.請求一覧明細.請求金額
					String seikyAmnt = (String)childMap.get("seiky_amnt");
					if (JCHWebCommon.isNullOrEmpty(seikyAmnt))
					{
						subbean.sendMessageString("請求金額", X31CWebConst.DATABEAN_SET_VALUE, "0");
					}
					else
					{
						subbean.sendMessageString("請求金額", X31CWebConst.DATABEAN_SET_VALUE, seikyAmnt);
					}

					String seikySbtCdFlg = (String)childMap.get("seiky_sbt_cd");
					if(seikySbtCdFlg.equals("3")){
						// 請求一覧情報.発行日 ← 請求一覧照会マップ.請求一覧明細.請求発行年月日
						subbean.sendMessageString("発行日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_hakko_ymd"));
					}
					else
					{
						// 請求一覧情報.発行日 ← 請求一覧照会マップ.請求一覧明細.請求確定年月日
						subbean.sendMessageString("発行日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_fix_ymd"));
					}

// ANK-4415-00-00 MOD START
					//// 請求一覧情報.支払期限日 ← 請求一覧照会マップ.請求一覧明細.支払期限日
					//subbean.sendMessageString("支払期限日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("pay_kigen_ymd"));
					if(payKigenMap != null && payKigenMap.containsKey("ECH0501A010CBSMsg1List") && payKigenMap.containsKey("EKK0501B002CBSMsg1List"))
					{
						payKigenList1 = (ArrayList)payKigenMap.get("ECH0501A010CBSMsg1List");
						payKigenList2 = (ArrayList)payKigenMap.get("EKK0501B002CBSMsg1List");
						HashMap payKigenChildMap1 = (HashMap)payKigenList1.get(i);
						HashMap payKigenChildMap2 = (HashMap)payKigenList2.get(i);
						// 支払期限日判定結果フラグ
						boolean payKigenDayJudgeRsltFlg = true;

						// 請求ステータスが"000"、"010"かつ請求方法コードが"2"or"3"を満たさない場合
						if(!(("000".equals((String)childMap.get("seiky_stat")) 
							|| "010".equals((String)childMap.get("seiky_stat")))
								&& (("2".equals((String)childMap.get("seiky_way_cd")))
									|| ("3".equals((String)childMap.get("seiky_way_cd"))))))
						{
							// 請求一覧情報.支払期限日 ← 請求一覧照会マップ.請求一覧明細.支払期限日
							subbean.sendMessageString("支払期限日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("pay_kigen_ymd"));
						}
						else
						{
							// 支払情報受付区分が"1"、"2"以外の場合
							if(!("1".equals((String)payKigenChildMap2.get("koza_payway_uk_div")) ||
								"2".equals((String)payKigenChildMap2.get("koza_payway_uk_div"))))
							{
								payKigenDayJudgeRsltFlg = false;
							}

							// 取得した口座番号もしくは通帳番号が請求情報のものと一致していない場合
							if(!((("2".equals((String)childMap.get("seiky_way_cd"))) 
								&& (((String)childMap.get("koza_no")).equals((String)payKigenChildMap2.get("koza_no")))) || 
							   (("3".equals((String)childMap.get("seiky_way_cd")))
								&& (((String)childMap.get("tsucho_no")).equals((String)payKigenChildMap2.get("tsucho_no")))))
							)
							{
								payKigenDayJudgeRsltFlg = false;
							}

							// マップの内容がnullの場合
							if(payKigenChildMap1.size() == 0)
							{
								payKigenDayJudgeRsltFlg = false;
							}

							if(payKigenDayJudgeRsltFlg)
							{
								// 口座支払方法受付区分の値によって支払期限日を設定する
								if("1".equals((String)payKigenChildMap2.get("koza_payway_uk_div")))
								{
									// 請求一覧情報.支払期限日 ← 支払期限日取得マップ.料金スケジュール一意明細.イベント年月日
									subbean.sendMessageString("支払期限日", X31CWebConst.DATABEAN_SET_VALUE, (String)payKigenChildMap1.get("event_ymd"));
								}
								else if("2".equals((String)payKigenChildMap2.get("koza_payway_uk_div")))
								{
									// 請求一覧情報.支払期限日 ← 請求一覧照会マップ.請求一覧明細.支払期限日
									subbean.sendMessageString("支払期限日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("pay_kigen_ymd"));
								}
							}
							else
							{
								// 請求一覧情報.支払期限日 ← "20991231"
								subbean.sendMessageString("支払期限日", X31CWebConst.DATABEAN_SET_VALUE, PAYKIGENDAY_JUDGE_ERR_DSP_DAY);
							}
						}
					}
// ANK-4415-00-00 MOD END

					// 請求一覧情報.合算 ← 請求一覧照会マップ.請求一覧明細.合算フラグ
					String gsanFlg = (String)childMap.get("gsan_flg");
					if (JACStrConst.GSAN_FLG_ON.equals(gsanFlg))
					{
						subbean.sendMessageString("合算", X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.HNTIG_SET_VALUE_GSAN);
					}
// 20191014 ANK-3586-00-00 星野 ADD START
					// 請求一覧情報.合算 ← 請求一覧照会マップ.請求一覧明細.隔月請求スキップフラグ
					String kakgtSeikySkipFlg = (String)childMap.get("kakgt_seiky_skip_flg");
					if( JACStrConst.KAKGT_SEIKY_SKIP_FLG_SKIP_M.equals(kakgtSeikySkipFlg) )
					{
						subbean.sendMessageString("合算", X31CWebConst.DATABEAN_SET_VALUE, "スキップ（隔月請求）");
					}
// 20191014 ANK-3586-00-00 星野 ADD END
// ANK-3846-00-00 MOD START
					// 請求一覧情報.引抜き ← 請求一覧照会マップ.請求一覧明細.請求書引抜フラグ
					//String seikyusHiknkFlg = (String)childMap.get("seikyus_hiknk_flg");
					//if (JACStrConst.HIKNK_FLG_ON.equals(seikyusHiknkFlg))
					//{
					//	subbean.sendMessageString("引抜き", X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.HNTIG_SET_VALUE_HIKNK);
					//}
					// 請求一覧情報.決済ＩＤ ← 請求一覧照会マップ.請求一覧明細.決済ID
					subbean.sendMessageString("決済ＩＤ", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kssai_id"));
// ANK-3846-00-00 MOD END
				}
				else
				{
					subbean.sendMessageString("請求番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("請求年月", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("請求種別", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("請求書様式", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("請求状態", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("請求金額", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("発行日", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("支払期限日", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("合算", X31CWebConst.DATABEAN_SET_VALUE, new String());
					// ANK-3846-00-00 MOD START
					//subbean.sendMessageString("引抜き", X31CWebConst.DATABEAN_SET_VALUE, new String());
					subbean.sendMessageString("決済ＩＤ", X31CWebConst.DATABEAN_SET_VALUE, new String());
					// ANK-3846-00-00 MOD END
				}
			}
		}

		return bean;
	}

}