/*********************************************************************
 *	All Rights reserved,Copyright (c) Fujitsu, 2041
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JKKejbEKK1071C041Edit
 *	ソースファイル名：JKKejbEKK1071C041Edit.java
 *	作成者			：富士通
 *	日付			：2011年07月14日
 *＜機能概要＞
 *	記載不備お客様情報審査部品クラス
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2041/07/14	富士通		新規作成
 *
 **********************************************************************/

package eo.ejb.common.edit;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK1981ETMsg;
import eo.ejb.cbs.cbsmsg.EKK1071C041CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * 記載不備お客様情報審査部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK1071C041Edit
{
	/** 審査チェック結果 OK */
	private static final String CHECK_OK = "00";

	//同一部屋番号未存在チェック
	/** 審査詳細種別コード(同一部屋番号未存在チェック) */
	private static final String JDG_DTL_SBT_CD_1 = "014";
	/** 審査対象画面タブコード */
	private static final String JUDGE_TG_SCREEN_TAB_CD = "02";
	/** 審査対象画面項目コード */
	private static final String JUDGE_TG_SCREEN_KMK_CD = "004";
	/** 審査詳細メッセージID */
	private static final String JDG_DTL_MSG_ID = "EKB8030--I";
	/** メッセージ埋込み文字 */
	private static final String MSG_UMKM_MOJI1 = "利用場所部屋番号";

	//強制解約者同一判定チェック
	/** 審査詳細種別コード(強制解約者同一判定チェック) */
	private static final String JDG_DTL_SBT_CD_2 = "015";
	/** メッセージ埋込み文字 */
	private static final String MSG_UMKM_MOJI2 = "お客様の姓と利用場所住所,強制解約者";
	/** 審査詳細メッセージID (強制解約者同一判定チェック) */
	private static final String JDG_DTL_MSG_ID_015 = "EKB8340--I";

	// 親権者情報不備チェック
	/** 審査詳細種別コード(親権者情報不備チェック) */
	private static final String JDG_DTL_SBT_CD_3 = "042";
	/** メッセージ埋込み文字 */
	private static final String MSG_UMKM_MOJI_3_MSG1 = "親権者情報";
	/** メッセージ埋込み文字 */
	private static final String MSG_UMKM_MOJI_3_MSG2 = "親権者生年月日";
	/** 未来日チェック(親権者情報不備チェック) */
	private static final String NG_MIRAI = "10";
	/** 未成年チェック(親権者情報不備チェック) */
	private static final String NG_MISEINEN = "20";
	/** 審査詳細メッセージID (親権者情報不備チェック) */
	private static final String JDG_DTL_MSG_ID_2 = "EKB4670-NW";

	// 法人格入力不備チェック
	/** 審査詳細種別コード(法人格入力不備チェック) */
	private static final String JDG_DTL_SBT_CD_4 = "043";
	/** メッセージ埋込み文字 */
	private static final String MSG_UMKM_MOJI_4_MSG1 = "法人格前後指定";
	/** メッセージ埋込み文字 */
	private static final String MSG_UMKM_MOJI_4_MSG2 = "法人格種別";
	/** 法人格前後指定コード未入力チェック */
	private static final String NG_HOUJINZENGO = "10";
	/** 法人格種別コード未入力チェック */
	private static final String NG_HOUJINSBT = "20";
	
	// 親権者情報不備チェック,法人格入力不備チェック共通
	/** 審査対象画面タブコード */
	private static final String JUDGE_TG_SCREEN_TAB_CD_1 = "03";
	/** 審査対象画面項目コード */
	private static final String JUDGE_TG_SCREEN_KMK_CD_1 = "001";
	/** 審査詳細メッセージID */
	private static final String JDG_DTL_MSG_ID_1 = "EKB7400-CE";
	
	/**
	 * コンストラクタです。
	 */
	public JKKejbEKK1071C041Edit()
	{
	}

	/**
	 * <p>
	 * 審査詳細の登録を行う（同一部屋番号未存在チェック）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd　エラー結果コード
	 */
	public void createSameRoomNoCheck(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd)
	{
		//審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C041CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_DTL_SBT_CD_1);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JUDGE_TG_SCREEN_KMK_CD);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, JDG_DTL_MSG_ID);
		inETMsg.set(KK1981ETMsg.MSG_UMKM_MOJI, MSG_UMKM_MOJI1);

		//登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		//PKが重複していた場合は関連制約エラーとする
		if(!createFlg)
		{
			inMsg.set(EKK1071C041CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C041CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}
	}	

	/**
	 * <p>
	 * 審査詳細の登録を行う（強制解約者同一判定チェック）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd　エラー結果コード
	 */
	public void createKsiDslCheck(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd)
	{
		//審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C041CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_DTL_SBT_CD_2);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JUDGE_TG_SCREEN_KMK_CD);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, JDG_DTL_MSG_ID_015);
		inETMsg.set(KK1981ETMsg.MSG_UMKM_MOJI, MSG_UMKM_MOJI2);

		//登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		//PKが重複していた場合は関連制約エラーとする
		if(!createFlg)
		{
			inMsg.set(EKK1071C041CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C041CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}
	}
	
	/**
	 * <p>
	 * 審査詳細の登録を行う（親権者情報不備チェック）。
	 * </p>
	 * @param inMsg       処理対象のメッセージキャリア
	 * @param inContext   Agentから渡されたAgentDispatchContext
	 * @param errRsltCd   エラー結果コード
	 * @param msgid       メッセージID
	 * @param umekomimoji 埋め込み文字
	 */
	public void createSinkInfHbiCheck(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd, String msgid, String umekomimoji)
	{
		//審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C041CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_DTL_SBT_CD_3);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD_1);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JUDGE_TG_SCREEN_KMK_CD_1);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, msgid);
		inETMsg.set(KK1981ETMsg.MSG_UMKM_MOJI, umekomimoji);

		//登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		//PKが重複していた場合は関連制約エラーとする
		if(!createFlg)
		{
			inMsg.set(EKK1071C041CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C041CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}
	}

	/**
	 * <p>
	 * 審査詳細の登録を行う（法人格入力不備チェック）。
	 * </p>
	 * @param inMsg     処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd エラー結果コード
	 * @param umekomiMsg 埋め込みメッセージ
	 */
	public void createHoujinKakuHbiCheck(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd, String umekomiMsg)
	{
		//審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C041CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_DTL_SBT_CD_4);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD_1);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JUDGE_TG_SCREEN_KMK_CD_1);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, JDG_DTL_MSG_ID_1);
		inETMsg.set(KK1981ETMsg.MSG_UMKM_MOJI, umekomiMsg);

		//登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		//PKが重複していた場合は関連制約エラーとする
		if(!createFlg)
		{
			inMsg.set(EKK1071C041CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C041CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}
	}

	/**
	 * <p>
	 * 記載不備お客様情報審査のチェックを行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 */
	public Object getKshbiOkForCustChkRslt(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 審査チェック処理部品
		JKKejbKK1071Edit kk1071 = new JKKejbKK1071Edit();

		// 引数設定
		String svcKeiKaienUcwkNo = inMsg.getString(EKK1071C041CBSMsg.SVC_KEI_KAISEN_UCWK_NO);
		String pcd = inMsg.getString(EKK1071C041CBSMsg.KAISEN_PLACE_PCD);
		String stateNm = inMsg.getString(EKK1071C041CBSMsg.KAISEN_PLACE_STATE_NM);
		String cityNm = inMsg.getString(EKK1071C041CBSMsg.KAISEN_PLACE_CITY_NM);
		String oaztsuNm = inMsg.getString(EKK1071C041CBSMsg.KAISEN_PLACE_OAZTSU_NM);
		String azchoNm = inMsg.getString(EKK1071C041CBSMsg.KAISEN_PLACE_AZCHO_NM);
		String bnchigo = inMsg.getString(EKK1071C041CBSMsg.KAISEN_PLACE_BNCHIGO);
		String adrttm = inMsg.getString(EKK1071C041CBSMsg.KAISEN_PLACE_ADRTTM);
		String adrrm = inMsg.getString(EKK1071C041CBSMsg.KAISEN_PLACE_ADRRM);
		String custBirthYmd = inMsg.getString(EKK1071C041CBSMsg.CUST_BIRTHD);
		String keiyakuTypeCd = inMsg.getString(EKK1071C041CBSMsg.KEISHA_TYPE_CD);
		String shinkNm = inMsg.getString(EKK1071C041CBSMsg.SKSHA_NM);
		String shinkKanaNm = inMsg.getString(EKK1071C041CBSMsg.SKSHA_KANA);
		String shinkBirthYmd = inMsg.getString(EKK1071C041CBSMsg.SKSHA_BIRTHD);
		String shinkZokugaraCd = inMsg.getString(EKK1071C041CBSMsg.SKSHA_ZOKUGARA_CD);
		String shinkTelNo = inMsg.getString(EKK1071C041CBSMsg.SKSHA_TELNO);
		String houjinSbtCd = inMsg.getString(EKK1071C041CBSMsg.HOJIN_SBT_CD);
		String houjinStiCd = inMsg.getString(EKK1071C041CBSMsg.HOJIN_ZENGO_SHITEI_CD);

		// 審査.審査結果コード設定用
		String[] jdg_result = new String[4];

		// 同一部屋番号未存在チェック
		// 引数設定
		String jdgStaCd = inMsg.getString(EKK1071C041CBSMsg.JDG_JSSI_KINO_SKBT_CD);
		
		// 審査詳細実施条件での実施判定(同一部屋番号未存在チェック)
		String errRsltCd1 = kk1071.getErrRsltKK1831(inMsg, jdgStaCd, JDG_DTL_SBT_CD_1);
		if(errRsltCd1 != null)
		{
			// 同一部屋番号未存在チェックを呼び出す
			Object result = kk1071.sameRoomNoCheck(inMsg, svcKeiKaienUcwkNo, pcd, stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm);
			if(!CHECK_OK.equals(result))
			{
				//審査詳細の登録を行う（同一部屋番号未存在チェック）
				createSameRoomNoCheck(inMsg, inContext, errRsltCd1);
				jdg_result[0] = errRsltCd1;
			}
		}

		// 強制解約者同一チェック
		// 審査詳細実施条件での実施判定(強制解約者同一チェック)
		String errRsltCd2 = kk1071.getErrRsltKK1831(inMsg, jdgStaCd, JDG_DTL_SBT_CD_2);
		if(errRsltCd2 != null)
		{
			// 引数設定
			CAANMsg[] msgList = inMsg.getCAANMsgList(EKK1071C041CBSMsg.EKK1071C041CBSMSG1LIST);

			// 強制解約者同一チェックを呼び出す。
			Object result = kk1071.ksiDslCheck(inMsg, pcd, stateNm, cityNm, oaztsuNm, azchoNm, bnchigo, adrttm, adrrm, msgList);
			if(!CHECK_OK.equals(result))
			{
				//審査詳細の登録を行う(強制解約者同一チェック)
				createKsiDslCheck(inMsg, inContext, errRsltCd2);
				jdg_result[1] = errRsltCd2;
			}
		}
		
		String msgId = null;
		String umekomimoji = null;
		
		// 親権者情報不備チェック
		String errRsltCd3 = kk1071.getErrRsltKK1831(inMsg, jdgStaCd, JDG_DTL_SBT_CD_3);
		if (errRsltCd3 != null)
		{
			// 親権者情報不備チェックを呼び出す
			Object result = kk1071.shinkensyaHbiCheck(inMsg, custBirthYmd, keiyakuTypeCd, shinkNm, shinkKanaNm, shinkBirthYmd, shinkZokugaraCd,
					shinkTelNo);

			// 未成年エラーの場合
			if (NG_MISEINEN.equals(result))
			{
				msgId = JDG_DTL_MSG_ID_1;
				umekomimoji = MSG_UMKM_MOJI_3_MSG1;
			}
			// 未来日エラーの場合
			else if (NG_MIRAI.equals(result))
			{
				msgId = JDG_DTL_MSG_ID_2;
				umekomimoji = MSG_UMKM_MOJI_3_MSG2;
			}
			
			if(!CHECK_OK.equals(result)) {
				//審査詳細の登録を行う（親権者情報不備チェック）
				createSinkInfHbiCheck(inMsg, inContext, errRsltCd3, msgId, umekomimoji);
				jdg_result[2] = errRsltCd3;
			}
		}
		
		// 埋め込み文字nullクリア
		umekomimoji = null;

		// 法人格入力不備チェック
		String errRsltCd4 = kk1071.getErrRsltKK1831(inMsg, jdgStaCd, JDG_DTL_SBT_CD_4);
		if (errRsltCd4 != null)
		{
			// 親権者情報不備チェックを呼び出す
			Object result = kk1071.houjinkakuHbiCheck(inMsg, keiyakuTypeCd, houjinSbtCd, houjinStiCd);

			// 法人格前後指定コードが未入力の場合
			if (NG_HOUJINZENGO.equals(result))
			{
				umekomimoji = MSG_UMKM_MOJI_4_MSG1;
			}
			// 法人格種別コードが未入力の場合
			else if (NG_HOUJINSBT.equals(result))
			{
				umekomimoji = MSG_UMKM_MOJI_4_MSG2;
			}
			
			if(!CHECK_OK.equals(result)) {
				//審査詳細の登録を行う（法人格入力不備チェック）
				createHoujinKakuHbiCheck(inMsg, inContext, errRsltCd4, umekomimoji);
				jdg_result[3] = errRsltCd4;
			}
		}

		// 審査詳細のエラーコードをもとに、審査の審査結果コードを設定
		JKKejbKK1071Edit kk1071Edit = new JKKejbKK1071Edit();
		return kk1071Edit.getJudgeJudgeRsltCd(jdg_result);
	}
}
