/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CHW00102SFLogic
 *	ソースファイル名：CHW00102SFLogic.java
 *	作成者			：富士通
 *	日付			：2011年07月27日
 *＜機能概要＞
 *	債権照会のビューロジック部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/07/27	富士通		新規作成
 *	v5.00.00	2013/09/18	FJ) 林	   【OM-2013-0002010】銀行名/支店名/口座種別/口座番号/口座名義名（カナ）/口座振替結果出力不正対応
 *	v32.00.00	2017/04/15	FJ) 清原	【ANK-2996-00-00】ＳＭＳを利用した即時決済サービスの導入
 *  v52.00.00   2020/12/17  FJ)寺園    【ANK-3838-00-00、IT1-2020-0000084】窓口払い手数料の顧客負担方式導入
 *  v54.00.00   2021/09/15  FJ)平野   【IT1-2021-0000075】手動入金と債権回収会社一括入金と画面表示内容が一致しない
 *  v58.00.00   2022/04/12  FJ)北村    【ANK-3846-00-00】クリアパス→ペイジェント移行
 *  v67.00.00   2023/05/26  GDC)v.auditor   【ANK-4415-00-00】口振請求及びWeb申込システム移行 STEP1
 **********************************************************************/
package eo.web.webview.CHW00102SF;

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.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CHW00102SF.CHW00102SFConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHPageTransferUtil;
import eo.web.webview.common.JCHWebCommon;
import eo.web.webview.mapping.CHSV0002_CHSV0002OPDBMapper;

/**
 * 債権詳細照会のビューロジックを提供します。
 * <p>
 * <BR>
 * 
 * @author 富士通
 */
public class CHW00102SFLogic extends JCCWebBusinessLogic
{

	/** ユースケースID(債権詳細照会) */
	private static final String USECASE_ID_CHSV0002 = "CHSV0002";

	/**
	 * 債権詳細照会の初期表示処理を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean init() throws Exception
	{
		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを判定して画面IDに対応する初期表示処理を呼び出す
		String screenId = commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		if (screenId.equals(JACScreenConst.SCREEN_ID_CHW00102))
		{
			initDetailShokaiScreen();
		}

		return true;
	}

	/**
	 * モーダル反映画面に遷移して画面を閉じます。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean close() throws Exception
	{
		// 遷移先画面IDを取得し、子画面を閉じる共通処理を呼出す
		return JCHPageTransferUtil.closeTransfer(this, JCCWebCommon.getScreenId(this));
	}

	/**
	 * 債権詳細照会画面の初期表示処理を行います。 <br>
	 * 
	 * @throws Exception 例外が発生した場合
	 */
	private void initDetailShokaiScreen() throws Exception
	{
		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// 未納金額
		String saikenAmnt = paramBeans[0].sendMessageString(CHW00102SFConst.SAIKEN_AMNT, X31CWebConst.DATABEAN_GET_VALUE);
		String jutoAmnt = paramBeans[0].sendMessageString(CHW00102SFConst.JUTO_AMNT, X31CWebConst.DATABEAN_GET_VALUE);
		String minoAmnt = JCHWebCommon.calcSubtract(saikenAmnt, jutoAmnt, true);
		paramBeans[0].sendMessageString(CHW00102SFConst.MINO_AMNT, X31CWebConst.DATABEAN_SET_VALUE, minoAmnt);

		// 債権詳細照会サービス実行
		this.execCHSV0002(paramBeans);

		return;
	}

	/**
	 * 債権詳細照会サービスを実行します。 <br>
	 * 
	 * @param paramBeans 債権詳細照会サービスフォームBean
	 */
	private void execCHSV0002(X31SDataBeanAccess[] paramBeans) throws Exception
	{
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0002);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0002_CHSV0002OPDBMapper mapper = new CHSV0002_CHSV0002OPDBMapper();

