/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK0351C080KRCK
*	ソースファイル名：JEKK0351C080KRCK.java
*	作成者			：EK103142
*	日付			：2011年10月13日
*＜機能概要＞
*	関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
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.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C080CBSMsg;
import eo.ejb.common.JCKModelCommon;
import eo.ejb.common.db.JKKejbKK0351DBABase;

/**
 * <p>
 * オプションサービス契約サービス契約変更の関連チェッククラスです。
 * ＜メソッド一覧＞
 * execKRCK
 * execEKK0351C080_KR1
 * execEKK0351C080_KR2
 * execEKK0351C080_KR3
 * execEKK0351C080_JS1
 * </p>
 * @author 富士通
 */

public class JEKK0351C080KRCK
{	
	/** オプションサービス契約ステータス：受付済 */
	private static final String OP_ST_FIN_RCPT = "010";
	
	/** オプションサービス契約ステータス：照査済 */
	private static final String OP_ST_FIN_CLT = "020";
	
	/** オプションサービス契約ステータス：締結済 */
	private static final String OP_ST_FIN_CCL = "030";
	
	/** オプションサービス契約ステータス：サービス提供中 */
	private static final String OP_ST_SVC_OFFER = "100";
	
	/** オプションサービス契約ステータス：停止中 */
	private static final String OP_ST_SVC_STOP = "220";
	
	/** オプションサービス契約ステータス：休止・中断中 */
	private static final String OP_ST_PAUSE = "210";
	
	/**
	 * コンストラクタ
	 */
	public JEKK0351C080KRCK()
	{
	}

	/**
	 * オプションサービス契約サービス契約変更の関連チェックを行います。
	 * 
	 * @param inCBSMsg エンティティ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK0351C080KRCK.execKRCK");
		
		// inCBSMsgのチェック
		if(inCBSMsg == null)
		{
			throw new CAANRuntimeException("inCBSMsgがnullです。");
		}
		
		// ステータス
		int rtn = 0;
		
		rtn = execEKK0351C080_KR1(inCBSMsg, inContext, "EA");
		if(rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C080_KR2(inCBSMsg, inContext, "EA");
		}
		if(rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C080_KR3(inCBSMsg, inContext, "EA");
		}
		if(rtn <= StatusCodes.WARNING)
		{
			execEKK0351C080_JS1(inCBSMsg, inContext, "EA");
		}
		
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JEKK0351C080KRCK.execKRCK");
	}
		
	/**
	 * EKK0351C080_制約ＮＯ1（関連）チェック
	 * オプションサービス契約存在チェックを行う
	 *
	 * @param  inCBSMsg チェック対象のCBSMsg(EKK0351C080CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag ERRフラグ
	 * @return result チェック結果
	 */
	private int execEKK0351C080_KR1(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;
		
		// チェック条件
		if (!inCBSMsg.isNull(EKK0351C080CBSMsg.OP_SVC_KEI_NO))
		{
			// 検索条件の設定
			CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
			msg.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C080CBSMsg.OP_SVC_KEI_NO));
			msg.set(KK0351ETMsg.RSV_APLY_YMD, JCKModelCommon.getOpeDate(inCBSMsg));
			
			// 検索処理の実行
			CAANMsg ret = new JKKejbKK0351DBABase().findByCurrent(msg);
			if (ret == null)
			{
				// レコードが存在しない場合エラー
				inCBSMsg.set(EKK0351C080CBSMsg.OP_SVC_KEI_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;
	}

	/**
	 * EKK0351C080_制約ＮＯ２（関連）チェック
	 * 存在チェックを行う
	 *
	 * @param  inCBSMsg チェック対象のCBSMsg(EKK0351C080CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag ERRフラグ
	 * @return result チェック結果
	 */
	private int execEKK0351C080_KR2(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;
		
		JKKejbKK0081KRCK kk0081krck = new JKKejbKK0081KRCK();
		
		// チェック条件
		if (!inCBSMsg.isNull(EKK0351C080CBSMsg.SVC_KEI_NO))
		{
			// 判定条件
			if (!kk0081krck.isExistsNonGene(inCBSMsg.getString(EKK0351C080CBSMsg.SVC_KEI_NO)))
			{
				// レコードが存在しない場合エラー
				inCBSMsg.set(EKK0351C080CBSMsg.SVC_KEI_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;
	}
	
	/**
	 * EKK0351C080_制約ＮＯ３（関連）チェック
	 * 存在チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(EKK0351C080CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C080_KR3(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;
		
		JKKejbKK0021KRCK kk0021krck = new JKKejbKK0021KRCK();
		
		// チェック条件
		if (!inCBSMsg.isNull(EKK0351C080CBSMsg.MSKM_DTL_NO))
		{
			// 判定条件
			if (!kk0021krck.isExistsNonGene(inCBSMsg.getString(EKK0351C080CBSMsg.MSKM_DTL_NO)))
			{
				// レコードが存在しない場合エラー
				inCBSMsg.set(EKK0351C080CBSMsg.MSKM_DTL_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;
	}
	
	/**
	 * EKK0351C080_制約ＮＯ１（状態）チェック
	 * 状態チェックを行う
	 *
	 * @param  inCBSMsg チェック対象のCBSMsg(EKK0351C080CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag ERRフラグ
	 * @return result チェック結果
	 */
	private int execEKK0351C080_JS1(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;
		
		// チェック条件
		if (!inCBSMsg.isNull(EKK0351C080CBSMsg.OP_SVC_KEI_NO))
		{
			// 検索条件の設定
			CAANMsg msg = new CAANMsg(KK0351ETMsg.class.getName());
			msg.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C080CBSMsg.OP_SVC_KEI_NO));
			msg.set(KK0351ETMsg.RSV_APLY_YMD, JCKModelCommon.getOpeDate(inCBSMsg));

			// 検索処理の実行
			CAANMsg ret = new JKKejbKK0351DBABase().findByCurrent(msg);
			if (ret != null)
			{
				// オプションサービス契約ステータス取得
				String op_svc_st = ret.getString(KK0351ETMsg.OP_SVC_KEI_STAT);
				if (op_svc_st == null
					|| (!OP_ST_FIN_RCPT.equals(op_svc_st) && !OP_ST_FIN_CLT.equals(op_svc_st)
						&& !OP_ST_FIN_CCL.equals(op_svc_st) && !OP_ST_SVC_OFFER.equals(op_svc_st)
						&& !OP_ST_SVC_STOP.equals(op_svc_st) && !OP_ST_PAUSE.equals(op_svc_st)))
				{
					//ステータスが指定の値以外の場合エラー
					inCBSMsg.set(EKK0351C080CBSMsg.OP_SVC_KEI_NO_ERR, errFlag);
					
					if("W".equals(errFlag.substring(0, 1)))
					{
						result = StatusCodes.WARNING;
					}
					else 
					{
						result = StatusCodes.STATUSTRANS_ERR;
					}
				}
			}
		}
		
		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}
		
		// レコードが存在する場合正常終了
		return result;
	}

}
