/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CHSV0001_CHSV0001OPDBMapper
 *	ソースファイル名：CHSV0001_CHSV0001OPDBMapper.java
 *	作成者			：富士通
 *	日付			：2011年07月20日
 *＜機能概要＞
 *	BP（債権照会）へのＤ−Ｂマッピングクラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/07/20	富士通		新規作成
 *	v5.00.00	2013/07/26	FJ) 文元   【LT-2013-0000589】「充当額」に、「前受金充当額」を含めるよう対応
 *	v5.00.01	2013/07/28  FJ) 林     【LT-2013-0000600】 債権額が取得できない場合0を出力する
 *	v5.00.02	2013/08/12	FJ) 早崎   【IT1-2013-0001583】前受金充当額のマイナス値扱い処理を削除
 *	v5.00.03	2013/09/18	FJ) 林	   【OM-2013-0002010】債権詳細照会画面への引き継ぎ情報に請求番号を追加
 *	v8.00.00	2014/01/31	FJ) 江森   【ANK-1589-00-00】未収金額、充当額不正対応
 *	v15.00.00	2015/09/01	FJ) 中山   【OM-2015-0002201】性能改善
 *	v20.00.00	2015/10/30	FJ) 李     【ANK-2397-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.constant.JACStrConst;
import eo.web.webview.common.JCHWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CHSV0001_CHSV0001OPDBMapper
{

	/**
	 * コンストラクタ
	 */
	public CHSV0001_CHSV0001OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：債権照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV000101SC(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("CHSV000101SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：債権照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV000102SC(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("CHSV000102SC", parentMap);

		return outputMap;
	}

// v20.00.00 ANK-2397-00-00 ADD START
	/**
	 * 上りマッピングをする
	 * 
	 * @param bean　[0]：債権照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV000103SC(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("CHSV000103SC", parentMap);

		return outputMap;
	}
// v20.00.00 ANK-2397-00-00 ADD END

	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：債権照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCHSV000101SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("CHSV000101SC"))
		{
			parentMap = (HashMap)outputMap.get("CHSV000101SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listCHSV000101SC_mino_info_ECH0191B020CBSMsg1List = bean[0].getDataBeanArray("未納情報");
		X31SDataBeanAccess subbean = null;
		if (listCHSV000101SC_mino_info_ECH0191B020CBSMsg1List.getCount() == 0)
		{
			subbean = listCHSV000101SC_mino_info_ECH0191B020CBSMsg1List.addDataBean();
		}
		else
		{
			subbean = listCHSV000101SC_mino_info_ECH0191B020CBSMsg1List.getDataBean(0);
		}
		subbean.sendMessageString("預り金残高", X31CWebConst.DATABEAN_SET_VALUE, "0");
		subbean.sendMessageString("前受金残高", X31CWebConst.DATABEAN_SET_VALUE, "0");

		childList = null;
		if (listCHSV000101SC_mino_info_ECH0191B020CBSMsg1List != null && parentMap != null && parentMap.containsKey("ECH0191B020CBSMsg1List"))
		{
			childList = (ArrayList)parentMap.get("ECH0191B020CBSMsg1List");

			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);

				// 未納情報.預り金残高 ← 金庫ステータス毎合計一覧照会マップ.金庫ステータス毎合計一覧明細.金庫金額
				if (childMap != null)
				{
					String knkPrcKmkCd = (String)childMap.get("knk_prc_kmk_cd");
					if (knkPrcKmkCd.equals(JACStrConst.PRC_KMK_CD_AZUKIN))
					{
						// 未納情報.預り金残高 ← 金庫ステータス毎合計一覧照会マップ.金庫ステータス毎合計一覧明細.金庫金額
						subbean.sendMessageString("預り金残高", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("knk_amnt"));
					}
					else if (knkPrcKmkCd.equals(JACStrConst.PRC_KMK_CD_MAEUKKIN))
					{
						// 未納情報.前受金残高 ← 金庫ステータス毎合計一覧照会マップ.金庫ステータス毎合計一覧明細.金庫金額
						subbean.sendMessageString("前受金残高", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("knk_amnt"));
					}
				}
			}
		}

		return bean;
	}

	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：債権照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCHSV000102SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("CHSV000102SC"))
		{
			parentMap = (HashMap)outputMap.get("CHSV000102SC");
		}

		ArrayList childList = null;

		// 未納金額合計
		long minoAmntSum = 0;
		// 充当金額合計
		long jytoAmntSum = 0;

//OM-2015-0002201 MOD START
//		X31SDataBeanAccessArray listCHSV000102SC_saiken_icrn_info_ECH0011B010CBSMsg1List = bean[0].getDataBeanArray("債権一覧情報");
		X31SDataBeanAccessArray listCHSV000102SC_saiken_icrn_info_ECH0011B012CBSMsg1List = bean[0].getDataBeanArray("債権一覧情報");
		childList = null;
//		if (listCHSV000102SC_saiken_icrn_info_ECH0011B010CBSMsg1List != null && parentMap != null && parentMap.containsKey("ECH0011B010CBSMsg1List"))
		if (listCHSV000102SC_saiken_icrn_info_ECH0011B012CBSMsg1List != null && parentMap != null && parentMap.containsKey("ECH0011B012CBSMsg1List"))
		{
//			childList = (ArrayList)parentMap.get("ECH0011B010CBSMsg1List");
			childList = (ArrayList)parentMap.get("ECH0011B012CBSMsg1List");

			for (int i = 0; i < childList.size(); i++)
			{
				X31SDataBeanAccess subbean = null;
//				if (listCHSV000102SC_saiken_icrn_info_ECH0011B010CBSMsg1List.getCount() - 1 >= i)
//				{
//					subbean = listCHSV000102SC_saiken_icrn_info_ECH0011B010CBSMsg1List.getDataBean(i);
//				}
//				else
//				{
//					subbean = listCHSV000102SC_saiken_icrn_info_ECH0011B010CBSMsg1List.addDataBean();
//				}
				if (listCHSV000102SC_saiken_icrn_info_ECH0011B012CBSMsg1List.getCount() - 1 >= i)
				{
					subbean = listCHSV000102SC_saiken_icrn_info_ECH0011B012CBSMsg1List.getDataBean(i);
				}
				else
				{
					subbean = listCHSV000102SC_saiken_icrn_info_ECH0011B012CBSMsg1List.addDataBean();
				}

				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null)
				{
					continue;
				}

				if (childMap != null)
				{
					// 債権一覧情報.債権番号 ← 債権一覧照会マップ.債権一覧明細.債権番号
					subbean.sendMessageString("債権番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("saiken_no"));

					// 債権一覧情報.請求年月 ← 債権一覧照会マップ.債権一覧明細.債権確定年月
					subbean.sendMessageString("請求年月", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("saiken_fix_ym"));

					// 債権一覧情報.債権ステータス ← 債権一覧照会マップ.債権一覧明細.債権ステータス
					subbean.sendMessageString("債権ステータス", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("saiken_stat"));

					// 債権一覧情報.収納状態 ← 債権一覧照会マップ.債権一覧明細.債権ステータス名称
					subbean.sendMessageString("収納状態", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("saiken_stat_nm"));

					// 債権一覧情報.支払方法コード ← 債権一覧照会マップ.債権一覧明細.請求方法コード
					subbean.sendMessageString("支払方法コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_cd"));

					// 債権一覧情報.支払方法 ← 債権一覧照会マップ.債権一覧明細.請求方法コード名称
					subbean.sendMessageString("支払方法", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_cd_nm"));

					// 債権一覧情報.支払期限日 ← 債権一覧照会マップ.債権一覧明細.支払期限年月日
					subbean.sendMessageString("支払期限日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("pay_kigen_ymd"));

					// 債権一覧情報.請求種別 ← 債権一覧照会マップ.債権一覧明細.請求種別コード名称
					subbean.sendMessageString("請求種別", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_sbt_cd_nm"));

					if (JACStrConst.SAIKEN_STAT_KAKNO_ZUMI.equals((String)childMap.get("saiken_stat")))
					{
						// 債権一覧情報.領収日 ← 債権一覧照会マップ.債権一覧明細.領収年月日
						subbean.sendMessageString("領収日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("receipt_ymd"));
					}

					// 債権一覧照会マップ.債権一覧明細.変更支払期限年月日に値が設定されている場合は、変更支払期限年月日を設定する
					if (childMap.get("chg_pay_kigen_ymd") != null && ((String)childMap.get("chg_pay_kigen_ymd")).trim().length() > 0)
					{
						// 債権一覧情報.支払期限日 ← 債権一覧照会マップ.債権一覧明細.変更支払期限年月日
						subbean.sendMessageString("支払期限日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("chg_pay_kigen_ymd"));
					}

					// 債権一覧情報.債権調整年月日 ← 債権一覧照会マップ.債権一覧明細.債権調整年月日
					subbean.sendMessageString("債権調整年月日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("saiken_cyosei_ymd"));

					// 債権一覧情報.債権変更年月日 ← 債権一覧照会マップ.債権一覧明細.債権変更年月日
					subbean.sendMessageString("債権変更年月日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("saiken_henko_ymd"));

					// 債権変更年月日が設定されている場合、料金変更有無に"有"を設定する
					String saikenHenkoYmd = (String)childMap.get("saiken_henko_ymd");
					if (JCHWebCommon.isNotNullOrEmpty(saikenHenkoYmd))
					{
						subbean.sendMessageString("料金変更有無", X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.PRC_CHG_UM_ARI);
					}

					// 債権一覧情報.債権額 ← 債権一覧照会マップ.債権一覧明細.債権額
					String saikenAmnt = (String)childMap.get("saiken_amnt");
					if (JCHWebCommon.isNullOrEmpty(saikenAmnt))
					{
						subbean.sendMessageString("債権額", X31CWebConst.DATABEAN_SET_VALUE, "0");
					}
					else
					{
						subbean.sendMessageString("債権額", X31CWebConst.DATABEAN_SET_VALUE, saikenAmnt);
					}

					// 未納金額合計への集計
					if (!JACStrConst.KARA_MOJI.equals(childMap.get("saiken_amnt")))
					{
						minoAmntSum += Long.parseLong((String)childMap.get("saiken_amnt"));
					}

					// 充当額
					String jytoAmnt = (String)childMap.get("jyto_amnt");
					if (JCHWebCommon.isNullOrEmpty(jytoAmnt))
					{
						jytoAmnt = "0";
					}
					
					// 前受金充当額
					String maeujytoAmnt = (String)childMap.get("maeu_jyto_amnt");
					if (JCHWebCommon.isNullOrEmpty(maeujytoAmnt))
					{
						maeujytoAmnt = "0";
					}

					// 貸倒後入金額
					String ksdAfNyknAmnt = (String)childMap.get("ksd_af_nk_amnt");
					if (JCHWebCommon.isNullOrEmpty(ksdAfNyknAmnt))
					{
						ksdAfNyknAmnt = "0";
					}
					
					// 充当額と前受金充当額と貸倒後入金額を加算
					String jytoAmntAdd =  JCHWebCommon.calcAdd(ksdAfNyknAmnt, JCHWebCommon.calcAdd(jytoAmnt, maeujytoAmnt, true), true);
					
					// 債権一覧情報.充当額 ← 充当額と前受金充当額を加算した結果
					subbean.sendMessageString("充当額", X31CWebConst.DATABEAN_SET_VALUE, jytoAmntAdd);

					// 充当金額合計への集計
					jytoAmntSum += Long.parseLong(jytoAmntAdd);
					
					String seikyReHakkoCnt = (String)childMap.get("seiky_re_hakko_cnt");
					if (JCHWebCommon.isNullOrEmpty(seikyReHakkoCnt))
					{
						subbean.sendMessageString("再発行回数", X31CWebConst.DATABEAN_SET_VALUE, "0");
					}
					else
					{
						// 債権一覧情報.再発行回数 ← 債権一覧照会マップ.債権一覧明細.請求再発行回数
						subbean.sendMessageString("再発行回数", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_re_hakko_cnt"));
					}

					// 債権一覧情報.更新年月日時分秒 ← 債権一覧照会マップ.債権一覧明細.更新前債権更新年月日時分秒
					subbean.sendMessageString("更新年月日時分秒", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("saiken_upd_dtm_af"));
					
					// 債権一覧情報.請求番号 ← 債権一覧照会マップ.債権一覧明細.請求番号
					subbean.sendMessageString("請求番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_no"));
				}
				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());
					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());
				}
			}
			// 未収金額合計の設定
			if (childList.size() > 0)
			{
				X31SDataBeanAccessArray minoInfo = bean[0].getDataBeanArray("未納情報");
				if(minoInfo != null)
				{
					X31SDataBeanAccess minoBean = null;
					if (minoInfo.getCount() > 0)
					{
						minoBean = minoInfo.getDataBean(0);
					}
					else
					{
						minoBean = minoInfo.addDataBean();
					}

					minoBean.sendMessageString("未納金額合計", X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(minoAmntSum - jytoAmntSum));
				}
			}
		}
//OM-2015-0002201 MOD END

		return bean;
	}

// v20.00.00 ANK-2397-00-00 ADD START
	/**
	 * 下りマッピング
	 * 
	 * @param bean　[0]：債権照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getCHSV000103SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap parentMap = null;
		if (outputMap.containsKey("CHSV000103SC"))
		{
			parentMap = (HashMap)outputMap.get("CHSV000103SC");
		}

		X31SDataBeanAccessArray minoInfo = bean[0].getDataBeanArray("未納情報");
		if(minoInfo != null && parentMap != null && parentMap.containsKey("ECH0011B013CBSMsg1List"))
		{
			ArrayList childList = (ArrayList)parentMap.get("ECH0011B013CBSMsg1List");
			HashMap childMap = (HashMap)childList.get(0);
			X31SDataBeanAccess minoBean = null;
			if (minoInfo.getCount() > 0)
			{
				minoBean = minoInfo.getDataBean(0);
			}
			else
			{
				minoBean = minoInfo.addDataBean();
			}

			// 未納情報.未収金額合計 ← 債権管理照会(未収金額合計)マップ.債権管理情報明細.債権未収金額合計
			minoBean.sendMessageString("未納金額合計", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("mino_amnt_sum"));
		}

		return bean;
	}
// v20.00.00 ANK-2397-00-00 ADD END

}