/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：CHW02601SFLogic
 *   ソースファイル名：CHW02601SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2020年12月08日
 *＜機能概要＞
 *   パーフェクト口座情報登録のビューロジック部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *  v52.00.00   2020/12/08  GDC)        【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
 **********************************************************************/
package eo.web.webview.CHW02601SF;

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 eo.common.constant.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
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.JCHPageTransferUtil;
import eo.web.webview.common.JCHWebCommon;
import eo.web.webview.mapping.CHSV0089_CHSV0089OPDBMapper;
import eo.web.webview.mapping.CHSV0090_CHSV0090OPDBMapper;

public class CHW02601SFLogic extends JCCWebBusinessLogic {
	
	/**
	 * パーフェクト口座情報登録の初期表示処理を行います。 <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_CHW02601))
		{
			initAddUpdScreen();
		}

		return true;
	}
	
	/**
	 * 画面の初期表示処理を行います。 <br>
	 * 
	 * @throws Exception 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private void initAddUpdScreen() throws Exception
	{
		// (1)	セッション情報取得
		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };
		
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CHSV0089");

		// マッピングクラスの結果を格納するHashMap
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// (2)	サービス呼出処理
		CHSV0089_CHSV0089OPDBMapper mapper = new CHSV0089_CHSV0089OPDBMapper();
		mapper.setCHSV008901SC(paramBeans, inputMap, JPCModelConstant.FUNC_CD_2);
		
		// サービスの呼び出し
		invokeService(paramMap, inputMap, outputMap);
		
		mapper.getCHSV008901SC(paramBeans, outputMap);
		
		// (3)	サービス呼出後のデフォルト値設定
		String updDtmPkoza = bean.sendMessageString(CHW02601SFConst.UPD_DTM_PKOZA, X31CWebConst.DATABEAN_GET_VALUE);
		
		if(JCHWebCommon.isNullOrEmpty(updDtmPkoza)) {
			
			// 日付項目に運用日をセットする。
			String opedate = JCCWebCommon.getOpeDate(this, null);
			
			String year = opedate.substring(0, 4);
			String mon = opedate.substring(4, 6);
			String day = opedate.substring(6, 8);
			
			bean.sendMessageString(CHW02601SFConst.PKOZA_STAT, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.PKOZA_STAT_HARAIDASICHU);
			bean.sendMessageString(CHW02601SFConst.PKOZA_USE_UM, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.UM_NASHI);
			bean.sendMessageString(CHW02601SFConst.PKOZA_ADD_YMD_YYYY, X31CWebConst.DATABEAN_SET_VALUE, year);
			bean.sendMessageString(CHW02601SFConst.PKOZA_ADD_YMD_MM, X31CWebConst.DATABEAN_SET_VALUE, mon);
			bean.sendMessageString(CHW02601SFConst.PKOZA_ADD_YMD_DD, X31CWebConst.DATABEAN_SET_VALUE, day);
		}
		
		return;
	}

	/**
	 * パーフェクト口座情報登録確認画面に遷移します。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean addCfm() throws Exception
	{
		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean, commoninfoBean };
		
		String pkozaNoInit = bean.sendMessageString(CHW02601SFConst.PKOZA_NO_INIT, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaNo = bean.sendMessageString(CHW02601SFConst.PKOZA_NO, X31CWebConst.DATABEAN_GET_VALUE);
		
		// (1)	関連チェック
		// DataBean.PKOZA_NO_INIT が設定あり かつ	
		// DataBean.PKOZA_NO_INIT <> DataBean.PKOZA_NO の場合、ワーニングとする。	
		// メッセージID：EKBF510--Q
		if((pkozaNoInit != null && !pkozaNoInit.equals("")) && !pkozaNoInit.equals(pkozaNo)){
			JCCWebCommon.setMessageInfo(this, "EKBF510--Q");
		}
		
		// (2)	サービス呼出前のDataBean編集
		String pkozaAddYmdYyyy = bean.sendMessageString(CHW02601SFConst.PKOZA_ADD_YMD_YYYY, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaAddYmdMm = bean.sendMessageString(CHW02601SFConst.PKOZA_ADD_YMD_MM, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaAddYmdDd = bean.sendMessageString(CHW02601SFConst.PKOZA_ADD_YMD_DD, X31CWebConst.DATABEAN_GET_VALUE);
		String yyyymmdd = pkozaAddYmdYyyy + pkozaAddYmdMm + pkozaAddYmdDd;
		bean.sendMessageString(CHW02601SFConst.PKOZA_ADD_YMD, X31CWebConst.DATABEAN_SET_VALUE, yyyymmdd);
		
		String pkozaUseUm = bean.sendMessageString(CHW02601SFConst.PKOZA_USE_UM, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaUseUmInit = bean.sendMessageString(CHW02601SFConst.PKOZA_USE_UM_INIT, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaNoV = bean.sendMessageString(CHW02601SFConst.PKOZA_NO, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaNoVInit = bean.sendMessageString(CHW02601SFConst.PKOZA_NO_INIT, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaAddYmd = yyyymmdd;
		String pkozaAddYmdInit = bean.sendMessageString(CHW02601SFConst.PKOZA_ADD_YMD_INIT, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaBnkNm = bean.sendMessageString(CHW02601SFConst.PKOZA_BANK_NM, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaBnkNmInit = bean.sendMessageString(CHW02601SFConst.PKOZA_BANK_NM_INIT, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaShtnNm = bean.sendMessageString(CHW02601SFConst.PKOZA_SHITEN_NM, X31CWebConst.DATABEAN_GET_VALUE);
		String pkozaShtnNmInit = bean.sendMessageString(CHW02601SFConst.PKOZA_SHITEN_NM_INIT, X31CWebConst.DATABEAN_GET_VALUE);
		
		String updDtmKoza = bean.sendMessageString(CHW02601SFConst.UPD_DTM_PKOZA, X31CWebConst.DATABEAN_GET_VALUE);
		
		String inputValue = "";
		String pkozaUseUmInitConvert = "";
		String pkozaUseUmConvert = "";
		
		if(pkozaUseUmInit.equals("0")){
			pkozaUseUmInitConvert = "無";
		}
		else{
			pkozaUseUmInitConvert = "有";
		}
		if(pkozaUseUm.equals("0")){
			pkozaUseUmConvert = "無";
		}
		else{
			pkozaUseUmConvert = "有";
		}
		
		if(JCHWebCommon.isNullOrEmpty(updDtmKoza)){
			inputValue = 
				"【パーフェクト口座利用有無："+ pkozaUseUm + ":" + pkozaUseUmConvert + "】" + 
				"【パーフェクト口座番号：" + pkozaNoV + "】" + 
				"【パーフェクト口座登録年月日：" + pkozaAddYmd + "】" +
				"【パーフェクト口座金融機関名：" + pkozaBnkNm + "】" +
				"【パーフェクト口座支店名：" + pkozaShtnNm + "】";
		}
		else{
			
			if(!pkozaUseUmInit.equals(pkozaUseUm)){
				inputValue = 
					"【パーフェクト口座利用有無：" + pkozaUseUmInit + ":" + pkozaUseUmInitConvert + "→" + pkozaUseUm + ":" + pkozaUseUmConvert + "】";
			}
			if(!pkozaNoVInit.equals(pkozaNoV)){
				inputValue += 
					"【パーフェクト口座番号：" + pkozaNoVInit + "→" + pkozaNoV + "】";
			}
			if(!pkozaAddYmdInit.equals(pkozaAddYmd)){
				inputValue +=
					"【パーフェクト口座登録年月日：" + pkozaAddYmdInit + "→" + pkozaAddYmd + "】";
			}
			if(!pkozaBnkNmInit.equals(pkozaBnkNm)){
				inputValue += 
					"【パーフェクト口座金融機関名：" + pkozaBnkNmInit + "→" + pkozaBnkNm + "】";
			}
			if(!pkozaShtnNmInit.equals(pkozaShtnNm)){
				inputValue += 
					"【パーフェクト口座支店名：" + pkozaShtnNmInit + "→" + pkozaShtnNm + "】";
			}
		
		}
		
		bean.sendMessageString(CHW02601SFConst.KIJI_RYOKIN_TAIO_KRK, X31CWebConst.DATABEAN_SET_VALUE, inputValue);
		
		// (3)	サービス呼出処理
		// CHSV0090OPOperation.java を呼び出します（機能コード：2 チェックモード）。
		X31CMessageResult msgResult = this.execCHSV0090(paramBeans, JPCModelConstant.FUNC_CD_2);
		
		// エラー処理
		if (msgResult != null) {
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// (4)	確認画面への遷移
		// メッセージ領域の背景色の設定
		JCCWebCommon.setMessageAreaBackColor(this, "1");

		// メッセージの設定
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[] {"登録"});

		// 遷移先画面を設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_CHW02602);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_CHW02602);

		return true;
	}
	
	/**
	 * 登録サービスを実行します。 <br>
	 * 
	 * @param paramBeans 登録サービスフォームBean
	 * @param funcCd 機能コード
	 * @return X31CMessageResult
	 */
	private X31CMessageResult execCHSV0090(X31SDataBeanAccess[] paramBeans, String funcCd)
	{
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CHSV0090");

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		
		String updDtmKoza = paramBeans[0].sendMessageString(CHW02601SFConst.UPD_DTM_PKOZA, X31CWebConst.DATABEAN_GET_VALUE);
		
		CHSV0090_CHSV0090OPDBMapper mapper = new CHSV0090_CHSV0090OPDBMapper();
		mapper.setPKOZAADDUPDCC(paramBeans, inDataMap, funcCd);
		mapper.setPRCTAIOKIROKADDCC(paramBeans, inDataMap, funcCd, updDtmKoza);
		
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// サービスの呼び出し
		return invokeService(paramMap, inDataMap, outputMap);
	}
	
	/**
	 * 修正ボタン押下した場合、パーフェクト口座情報登録画面に遷移します。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean shusei() throws Exception
	{
		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// 遷移先画面を設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_CHW02601);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_CHW02601);

		return true;
	}
	
	/**
	 * 確定完了ボタン押下した場合、パーフェクト口座情報登録を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean fixFin() throws Exception
	{
		// (1)	サービス呼出処理
		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean, commoninfoBean };

		X31CMessageResult msgResult = this.execCHSV0090(paramBeans, JPCModelConstant.FUNC_CD_1);
		
		// エラー処理
		if (msgResult != null) {
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		// 遷移先画面を設定する
		this.close();
		
		return true;
	}
	
	/**
	 * 閉じるボタンを押下した場合、画面をクローズして債権管理画面の再検索を行います。<br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean close() throws Exception
	{
		// 遷移先画面IDを取得し、子画面を閉じる共通処理を呼出す
		return JCHPageTransferUtil.closeTransfer(this, JCCWebCommon.getScreenId(this));
	}
	
}
