/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CHW00108SFLogic
 *	ソースファイル名：CHW00108SFLogic.java
 *	作成者			：富士通
 *	日付			：2011年07月30日
 *＜機能概要＞
 *	請求詳細照会のビューロジック部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/07/30	富士通		新規作成
 *	v5.00.00	2013/07/28  FJ) 林     【LT-2013-0000600】 ECH0051A010 請求一意照会 機能コードを2に変更
 *	v52.00.00	2020/11/06	FJ)三原		【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
 *	v67.00.00	2023/08/03	FJ)中川		【ANK-4415-00-00】口振請求及びWeb申込システム移行 STEP1
 *
 **********************************************************************/
package eo.web.webview.CHW00108SF;

import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
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.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHCommonServiceUtil;
import eo.web.webview.common.JCHPageTransferUtil;
import eo.web.webview.mapping.CHSV0006_CHSV0006OPDBMapper;

/**
 * 請求詳細照会のビューロジックを提供します。
 * <p>
 * <BR>
 * 
 * @author 富士通
 */
public class CHW00108SFLogic extends JCCWebBusinessLogic
{

	/** ユースケースID(請求詳細照会) */
	private static final String USECASE_ID = "CHSV0006";

	/** バーコード様式名称(通常用) */
	private static final String BARCODE_YSHK_ORDINAL = "通常用";

	/** バーコード様式名称(リアル用) */
	private static final String BARCODE_YSHK_REAL = "リアル用";

	/** 請求書様式名称(窓口払い) */
	private static final String SEIKYUS_YSHK_MADO = "窓口払い";

	/**
	 * 請求詳細照会の初期表示処理を行います。 <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_CHW00108))
		{
			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 };

		// 請求詳細照会サービス実行
		this.execCHSV0006(paramBeans);

		return;
	}

	/**
	 * 請求詳細照会サービスを実行します。 <br>
	 * 
	 * @param paramBeans 請求詳細照会サービスフォームBean
	 */
	private void execCHSV0006(X31SDataBeanAccess[] paramBeans)
	{
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0006_CHSV0006OPDBMapper mapper = new CHSV0006_CHSV0006OPDBMapper();
		mapper.setCHSV000601SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);
		mapper.setCHSV000602SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2);
// ANK-4415-00-00 ADD START
		JCHCommonServiceUtil.setSeikyDtailPayKigenCC(paramBeans, inDataMap);
