/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbEKK1071C021Edit
*	ソースファイル名：JKKejbEKK1071C021Edit.java
*	作成者			：富士通
*	日付			：2011年07月14日
*＜機能概要＞
*	記載不備サービス契約情報審査部品クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/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.EKK1071C021CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * 記載不備サービス契約情報審査部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK1071C021Edit
{

	/** 処理結果OK */
	private static final Object CHECK_OK = "00";
	
	/** 審査詳細種別コード(申込書番号未存在判定) */
	private static final String JGE_DTL_SBT_CD_MSKMSHO_CHK = "004";
	
	/** 審査詳細種別コード(機器同時申込チェック) */
	private static final String JGE_DTL_SBT_CD_DOJI_MSKM = "005";
	
	/** 審査詳細種別コード(面開発対象判定) */
	private static final String JGE_DTL_SBT_CD_MENKAI_TGT = "007";
	
	/** 審査詳細種別コード(割引期間判定) */
	private static final String JGE_DTL_SBT_CD_WRI_KIKAN = "008";
	
	/** 審査詳細種別コード(申込日判定) */
	private static final String JGE_DTL_SBT_CD_MSKMYMD = "010";
	
	/** 審査詳細メッセージID(申込書番号 未存在判定) */
	private static final String JDG_DTL_MSG_ID_004 = "EKB7990--I";
	
	/** 審査詳細メッセージID(機器同時申込判定) */
	private static final String JDG_DTL_MSG_ID_005 = "EKB8000--I";
	
	/** 審査詳細メッセージID(面開発対象判定) */
	private static final String JDG_DTL_MSG_ID_007 = "EKB1040-JW";
	
	/** 審査詳細メッセージID(割引期間判定) */
	private static final String JDG_DTL_MSG_ID_008 = "EKB8010--I";
	
	/** 審査詳細メッセージID(申込日判定) */
	private static final String JDG_DTL_MSG_ID_010 = "EKB8020--I";
	
	/** 審査対象画面タブコード : 割引情報 */
	private static final String JUDGE_TG_SCREEN_TAB_CD_05 = "05";
	
	/** 審査対象画面タブコード : サービス選択 */
	private static final String JUDGE_TG_SCREEN_TAB_CD_01 = "01";
	
	/** 審査対象画面項目コード : 申込年月日 */
	private static final String UDGE_TG_SCREEN_KMK_CD_003 = "003";
	
	/** メッセージ埋込み文字(申込日判定) */
	private static final String MSG_UMKM_MOJI_010 = "申込日";

	/**
	 * コンストラクタです。
	 */
	public JKKejbEKK1071C021Edit()
	{
	}

	/**
	 * <p>
	 * 記載不備サービス契約情報審査のチェックを行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 */
	public Object getKshbiOkForSvcKeiChkRslt(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// 審査チェック処理部品
		JKKejbKK1071Edit kk1071 = new JKKejbKK1071Edit();
		
		// 審査.審査結果コード設定用
		String[] jdg_result = new String[5];

		// 申込書番号未存在チェック
		// 審査詳細実施制御の結果からチェックの実施判定を行う
		String errResult3 = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C021CBSMsg.JDG_JSSI_KINO_SKBT_CD), JGE_DTL_SBT_CD_MSKMSHO_CHK);
		if(errResult3 != null)
		{
			// 引数設定
			String mskmNo = inMsg.getString(EKK1071C021CBSMsg.MSKM_NO);
			String mskmshoNo = inMsg.getString(EKK1071C021CBSMsg.MSKMSHO_NO);
			// 審査チェック処理部品の申込書番号未存在チェック処理を呼び出す。
			Object result3 = kk1071.mskmshoNoCheck(mskmNo, mskmshoNo);
			
			if (!CHECK_OK.equals(result3))
			{
				createIsKshbiOkForSvcKei(inMsg, inContext, errResult3, JGE_DTL_SBT_CD_MSKMSHO_CHK, "", "", JDG_DTL_MSG_ID_004, "");
				jdg_result[0] = errResult3;
			}
		}
		
		// 機器同時申込チェック
		// 審査詳細実施制御の結果からチェックの実施判定を行う
		String errResult2 = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C021CBSMsg.JDG_JSSI_KINO_SKBT_CD), JGE_DTL_SBT_CD_DOJI_MSKM);
		if(errResult2 != null)
		{
			// 引数設定
			String pcrsCd = inMsg.getString(EKK1071C021CBSMsg.PCRS_CD);
			CAANMsg[] kktkSvcCdList = inMsg.getCAANMsgList(EKK1071C021CBSMsg.EKK1071C021CBSMSG1LIST);

			// 審査チェック処理部品の機器同時申込チェック処理を呼び出す。
			String result2 = kk1071.kikiDojiMskmCheck(inMsg, pcrsCd, kktkSvcCdList);

			if (null != result2)
			{
				createIsKshbiOkForSvcKei(inMsg, inContext, errResult2, JGE_DTL_SBT_CD_DOJI_MSKM, "", "", JDG_DTL_MSG_ID_005, result2);
				jdg_result[1] = errResult2;
			}
		}
		
		
		// 面開発対象判定
		// 審査詳細実施制御の結果からチェックの実施判定を行う
		String errResult4 = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C021CBSMsg.JDG_JSSI_KINO_SKBT_CD), JGE_DTL_SBT_CD_MENKAI_TGT);
		if(errResult4 != null)
		{
			// 引数設定
			String mnkihtAnknNo = inMsg.getString(EKK1071C021CBSMsg.MENKAIHAT_ANKEN_NO);
			CAANMsg[] wribSvcCdList = inMsg.getCAANMsgList(EKK1071C021CBSMsg.EKK1071C021CBSMSG2LIST);

			// 割引サービスコードリストがnullまたは0件の場合次のチェックへ
			if(wribSvcCdList != null && wribSvcCdList.length != 0)
			{
				// 審査チェック処理部品の面開発対象判定処理を呼び出す。
				String result4 = kk1071.mnkhtTgtCheck(inMsg, wribSvcCdList, mnkihtAnknNo);
		
				if (null != result4)
				{
					createIsKshbiOkForSvcKei(inMsg, inContext, errResult4, JGE_DTL_SBT_CD_MENKAI_TGT, JUDGE_TG_SCREEN_TAB_CD_05, "", JDG_DTL_MSG_ID_007, result4);
					jdg_result[2] = errResult4;
				}
			}
		}
		
		
		// 割引期間判定
		// 審査詳細実施制御の結果からチェックの実施判定を行う
		String errResult5 = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C021CBSMsg.JDG_JSSI_KINO_SKBT_CD), JGE_DTL_SBT_CD_WRI_KIKAN);
		if(errResult5 != null)
		{
			// 引数設定
			String mskmYmd = inMsg.getString(EKK1071C021CBSMsg.MSKM_YMD);
			CAANMsg[] wribSvcCdList = inMsg.getCAANMsgList(EKK1071C021CBSMsg.EKK1071C021CBSMSG2LIST);
			// 審査チェック処理部品の面開発対象判定処理を呼び出す。
			Object result5 = kk1071.wribKikanCheck(inMsg, mskmYmd, wribSvcCdList);
	
			if (!CHECK_OK.equals(result5))
			{
				createIsKshbiOkForSvcKei(inMsg, inContext, errResult5, JGE_DTL_SBT_CD_WRI_KIKAN, JUDGE_TG_SCREEN_TAB_CD_05, "", JDG_DTL_MSG_ID_008, "");
				jdg_result[3] = errResult5;
			}
		}
		
		// 申込日チェック
		// 審査詳細実施制御の結果からチェックの実施判定を行う
		String errResult1 = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C021CBSMsg.JDG_JSSI_KINO_SKBT_CD), JGE_DTL_SBT_CD_MSKMYMD);
		if(errResult1 != null)
		{
			// 審査チェック処理部品の申込日チェック処理を呼び出す。
			String mskmYmd = inMsg.getString(EKK1071C021CBSMsg.MSKM_YMD);
			Object result1 = kk1071.mskmYmdCheck(inMsg, mskmYmd);
			
			if (!CHECK_OK.equals(result1))
			{
				createIsKshbiOkForSvcKei(inMsg, inContext, errResult5, JGE_DTL_SBT_CD_MSKMYMD, JUDGE_TG_SCREEN_TAB_CD_01, UDGE_TG_SCREEN_KMK_CD_003, JDG_DTL_MSG_ID_010, MSG_UMKM_MOJI_010);
				jdg_result[4] = errResult1;
			}
		}
		
		return kk1071.getJudgeJudgeRsltCd(jdg_result);
	}
	
	
	/**
	 * <p>
	 * 審査詳細の登録を行います（記載不備サービス契約情報審査チェック）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd エラー結果コード
	 * @param sbtCd 審査詳細種別コード
	 * @param tabCd	 審査対象画面タブコード
	 * @param screenCd	審査対象画面項目コード
	 * @param msgId メッセージID
	 * @param msgUmkmMoji メッセージ埋め込み文字
	 */
	public void createIsKshbiOkForSvcKei(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd, String sbtCd, String tabCd, String screenCd, String msgId, String msgUmkmMoji)
	{
		// 審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C021CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, sbtCd);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, tabCd);
		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, screenCd);
		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, msgUmkmMoji);
		
		// 登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		// PKが重複していた場合は関連制約エラーとする
		if (!createFlg)
		{
			inMsg.set(EKK1071C021CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C021CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}

	}

}
