/*********************************************************************
 *	All Rights reserved,Copyright (c) Fujitsu, 2071
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JKKejbEKK1071C071Edit
 *	ソースファイル名：JKKejbEKK1071C071Edit.java
 *	作成者			：富士通
 *	日付			：2071年07月14日
 *＜機能概要＞
 *	記載不備請求契約情報審査部品クラス
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2071/07/14	富士通		新規作成
 *	v25.00.00	2016/07/06	FJ) 笠川	【OM-2016-0001555】クレジットカード番号の審査エラー
 *
 **********************************************************************/

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.EKK1071C071CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * 記載不備請求契約情報審査部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK1071C071Edit
{

	/** 審査チェック結果 OK */
	private static final String CHECK_OK = "00";

	/** 異動区分 新規契約 */
	private static final String IDO_IDV_NEW = "00001";

	/** 異動区分 サービス追加 */
	private static final String IDO_IDV_ADD = "00002";

	//クレジットカード番号体系判定
	/** 審査詳細種別コード */
	private static final String JDG_DTL_SBT_CD1 = "017";
	
	/** 審査対象画面タブコード */
	private static final String JUDGE_TG_SCREEN_TAB_CD1 = "06";
	
	/** 審査対象画面項目コード */
	private static final String JUDGE_TG_SCREEN_KMK_CD1 = "006";
	
	/** 審査詳細メッセージID */
	private static final String JDG_DTL_MSG_ID1 = "EKB2570-NW";

	//督促状態判定
	/** 審査詳細種別コード */
	private static final String JDG_DTL_SBT_CD2 = "018";
	
	/** 審査対象画面タブコード */
	private static final String JUDGE_TG_SCREEN_TAB_CD2 = "06";
	
	/** 審査対象画面項目コード */
	private static final String JUDGE_TG_SCREEN_KMK_CD2 = "007";
	
	/** 審査詳細メッセージID */
	private static final String JDG_DTL_MSG_ID2 = "EKF0660-KW";

	/**
	 * コンストラクタです。
	 */
	public JKKejbEKK1071C071Edit()
	{
	}

	/**
	 * <p>
	 * 審査詳細の登録を行う（クレジットカード番号体系判定）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return errRsltCd　エラー結果コード
	 */
	public void createCreditCardNoCheck(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd)
	{
		//審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C071CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_DTL_SBT_CD1);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD1);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JUDGE_TG_SCREEN_KMK_CD1);
		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_ID1);

		//登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		//PKが重複していた場合は関連制約エラーとする
		if(!createFlg)
		{
			inMsg.set(EKK1071C071CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C071CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}
	}	
	/**
	 * <p>
	 * 審査詳細の登録を行う（督促状態判定）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return errRsltCd　エラー結果コード
	 */
	public void createTokusokuStatCheckk(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd)
	{
		//審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C071CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, JDG_DTL_SBT_CD2);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD2);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, JUDGE_TG_SCREEN_KMK_CD2);
		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_ID2);

		//登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		//PKが重複していた場合は関連制約エラーとする
		if(!createFlg)
		{
			inMsg.set(EKK1071C071CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C071CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}
	}	

	/**
	 * <p>
	 * 記載不備請求契約情報審査チェック処理を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 */
	public Object getKshbiOkForSeikyKeiChkRslt(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// 審査チェック処理部品
		JKKejbKK1071Edit kk1071 = new JKKejbKK1071Edit();

		// 引数設定
		String idoDiv = inMsg.getString(EKK1071C071CBSMsg.IDO_DIV);
		String crecardJigyoCd = inMsg.getString(EKK1071C071CBSMsg.CRECARD_JIGYO_CD);
		String crecardCompCd = inMsg.getString(EKK1071C071CBSMsg.CRECARD_COMP_CD);
		String crecardNo = inMsg.getString(EKK1071C071CBSMsg.CRECARD_NO);
		String seikyukeiNo = inMsg.getString(EKK1071C071CBSMsg.SEIKY_KEI_NO);

		// 審査.審査結果コード設定用
		String[] jdg_result = new String[2];

		if (IDO_IDV_NEW.equals(idoDiv) || IDO_IDV_ADD.equals(idoDiv))
		{
			//2016/07/06 OM-2016-0001555 ADD START
			//"INVOKE_GAMEN_ID"の取得
			String gamenID = (String)inContext.getClientHashMapObjectByKey("INVOKE_GAMEN_ID");
			//"KKW001850PJP"又は"KKW001870PJP"の値の存在確認
			if (!("KKW001850PJP".equals(gamenID) || "KKW001870PJP".equals(gamenID)))
			{
				//2016/07/06 OM-2016-0001555 ADD END
				//クレジットカード番号体系判定
				//指定した条件で審査詳細実施条件を検索し、エラー結果コードの項目値を行う。
				String jdgStaCd1 = inMsg.getString(EKK1071C071CBSMsg.JDG_JSSI_KINO_SKBT_CD);
				String errRsltCd1 = kk1071.getErrRsltKK1831(inMsg, jdgStaCd1, JDG_DTL_SBT_CD1);
				if(errRsltCd1 != null)
				{
					// 審査チェック処理部品のクレジットカード番号体系チェックを呼び出す。
					Object result = kk1071.creditCardNoCheck(inMsg, crecardCompCd, crecardJigyoCd, crecardNo, seikyukeiNo);
					if(!CHECK_OK.equals(result))
					{
						//審査詳細の登録を行う。
						createCreditCardNoCheck(inMsg, inContext, errRsltCd1);
						jdg_result[0] = errRsltCd1;
					}
				}
				//2016/07/06 OM-2016-0001555 ADD START
			}
			//2016/07/06 OM-2016-0001555 ADD END


			//督促状態判定
			//指定した条件で審査詳細実施条件を検索し、エラー結果コードの項目値を行う。
			String jdgStaCd2 = inMsg.getString(EKK1071C071CBSMsg.JDG_JSSI_KINO_SKBT_CD);
			String errRsltCd2 = kk1071.getErrRsltKK1831(inMsg, jdgStaCd2, JDG_DTL_SBT_CD2);
			if(errRsltCd2 != null)
			{
				// 審査チェック処理部品の督促状態チェックを呼び出す
				Object result  = kk1071.tokusokuStatCheck(inMsg, seikyukeiNo);
				if(!CHECK_OK.equals(result))
				{
					//審査詳細の登録を行う。
					createTokusokuStatCheckk(inMsg, inContext, errRsltCd2);
					jdg_result[1] = errRsltCd2;
				}
			}
		}

		// 審査詳細のエラーコードをもとに、審査の審査結果コードを設定
		JKKejbKK1071Edit kk1071Edit = new JKKejbKK1071Edit();
		return kk1071Edit.getJudgeJudgeRsltCd(jdg_result);
	}
}