// ANK-4415-00-00 ADD END

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getCHSV000601SC(paramBeans, outputMap);
		mapper.getCHSV000602SC(paramBeans, outputMap);

		// 表示内容編集
		// 合算有無、引抜き、強制窓口、バーコード様式 
		this.convCodeToNameInSeikyDetailInfo(paramBeans);

		// 制御値(請求詳細情報)
		this.setDspCtlSeikyDtlInfo(paramBeans);

		// 制御値(債権一覧情報)
		this.setCtrlValueInSaikenIcrn(paramBeans);
	}

	/**
	 * 請求詳細情報の各コード値を表示名称に変換してDataBeanに設定します。 <br>
	 * 
	 * @param bean 請求詳細照会サービスフォームBean
	 */
	private void convCodeToNameInSeikyDetailInfo(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccess infoBean = bean[0].getDataBeanArray(CHW00108SFConst.SEIKY_DETAIL_INFO).getDataBean(0);
		// 合算有無
		String gsanUmDsp = JACStrConst.KARA_MOJI;
		String gsanUm = infoBean.sendMessageString(CHW00108SFConst.GSAN_UM_01, X31CWebConst.DATABEAN_GET_VALUE);
		if (gsanUm.equals(JACStrConst.GSAN_FLG_ON))
		{
			gsanUmDsp = JACStrConst.GSAN_FLG_ON_NM;
		}
		infoBean.sendMessageString(CHW00108SFConst.GSAN_UM_01, X31CWebConst.DATABEAN_SET_VALUE, gsanUmDsp);

		// 引抜き
		String hiknkDsp = JACStrConst.KARA_MOJI;
		String hiknk = infoBean.sendMessageString(CHW00108SFConst.HIKNK_01, X31CWebConst.DATABEAN_GET_VALUE);
		if (hiknk.equals(JACStrConst.HIKNK_FLG_ON))
		{
			hiknkDsp = JACStrConst.HNTIG_SET_VALUE_HIKNK;
		}
		infoBean.sendMessageString(CHW00108SFConst.HIKNK_01, X31CWebConst.DATABEAN_SET_VALUE, hiknkDsp);

		// 強制窓口
		String kyoseiMadoDsp = JACStrConst.KARA_MOJI;
		String kyoseiMado = infoBean.sendMessageString(CHW00108SFConst.KYOSEI_MADOGUCHI_01, X31CWebConst.DATABEAN_GET_VALUE);
		if (kyoseiMado.equals(JACStrConst.KYOSEI_MADO_FLG_ON))
		{
			kyoseiMadoDsp = JACStrConst.HNTIG_SET_VALUE_KYOSEI_MADO;
		}
		infoBean.sendMessageString(CHW00108SFConst.KYOSEI_MADOGUCHI_01, X31CWebConst.DATABEAN_SET_VALUE, kyoseiMadoDsp);

		// バーコード様式
		String barcodeYshkDsp = JACStrConst.KARA_MOJI;
		String barcodeYshk = infoBean.sendMessageString(CHW00108SFConst.BARCODE_YSHK_01, X31CWebConst.DATABEAN_GET_VALUE);
		
		// ANK-3838-00-00 MOD START
		//if (barcodeYshk.equals(JACStrConst.EAN_MAKER_CD_NOMAL))
		if (JACStrConst.EAN_MAKER_CD_NOMAL.equals(barcodeYshk) || JACStrConst.EAN_MAKER_CD_NOM_CUST_FTN_SAKURA.equals(barcodeYshk)
			|| JACStrConst.EAN_MAKER_CD_NOM_COMP_FTN_SAKURA.equals(barcodeYshk))
		// ANK-3838-00-00 MOD END
		{
			barcodeYshkDsp = BARCODE_YSHK_ORDINAL;
		}
		// ANK-3838-00-00 MOD START
		//else if (barcodeYshk.equals(JACStrConst.EAN_MAKER_CD_REAL))
		else if (JACStrConst.EAN_MAKER_CD_REAL.equals(barcodeYshk) || JACStrConst.EAN_MAKER_CD_REA_CUST_FTN_SAKURA.equals(barcodeYshk)
			|| JACStrConst.EAN_MAKER_CD_REA_COMP_FTN_SAKURA.equals(barcodeYshk))
		// ANK-3838-00-00 MOD END
		{
			barcodeYshkDsp = BARCODE_YSHK_REAL;
		}
		infoBean.sendMessageString(CHW00108SFConst.BARCODE_YSHK_01, X31CWebConst.DATABEAN_SET_VALUE, barcodeYshkDsp);
	}

	/**
	 * 請求詳細情報の制御値を設定します。 <br>
	 * 
	 * @param bean 請求詳細照会サービスフォームBean
	 */
	private void setDspCtlSeikyDtlInfo(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray seikyDtlInfo = bean[0].getDataBeanArray(CHW00108SFConst.SEIKY_DETAIL_INFO);
		if (seikyDtlInfo != null && seikyDtlInfo.getCount() > 0)
		{
			String seikyusYshk = seikyDtlInfo.getDataBean(0).sendMessageString(CHW00108SFConst.SEIKYUS_YSHK_01, X31CWebConst.DATABEAN_GET_VALUE);
			if (SEIKYUS_YSHK_MADO.equals(seikyusYshk))
			{
				bean[0].sendMessageString(CHW00108SFConst.DSP_CTL_SEIKY_DETAIL_INFO, X31CWebConst.DATABEAN_SET_VALUE, "1");
			}
			else
			{
				bean[0].sendMessageString(CHW00108SFConst.DSP_CTL_SEIKY_DETAIL_INFO, X31CWebConst.DATABEAN_SET_VALUE, "0");
			}
		}
	}

	/**
	 * 債権一覧情報の制御値を設定します。 <br>
	 * 
	 * @param bean 請求詳細照会サービスフォームBean
	 */
	private void setCtrlValueInSaikenIcrn(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray saikenIcrnInfo = bean[0].getDataBeanArray(CHW00108SFConst.SAIKEN_ICRN_INFO);
		for (int idx = 0; idx < saikenIcrnInfo.getCount().intValue(); idx++)
		{
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			if (idx % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			}
			saikenIcrnInfo.getDataBean(idx).sendMessageString(CHW00108SFConst.DSP_CNTRL_VALUE_02, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
		}
	}
}
