/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKK0161C190KRCK
*	ソースファイル名：JKK0161C190KRCK.java
*	作成者			：EKek0046
*	日付			：2011年10月06日
*＜機能概要＞
*	関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbm.entity.KK1681LE;
import eo.ejb.cbs.cbsmsg.EKK0161C190CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.entity.JKKejbKK0161KRCK;

import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;

/**
 * <p>
 * サービス契約内訳解約確定チェッククラスです。
 * ＜メソッド一覧＞
 * execKRCK
 * execEKK0161C190_KR1
 * execEKK0161C190_KR2
 * execEKK0161C190_JS1
 * </p>
 * @author 富士通
 */

public class JEKK0161C190KRCK
{

	/** 異動予約詳細コード：サービス解約 */
	static final String IDO_RSV_CD_SVC_DSL = "007";
	
	/** 異動予約状態コード：予約手続中 */
	static final String IDO_RSV_STAT_CD_RSV_TETUDUKI = "03"; 
	
	/**
	 * コンストラクタ
	 */

	public JEKK0161C190KRCK()
	{
	}

	/**
	 * サービス契約内訳解約確定チェックを行います。
	 * 
	 * @param inCBSMsg エンティティ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */

	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JKK0161C190KRCK.execKRCK");
		
		// ステータス
		int rtn = 0;
		
		rtn = execEKK0161C190_KR2(inCBSMsg, inContext, "EA");;
		if(rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0161C190_KR4(inCBSMsg, inContext, "EC");
		}		
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JKK0161C190KRCK.execKRCK");
	}

	/**
	 * EKK0161C190_制約ＮＯ２（関連）チェック
	 * 存在チェックを行う
	 *
	 * @param  inCBSMsg チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag ERRフラグ
	 * @return result チェック結果
	 */
	private int execEKK0161C190_KR2(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;
		
		JKKejbKK0161KRCK kk0161krck = new JKKejbKK0161KRCK();
		
		if (!kk0161krck.isExistsCurrent(inCBSMsg,inCBSMsg.getString(EKK0161C190CBSMsg.SVC_KEI_UCWK_NO)))
		{
			// レコードが存在する場合
			inCBSMsg.set(EKK0161C190CBSMsg.SVC_KEI_UCWK_NO_ERR, errFlag);
			
			if("W".equals(errFlag.substring(0, 1)))
			{
				result = StatusCodes.WARNING;
			}
			else 
			{
				result = StatusCodes.RELATION_ERR;
			}
		}
		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}

		// レコードが存在しない場合
		return result;
	}
	
	/**
	 * EKK0161C190_制約ＮＯ４（関連）チェック
	 * 存在チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	
	private int execEKK0161C190_KR4(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;
		
		if (!inCBSMsg.isNull(EKK0161C190CBSMsg.SVC_KEI_UCWK_NO))
		{

			// 異動予約メッセージインスタンスを生成
			CAANMsg idoMsg = new CAANMsg(KK1681ETMsg.class.getName());

			idoMsg.set(KK1681ETMsg.SVC_KEI_UCWK_NO, inCBSMsg.getString(EKK0161C190CBSMsg.SVC_KEI_UCWK_NO));
			idoMsg.set(KK1681ETMsg.IDO_RSV_DTL_CD, IDO_RSV_CD_SVC_DSL);
			idoMsg.set(KK1681ETMsg.IDO_RSV_STAT_CD, IDO_RSV_STAT_CD_RSV_TETUDUKI);
			idoMsg.set(KK1681ETMsg.MK_FLG, "0");

			// KK1681LEインスタンスの生成
			KK1681LE idoLe = new KK1681LE();

			try
			{
				// CAANMsg配列を生成
				CAANMsg[] resIdoMsg = new CAANMsg[]{};
				resIdoMsg = idoLe.findByCondition(idoMsg);
				
				if (1 > resIdoMsg.length)
				{
					// 取得件数が1件未満の場合、エラー処理
					inCBSMsg.set(EKK0161C190CBSMsg.SVC_KEI_UCWK_NO_ERR, errFlag);
					if("W".equals(errFlag.substring(0, 1)))
					{
						result = StatusCodes.WARNING;
					}
					else
					{
						result = StatusCodes.RELATION_ERR;
					}
				}
			}
			catch(CAANCreateException cce)
			{
				inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.CREATE_DB_ERR);
				throw new CAANRuntimeException(cce);
			}
			catch(CAANException ce)
			{
				inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.FATAL_ERR);
				throw new CAANRuntimeException(ce);
			}

			// ステータスのセット
			if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
			{
				inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
			}
		}

		return result;
	}
}
