/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：契約管理
 *   モジュール名    ：精算金計算画面
 *   ソースファイル名：KKW22101SFLogic.java
 *   作成者          ：FJ)澤田
 *   日付            ：2017年12月22日
 *＜機能概要＞
 *   精算金計算画面ビューロジックです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v36.00.00	 2018/02/09   FJ）澤田	  新規作成【ANK-3296-00-00】
 *   v45.00.00	 2019/09/06   FJ) 三原	  ANK-3681-00-00_精算金計算画面の表示対象拡大
 *   v49.00.00	 2020/06/11   FJ) 荒木	 【ANK-3840-00-00】テレビリースサービス新規申込対応
 **********************************************************************/
package eo.web.webview.KKW22101SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JZMCommonUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW00127SF.KKW00127SFConst;
import eo.web.webview.KKW22101SF.KKW22101SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0891_KKSV0891OPDBMapper;
import eo.web.webview.mapping.KKSV0892_KKSV0892OPDBMapper;

/**
 * 精算金計算画面ビューロジック.
 * <p>
 * <BR>
 * 
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW22101SFLogic extends JCCWebBusinessLogic 
{	
	/** ポップアップモード：POPアップ遷移（モーダレス） */
	public static final String POPUP_MODE_MODALESS = "2";

	/** 異動区分選択画面遷移パターン：自画面遷移パターン */
	public static final String IDO_DIV_SENI_PTN_ONESELF = "01";
	
	/** 顧客契約引継情報項目キー */
	private static final String[] CUST_KEI_HKTGI_KEYS =
	{
			JKKCommonConst.HKTGI_SYSID,
			JKKCommonConst.HKTGI_SVC_KEI_NO,
			JKKCommonConst.HKTGI_IDO_DIV,
			JKKCommonConst.HKTGI_IDO_RSN_CD,
			JKKCommonConst.HKTGI_IDO_RSN_MEMO,
			JKKCommonConst.HKTGI_POPUP_MODE,
			JKKCommonConst.HKTGI_IDO_DIV_SENI_PTN,
			JKKCommonConst.HKTGI_SVC_CD,
			JKKCommonConst.HKTGI_PRC_GRP_CD,
			JKKCommonConst.HKTGI_PCRS_CD,
			JKKCommonConst.HKTGI_PPLAN_CD,
			JKKCommonConst.HKTGI_SVC_CD_BF,
			JKKCommonConst.HKTGI_PRC_GRP_CD_BF,
			JKKCommonConst.HKTGI_PCRS_CD_BF,
			JKKCommonConst.HKTGI_PPLAN_CD_BF,
			JKKCommonConst.HKTGI_WRIB_AUTO_APLY_TG_GAI_FLG,
			JKKCommonConst.HKTGI_SYSCD	
	};

	/**
	 * 照会画面初期表示処理
	 * @return 正常終了:true 異常修了:false
	 * @throws Exception 
	 */
	public boolean actionInit() throws Exception
	{
		
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		//サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// マッピング用paramBeanセット
		X31SDataBeanAccess[] paramBean = {svcFormBean};
		
		// 引継情報の取得
		String hktgSvcKeiNo = "";
// ANK-3840-00-00 ADD START
		String hktgSysid = "";
// ANK-3840-00-00 ADD END
		Map<String, Object> sessionParam = JCCWebCommon.getScreenInfo(this);
		if (sessionParam != null) 
		{
			// 顧客契約引継リスト
			List<Map<String, Object>> custKeiHktgiList = (List<Map<String, Object>>)sessionParam.get(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
			if (custKeiHktgiList != null) 
			{
				Map<String, Object> hikiParam = (Map<String, Object>)custKeiHktgiList.get(0);
				hktgSvcKeiNo = (String)hikiParam.get(KKW22101SFConst.SVC_KEI_NO_01);
// ANK-3840-00-00 ADD START
				hktgSysid = (String)hikiParam.get(KKW22101SFConst.SYSID_01);
// ANK-3840-00-00 ADD END
			}
		}
		
		// ユースケースID格納用マップ
		Map<String, Object> paramMap = new HashMap<String, Object>();

		// ユースケースID格納用マップに情報を設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0891);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0891OP);

		// 条件格納用マップ
		Map<String, Object> inputMap = new HashMap<String, Object>();

		// 処理結果格納用マップ
		Map<String, Object> outputMap = new HashMap<String, Object>();

		// 処理結果格納用リスト
		List<Map<String, Object>> outputList = new ArrayList<Map<String, Object>>();

		// マッピングクラス
		KKSV0891_KKSV0891OPDBMapper mapper = new KKSV0891_KKSV0891OPDBMapper();

		// 上りマッピング
		mapper.setKKSV089101CC(paramBean, inputMap, hktgSvcKeiNo);
// ANK-3840-00-00 ADD START
		mapper.setKKSV089102CC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1, hktgSysid);
// ANK-3840-00-00 ADD END

		// サービス実行
		invokeService(paramMap, inputMap, outputMap);

		// 下りマッピング
		mapper.getKKSV089101CC(paramBean, outputMap, outputList);
// ANK-3840-00-00 ADD START
		mapper.getKKSV089102CC(paramBean, outputMap);
// ANK-3840-00-00 ADD END

		//サービス開始日チェックフラグ
		String svcStaCheckFlg = JZMCommonUtil.nullToBlank((paramBean[0].sendMessageString(KKW22101SFConst.SVC_STA_CHECK_FLG, X31CWebConst.DATABEAN_GET_VALUE)));

		//サービス提供中のお客さま情報が取得できなかった場合、エラー
		if ("1".equals(svcStaCheckFlg))
		{
			//相違があった場合、エラー
			// ANK-3681-00-00 MOD START
			//JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0740_KW, new String[]{ "サービス提供中のデータ"}, "");
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0740_KW, new String[]{ "サービス提供中、休止中断中、利用停止中のデータ"}, "");
			// ANK-3681-00-00 MOD END
		}
		
		//計算ボタン活性制御フラグ
		String calcBtnKasseiCtrlFlg = JZMCommonUtil.nullToBlank((paramBean[0].sendMessageString(KKW22101SFConst.CALC_BTN_KASSEI_CTRL_FLG, X31CWebConst.DATABEAN_GET_VALUE)));
		
		//計算ボタン活性制御フラグが１の場合、エラー（マンションの場合にフラグが設定されているため）
		if ("1".equals(calcBtnKasseiCtrlFlg))
		{
			//契約しているサービスがマンションの場合、エラー
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1040_JW, new String[]{ "表示しているデータ", "マンション契約", "計算"}, "");
		}
		
		// 運用日付の取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		paramBean[0].sendMessageString(KKW22101SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, opeDate);

		//共有フォームBean設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22101);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22101);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;

	}

	/**
	 * 計算ボタン
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean keisan() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = { bean };
		
		// 上りマッピング(サービス項目-DataBean項目マッピング)
		KKSV0892_KKSV0892OPDBMapper mapper = new KKSV0892_KKSV0892OPDBMapper();
		// 変数の定義
		HashMap<String, Object> paramMap  = new HashMap<String, Object>();
		
		HashMap<String, Object> inputMap  = new HashMap<String, Object>();
		HashMap<String, Object> outputMap  = new HashMap<String, Object>();
		
		// ユースケースID格納用マップに情報を設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0892);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0892OP);
		
		mapper.setKKSV089201CC(paramBean, inputMap);
		
		invokeService(paramMap, inputMap, outputMap);
		
		// 取得情報の下りマッピング
		mapper.getKKSV089201CC(paramBean, outputMap);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		// 自画面の画面名を設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22101);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22101);

		return true;
	}
	
	/**
	 * サービス契約リンクジャンプボタン押下。<br>
	 * <br>
	 * サービス契約リンクジャンプボタン押下処理を行います。
	 * 
	 * @return boolean
	 * @throws Exception
	 *             Exception
	 */
	public boolean svckeiLinkJump() throws Exception 
	{

		// サービスフォームBeanアクセスクラスの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 共有Beanアクセスクラスの取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		String nextScreenId = "";
		String nextScreenName = "";

		// 画面で選択されたサービス契約番号
		String svcKeiNo = bean.sendMessageString(KKW22101SFConst.SVC_KEI_LINK, X31CWebConst.DATABEAN_GET_VALUE);
		//ネット契約番号
		String svcKeiNoNet = bean.sendMessageString(KKW22101SFConst.SVC_KEI_NO_NET, X31CWebConst.DATABEAN_GET_VALUE);
		//電話契約番号
		String svcKeiNoTel = bean.sendMessageString(KKW22101SFConst.SVC_KEI_NO_TEL, X31CWebConst.DATABEAN_GET_VALUE);
		//テレビ契約番号
		String svcKeiNoTv = bean.sendMessageString(KKW22101SFConst.SVC_KEI_NO_TV, X31CWebConst.DATABEAN_GET_VALUE);

		
		// サービス契約番号で画面振り分け
		if (svcKeiNoNet.equals(svcKeiNo))
		{
			nextScreenId = JKKScreenConst.SCREEN_ID_KKW00128;
			nextScreenName = JKKScreenConst.SCREEN_NAME_KKW00128;
		} 
		else if (svcKeiNoTel.equals(svcKeiNo)) 
		{
			nextScreenId = JKKScreenConst.SCREEN_ID_KKW00130;
			nextScreenName = JKKScreenConst.SCREEN_NAME_KKW00130;
		} 
		else if (svcKeiNoTv.equals(svcKeiNo)) 
		{
			nextScreenId = JKKScreenConst.SCREEN_ID_KKW00129;
			nextScreenName = JKKScreenConst.SCREEN_NAME_KKW00129;
		}
		
		// 顧客契約内引継ぎデータセット
		HashMap<String, Object> bkHktgiDataMap = getHktgiDataMap(bean, KKW22101SFConst.CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);

		// サービス契約番号をセットする。
		List<HashMap<String, Object>> dataList = (List<HashMap<String, Object>>)bkHktgiDataMap.get(KKW22101SFConst.CUST_KEI_HKTGI_LIST);
		dataList.get(0).put(JKKCommonConst.HKTGI_SVC_KEI_NO, svcKeiNo);
		dataList.get(0).put(JKKCommonConst.HKTGI_IDO_DIV_SENI_PTN, IDO_DIV_SENI_PTN_ONESELF);
		dataList.get(0).put(JKKCommonConst.HKTGI_POPUP_MODE, POPUP_MODE_MODALESS);

		// 顧客契約内引継ぎデータセット
		JCCWebCommon.setScreenInfo(this, nextScreenId, bkHktgiDataMap);

		// 子画面に親画面の画面IDを設定
		JCCWebCommon.setScreenId(this, nextScreenId,
				JKKScreenConst.SCREEN_ID_KKW22101);

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);

		return true;
	}
	
	/**
	 * 割賦情報ボタン押下。<br>
	 * <br>
	 * 割賦情報ボタン押下処理を行います。
	 * 
	 * @return boolean
	 * @throws Exception
	 *             Exception
	 */
	public boolean kapInfo() throws Exception 
	{

		// サービスフォームBeanアクセスクラスの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 共有Beanアクセスクラスの取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		String nextScreenId = "";
		String nextScreenName = "";

		//ネット契約番号
		String svcKeiNoNet = bean.sendMessageString(KKW22101SFConst.SVC_KEI_NO_NET, X31CWebConst.DATABEAN_GET_VALUE);
		
		nextScreenId = JKKScreenConst.SCREEN_ID_KKW15501;
		nextScreenName = JKKScreenConst.SCREEN_NAME_KKW15501;
		
		// 顧客契約内引継ぎデータセット
		HashMap<String, Object> bkHktgiDataMap = getHktgiDataMap(bean, KKW22101SFConst.CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);

		// サービス契約番号をセットする。
		List<HashMap<String, Object>> dataList = (List<HashMap<String, Object>>)bkHktgiDataMap.get(KKW22101SFConst.CUST_KEI_HKTGI_LIST);
		dataList.get(0).put(JKKCommonConst.HKTGI_SVC_KEI_NO, svcKeiNoNet);
		
		// 顧客契約内引継ぎデータセット
		JCCWebCommon.setScreenInfo(this, nextScreenId, bkHktgiDataMap);

		// 子画面に親画面の画面IDを設定
		JCCWebCommon.setScreenId(this, nextScreenId,
				JKKScreenConst.SCREEN_ID_KKW22101);

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);

		return true;
	}
	
	/**
	 * <dd>メソッド名：引継情報データマップ取得 <dd>メソッド説明：引数のサービスフォームBeanより引継情報データマップの生成を行う。 <dd>
	 * 備考：引継情報データタイプの可変項目はString[]のみ対応。
	 * 
	 * @param bean
	 *            サービスフォームBean
	 * @param hktgiKey
	 *            引継情報データタイプのキー
	 * @param hktgiPrmKeys
	 *            引継情報データタイプの項目キーリスト
	 * @return HashMap<String, Object> 引継情報データマップ
	 */
	private HashMap<String, Object> getHktgiDataMap(X31SDataBeanAccess bean,
			String hktgiKey, String[] hktgiPrmKeys) 
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();

		X31SDataBeanAccessArray infList = bean.getDataBeanArray(hktgiKey);
		HashMap<String, Object> inMap = null;

		for (int i = 0; i < infList.getCount(); i++) {
			inMap = new HashMap<String, Object>();
			X31SDataBeanAccess inf = infList.getDataBean(i);
			for (int j = 0; j < hktgiPrmKeys.length; j++) {
				try {
					inMap.put(hktgiPrmKeys[j], inf.sendMessageObject(
							hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE));
				} catch (X31SRuntimeException ex) {
					// 可変項目の場合(String[]のみ対応)
					int length = (Integer) inf.sendMessage(hktgiPrmKeys[j],
							X31CWebConst.DATABEAN_GET_COUNT);
					String[] obj = new String[length];
					for (int k = 0; k < length; k++) {
						obj[k] = inf.sendMessageString(hktgiPrmKeys[j],
								X31CWebConst.DATABEAN_GET_VALUE, k);
					}
					inMap.put(hktgiPrmKeys[j], obj);
				}
			}
			dataList.add(inMap);
		}
		dataMap.put(hktgiKey, dataList);
		return dataMap;
	}