		mapper.setCHSV000201SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// ECH0011A010 : 債権一意照会SC
		mapper.setCHSV000203SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// ECH0051A010 : 請求一意照会SC
		mapper.setCHSV000204SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);		// ECH0051B010 : 請求一覧照会SC
		mapper.setCHSV000205SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// ECH0201B010 : 充当一覧照会SC
		// ANK-3846-00-00 ADD START
		mapper.setCHSV000206SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);		// EKK0491B040 : クレジット特定カード情報照会SC
		// ANK-3846-00-00 ADD END

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getCHSV000201SC(paramBeans, outputMap);
		mapper.getCHSV000203SC(paramBeans, outputMap);
		mapper.getCHSV000204SC(paramBeans, outputMap);
		mapper.getCHSV000205SC(paramBeans, outputMap);
		// ANK-3846-00-00 ADD START
		mapper.getCHSV000206SC(paramBeans, outputMap);
		// ANK-3846-00-00 ADD END

		// 制御値(請求一覧情報)
		this.setCtrlValueInSeikyIcrn(paramBeans);

		// 制御値(充当一覧)と領収日の項目を編集する
		this.setCtrlValueInJutoIcrn(paramBeans);
	}

	/**
	 * 請求一覧情報の制御値を設定します。 <br>
	 * 
	 * @param bean 債権詳細照会サービスフォームBean
	 */
	private void setCtrlValueInSeikyIcrn(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray seikyIcrnInfo = bean[0].getDataBeanArray(CHW00102SFConst.SEIKY_ICRN_INFO);
		for (int idx = 0; idx < seikyIcrnInfo.getCount().intValue(); idx++)
		{
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			if (idx % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			}
			seikyIcrnInfo.getDataBean(idx).sendMessageString(CHW00102SFConst.DSP_CNTRL_VALUE_02, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}
	}

	/**
	 * 充当一覧情報の制御値及び領収日制御を設定します。 <br>
	 * 
	 * @param bean 債権詳細照会サービスフォームBean
	 */
	private void setCtrlValueInJutoIcrn(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray jutoIcrnInfoArray = bean[0].getDataBeanArray(CHW00102SFConst.JUTO_ICRN_INFO);
		
		for (int idx = 0; idx < jutoIcrnInfoArray.getCount().intValue(); idx++)
		{
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			if (idx % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			}
			jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.DSP_CNTRL_VALUE_03, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);

			// 領収日表示制御値  デフォルト値　１：空表示
			jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.DSP_CNTRL_VALUE_RECEIPT_YMD_03, X31CWebConst.DATABEAN_SET_VALUE, "1");

			// 入金経路コード
			String nyukinRouteCd = jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.NYUKIN_ROUTE_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
			// 入金登録方法コード
			String nyukinAddWayCd = jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.NYUKIN_ADD_WAY_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
			// 領収年月日
			String receiptYmd = jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.SHUNO_DAY_03, X31CWebConst.DATABEAN_GET_VALUE);

			// 入金経路が現金、総合口座、郵便振込、郵券の場合
			if (JACStrConst.NYKNKEIRCD_GENKIN.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_TTL_KOZA.equals(nyukinRouteCd)
					// IT1-2021-0000075 MOD START
//					|| JACStrConst.NYKNKEIRCD_YUBIN_FURIKM.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_YUKEN.equals(nyukinRouteCd)
					|| JACStrConst.NYKNKEIRCD_YUBIN_FURIKM.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_YUKEN.equals(nyukinRouteCd))
					// IT1-2021-0000075 MOD END
					// IT1-2021-0000075 DEL START
//					|| JACStrConst.NYKNKEIRCD_SAIKEN_KAISHU.equals(nyukinRouteCd))
					// IT1-2021-0000075 DEL END
			{

				// 入金登録方法が自動入金以外の場合
				if (!JACStrConst.NYUKIN_ADD_WAY_AUTO.equals(nyukinAddWayCd))
				{
					jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.DSP_CNTRL_VALUE_RECEIPT_YMD_03, X31CWebConst.DATABEAN_SET_VALUE, "2");
					// 領収日を設定する
					jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.SHUNO_DAY_03, X31CWebConst.DATABEAN_SET_VALUE, receiptYmd);
				}

			}
			//ANK-4415-00-00 MOD START
			// 入金経路が口座振替（ＣＰ）、口座振替、郵便自動振込（ＣＰ）、郵便自動振込、窓口入金、コンビニ、決済代行（ＳＭＢＣ）、債権回収委託会社の場合
//			if (JACStrConst.NYKNKEIRCD_KOZA.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_YUBIN_AUTO.equals(nyukinRouteCd)
			if (JACStrConst.NYKNKEIRCD_KOZA_CP.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_KOZA_SMBCFS.equals(nyukinRouteCd)
					|| JACStrConst.NYKNKEIRCD_YUBIN_AUTO_CP.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_YUBIN_AUTO_SMBCFS.equals(nyukinRouteCd)
			//ANK-4415-00-00 MOD END
//v32.00.00 Mod Start
//					|| JACStrConst.NYKNKEIRCD_MDGC.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_CVSTORE.equals(nyukinRouteCd))
					|| JACStrConst.NYKNKEIRCD_MDGC.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_CVSTORE.equals(nyukinRouteCd)
//v52.00.00 Mod Start
//					|| JACStrConst.NYKNKEIRCD_KESSAI_SMBC.equals(nyukinRouteCd))
					// IT1-2021-0000075 MOD START
//					|| JACStrConst.NYKNKEIRCD_KESSAI_SMBC.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_BANK_HRIKOMI.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_CVSTORE_ETC.equals(nyukinRouteCd))
					|| JACStrConst.NYKNKEIRCD_KESSAI_SMBC.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_BANK_HRIKOMI.equals(nyukinRouteCd) || JACStrConst.NYKNKEIRCD_CVSTORE_ETC.equals(nyukinRouteCd)
					// IT1-2021-0000075 MOD END
//v52.00.00 Mod End
//v32.00.00 Mod End
					// IT1-2021-0000075 ADD START
					|| JACStrConst.NYKNKEIRCD_SAIKEN_KAISHU.equals(nyukinRouteCd))
					// IT1-2021-0000075 ADD END
			{
				
				jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.DSP_CNTRL_VALUE_RECEIPT_YMD_03, X31CWebConst.DATABEAN_SET_VALUE, "2");
				// 領収日を設定する
				jutoIcrnInfoArray.getDataBean(idx).sendMessageString(CHW00102SFConst.SHUNO_DAY_03, X31CWebConst.DATABEAN_SET_VALUE, receiptYmd);
			
			}

		}
	}
}
