/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV1009_KKSV1009OPDBMapper
*	ソースファイル名：KKSV1009_KKSV1009OPDBMapper.java
*	作成者			：FJ
*	日付			：2022年08月10日
*＜機能概要＞
*	BP（仮申込一覧照会）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v60.00.00	2022/08/10	FJ)吉田		【ANK-4231-00-00】OMO構想対応
*	v60.00.01	2022/09/02	FJ)吉田		【ANK-4231-12-00】プレ登録会員以外の申込検索対応
*   v60.00.01	2022/09/13	FJ)舘山		【IT1-2022-0000072】
**********************************************************************/
package eo.web.webview.mapping;

import java.math.BigDecimal;
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.JACStrConst;
import eo.common.util.JKKStringUtil;
import eo.common.util.JZMCommonUtil;
import eo.web.webview.CHW02701SF.CHW02701SFConst;
import eo.web.webview.CHW02701SF.CHW02701SFLogic;
import eo.web.webview.KKW22601SF.KKW22601SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKWebCommon;

/**
 * DataBean-BPマッピングをする。
 * @author 富士通
 */
public class CHSV0093_CHSV0093OPDBMapper
{

	/**
	 * コンストラクタ
	 */
	public CHSV0093_CHSV0093OPDBMapper()
	{
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：仮申込検索
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap　上りマップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap setCHSV009301CC(X31SDataBeanAccess bean, HashMap outputMap, String func_code, String[][] KAIK_INFO, String opedate, String hoseiDiv)
	{
		
		if(bean == null){
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		// 補正区分「1:登録の場合」
		if("1".equals(hoseiDiv))
		{
			// 会計種別プルダウン選択値
			String kaikSbtValue = JZMCommonUtil.nullToBlank(JKKWebCommon.getPullDownCode(bean,CHW02701SFConst.KAIK_SBT,CHW02701SFConst.INDEX,CHW02701SFConst.CD_LIST));
			// 補正種別プルダウン選択値
			String hoseiSbtValue = JZMCommonUtil.nullToBlank(JKKWebCommon.getPullDownCode(bean,CHW02701SFConst.HOSEI_SBT,CHW02701SFConst.INDEX,CHW02701SFConst.CD_LIST));
			// 債権回収委託会社プルダウン選択値
			String sknValue = JZMCommonUtil.nullToBlank(JKKWebCommon.getPullDownCode(bean,CHW02701SFConst.SKNKSITKCM,CHW02701SFConst.INDEX,CHW02701SFConst.CD_LIST));
	
		
			// 登録会計情報リストに存在する選択パターンの場合、会計内訳種別コード、会計内訳種別詳細コードを決定する。
			for (int i = 0; i < KAIK_INFO.length; i++)
			{
				if(KAIK_INFO[i][2].equals(kaikSbtValue) && KAIK_INFO[i][3].equals(hoseiSbtValue) && KAIK_INFO[i][4].equals(sknValue))
				{
					parentMap.put("kaik_ucwk_sbt_cd",  KAIK_INFO[i][0]);
					parentMap.put("kaik_ucwk_sbt_dtl_cd",  KAIK_INFO[i][1]);
				}
			}
			
			// 会計種別が窓口入金の場合
			if(CHW02701SFLogic.KAIK_SBT_MADO.equals(kaikSbtValue))
			{
				
				// 金融機関プルダウン選択値に応じて会計内訳コードを決定する。
				String kaikUcwkCd = JKKWebCommon.getPullDownCode(bean,CHW02701SFConst.BANK_NM,CHW02701SFConst.INDEX,CHW02701SFConst.CD_LIST);
	
				parentMap.put("kaik_ucwk_cd", kaikUcwkCd);
			}
			
			// 会計種別がコンビニリアル前月収納当月入金かつ補正種別が印紙税の場合
			if(CHW02701SFLogic.KAIK_SBT_COV_REAL_ZENTOU.equals(kaikSbtValue) 
				&& CHW02701SFLogic.HOSEI_SBT_INS_ZEI.equals(hoseiSbtValue))
			{
				parentMap.put("kaik_ucwk_cd", "040400103000");
				parentMap.put("kaik_ucwk_sbt_dtl_cd", "4040");
				parentMap.put("nyukin_route_cd", "82");
				parentMap.put("shunokikan_cd", "35");
				parentMap.put("cvs_pay_rsv_ymd_jdgrslt", "1");
				parentMap.put("ean_maker_cd", "908319");
			}
			
			// 会計種別がコンビニ通常前月収納当月入金かつ補正種別が印紙税の場合
			if(CHW02701SFLogic.KAIK_SBT_COV_TSUJO_ZENTOU.equals(kaikSbtValue) 
				&& CHW02701SFLogic.HOSEI_SBT_INS_ZEI.equals(hoseiSbtValue))
			{
				parentMap.put("kaik_ucwk_cd", "040410103000");
				parentMap.put("kaik_ucwk_sbt_dtl_cd", "4041");
				parentMap.put("nyukin_route_cd", "82");
				parentMap.put("shunokikan_cd", "33");
				parentMap.put("cvs_pay_rsv_ymd_jdgrslt", "1");
				parentMap.put("ean_maker_cd", "908093");
			}
			
			// 会計種別がクレジット（サービス）、クレジット（コンテンツ）、コンテンツ決済の場合
			if(CHW02701SFLogic.KAIK_SBT_CRE_SVC.equals(kaikSbtValue) 
				|| CHW02701SFLogic.KAIK_SBT_CRE_CONT.equals(kaikSbtValue) 
				|| CHW02701SFLogic.KAIK_SBT_CONT_KESSAI.equals(kaikSbtValue))
			{
				
				// クレジットカード会社プルダウン選択値
				String creCompCd = JKKWebCommon.getPullDownCode(bean,CHW02701SFConst.CRECARD_COMP,CHW02701SFConst.INDEX,CHW02701SFConst.CD_LIST);
	
				// クレジットカード会社コードを決定
				parentMap.put("crecard_comp_cd", creCompCd);
			}
			
			// 会計種別がコンテンツ決済の場合
			if(CHW02701SFLogic.KAIK_SBT_CONT_KESSAI.equals(kaikSbtValue))
			{
				
				// コンテンツサービスプルダウン選択値
				String prcKmkCd = JKKWebCommon.getPullDownCode(bean,CHW02701SFConst.CONT_SVC,CHW02701SFConst.INDEX,CHW02701SFConst.CD_LIST);
	
				// 料金項目コードを決定
				parentMap.put("prc_kmk_cd", prcKmkCd);
			}
			
			// 会計種別が債権回収委託会社の場合
			if(CHW02701SFLogic.KAIK_SBT_SAIKEN_ZENTOU.equals(kaikSbtValue) 
					|| CHW02701SFLogic.KAIK_SBT_SAIKEN_TOUYOKU.equals(kaikSbtValue))
			{
				
				// 債権回収委託会社プルダウン選択値
				String sknksitkcm = JKKWebCommon.getPullDownCode(bean,CHW02701SFConst.SKNKSITKCM,CHW02701SFConst.INDEX,CHW02701SFConst.CD_LIST);
	
				// 債権回収委託会社コードを決定
				parentMap.put("sknksitkcm_cd", sknksitkcm);
			}
			
			// ★以下、共通設定項目★
			// 補正年月日
			parentMap.put("hosei_ymd", opedate);
			// 会計計上月
			parentMap.put("kaik_sumup_mon", bean.sendMessageString(CHW02701SFConst.KAIK_SUMUP_MON, X31CWebConst.DATABEAN_GET_VALUE));
			// 件数
			parentMap.put("cnt", bean.sendMessageString(CHW02701SFConst.CNT, X31CWebConst.DATABEAN_GET_VALUE));
			// 金額
			parentMap.put("amnt", bean.sendMessageString(CHW02701SFConst.AMNT, X31CWebConst.DATABEAN_GET_VALUE));
			// 補正種別コード
			parentMap.put("hosei_sbt_cd", hoseiSbtValue);
			// 補正区分
			parentMap.put("hosei_div", "1");
		}
		// 補正区分「2:更新の場合」
		else if("2".equals(hoseiDiv))
		{
			// 対象補正番号
			String tgHoseiNo = bean.sendMessageString(CHW02701SFConst.TG_HOSEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 補正情報一覧を取得
			X31SDataBeanAccessArray hoseiIFList = bean.getDataBeanArray(CHW02701SFConst.HOSEI_INFO_LIST);
			for (int j = 0; j < hoseiIFList.getCount(); j++)
			{
				X31SDataBeanAccess hoseiIFListBean = hoseiIFList.getDataBean(j);
				
				if(tgHoseiNo.equals(hoseiIFListBean.sendMessageString(CHW02701SFConst.HOSEI_NO, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					//一覧を取得
					BigDecimal staxAmnt = new BigDecimal(hoseiIFListBean.sendMessageString(CHW02701SFConst.STAX_AMNT, X31CWebConst.DATABEAN_GET_VALUE));
					BigDecimal amnt = new BigDecimal(hoseiIFListBean.sendMessageString(CHW02701SFConst.AMNT, X31CWebConst.DATABEAN_GET_VALUE));
					BigDecimal extaxAmnt = amnt.subtract(staxAmnt);
					String updDtm = hoseiIFListBean.sendMessageString(CHW02701SFConst.HOSEI_INFO_UPD_DTM, X31CWebConst.DATABEAN_GET_VALUE);
					
					// 補正年月日
					parentMap.put("hosei_ymd", opedate);
					// 補正情報番号
					parentMap.put("hosei_no", tgHoseiNo);
					// 消費税額
					parentMap.put("stax_amnt", String.valueOf(staxAmnt));
					// 税抜金額
					parentMap.put("tax_exc_amnt", String.valueOf(extaxAmnt));
					// 更新年月日時分秒（更新前）
					parentMap.put("upd_dtm", updDtm);
					// 補正区分
					parentMap.put("hosei_div", "2");
				}
				
			}
		}
		// 補正区分「3:削除の場合」
		else if("3".equals(hoseiDiv))
		{
			// 対象補正番号
			String tgHoseiNo = bean.sendMessageString(CHW02701SFConst.TG_HOSEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 補正情報一覧を取得
			X31SDataBeanAccessArray hoseiIFList = bean.getDataBeanArray(CHW02701SFConst.HOSEI_INFO_LIST);
			for (int j = 0; j < hoseiIFList.getCount(); j++)
			{
				X31SDataBeanAccess hoseiIFListBean = hoseiIFList.getDataBean(j);
				
				if(tgHoseiNo.equals(hoseiIFListBean.sendMessageString(CHW02701SFConst.HOSEI_NO, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					//一覧を取得
					String updDtm = hoseiIFListBean.sendMessageString(CHW02701SFConst.HOSEI_INFO_UPD_DTM, X31CWebConst.DATABEAN_GET_VALUE);
					
					// 補正情報番号
					parentMap.put("hosei_no", tgHoseiNo);
					// 更新年月日時分秒（更新前）
					parentMap.put("upd_dtm", updDtm);
					// 補正区分
					parentMap.put("hosei_div", "3");
				}
				
			}
		}


		outputMap.put("CHSV009301CC", parentMap);
						
		return outputMap;	
	}

}