// ANK-3840-00-00 ADD START
	/**
	 * 「リース契約画面へ遷移」リンク押下時処理
	 * 
	 * @return 正常終了:true 異常終了:false
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean actionTransferVcms() throws Exception
	{

		// 共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// 画面情報を設定（VCMSシステム起動画面）
		HashMap<String, Object> hktgiDataMap = getHktgiDataMap(svcFormBean,
				KKW22101SFConst.CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);

		// ＶＣＭＳ画面遷移区分を引継リストに追加設定
		List<HashMap<String, Object>> dataList = (List<HashMap<String, Object>>)hktgiDataMap.get(KKW22101SFConst.CUST_KEI_HKTGI_LIST);
		dataList.get(0).put(KKW22101SFConst.HKTGI_VCMS_DIV, 
				JZMCommonUtil.nullToBlank(svcFormBean.sendMessageString(KKW22101SFConst.HKTGI_VCMS_DIV, X31CWebConst.DATABEAN_GET_VALUE)));

		// 画面情報を設定(VCMSシステム起動画面)
		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW00198, hktgiDataMap);
		JCCWebCommon.setScreenId(this, JKKScreenConst.SCREEN_ID_KKW00198, JKKScreenConst.SCREEN_ID_KKW22101);

		// 共有フォームBean設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JKKScreenConst.SCREEN_ID_KKW00198);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JKKScreenConst.SCREEN_NAME_KKW00198);

		return true;
	}
// ANK-3840-00-00 ADD END
}
