/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK0401C170KRCK
*	ソースファイル名：JEKK0401C170KRCK.java
*	作成者			：富士通
*	日付			：2011年10月19日
*＜機能概要＞
*	関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ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.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.KK0401ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C170CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * サブオプションサービス契約解約チェッククラスです。
 * ＜メソッド一覧＞
 * execKRCK
 * execEKK0401C170_KR1
 * execEKK0401C170_KR2
 * execEKK0401C170_KR4
 * </p>
 * @author 富士通
 */

public class JEKK0401C170KRCK
{

	/**
	 * コンストラクタ
	 */
	public JEKK0401C170KRCK()
	{
	}

	/**
	 * サブオプションサービス契約解約チェックを行います。
	 * 
	 * @param inCBSMsg エンティティ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK0401C170KRCK.execKRCK");

		// ステータス
		int rtn = 0;

		rtn = execEKK0401C170_KR1(inCBSMsg, inContext, "EA");
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0401C170_KR2(inCBSMsg, inContext, "EA");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0401C170_KR4(inCBSMsg, inContext, "EA");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0401C170_KR5(inCBSMsg, inContext, "EA");
		}

		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JEKK0401C170KRCK.execKRCK");
	}

	/**
	 * EKK0401C170_制約ＮＯ１（関連）チェック
	 * 存在チェックを行う
	 *
	 * @param  inCBSMsg チェック対象のCBSMsg(KK0351CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag ERRフラグ
	 * @return result チェック結果
	 */
	private int execEKK0401C170_KR1(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;

		JKKejbKK0401KRCK kk0401krck = new JKKejbKK0401KRCK();
		
		if(!inCBSMsg.isNull(EKK0401C170CBSMsg.OP_SVC_KEI_NO) && !inCBSMsg.isNull(EKK0401C170CBSMsg.SBOP_SVC_KEI_NO))
		{
			// ETメッセージ
			CAANMsg inETMsg = new CAANMsg(KK0401ETMsg.class.getName());
			inETMsg.set(KK0401ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0401C170CBSMsg.OP_SVC_KEI_NO));
			inETMsg.set(KK0401ETMsg.SBOP_SVC_KEI_NO, inCBSMsg.getString(EKK0401C170CBSMsg.SBOP_SVC_KEI_NO));
			inETMsg.set(KK0401ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

			CAANMsg msg = kk0401krck.findByCurrent(inETMsg);

			if (msg == null)
			{
				// レコードが存在しない場合
				inCBSMsg.set(EKK0401C170CBSMsg.SBOP_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;
	}

	/**
	 * EKK0401C170_制約ＮＯ２（関連）チェック
	 * 存在チェックを行う
	 *
	 * @param  inCBSMsg チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag ERRフラグ
	 * @return result チェック結果
	 */
	private int execEKK0401C170_KR2(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;

		JKKejbKK0021KRCK kk0021krck = new JKKejbKK0021KRCK();

		if (!kk0021krck.isExistsNonGene(inCBSMsg.getString(EKK0401C170CBSMsg.MSKM_DTL_NO)))
		{
			// レコードが存在する場合
			inCBSMsg.set(EKK0401C170CBSMsg.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;
	}

	/**
	 * EKK0161C190_制約ＮＯ４（関連）チェック
	 * 状態チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0401C170_KR4(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// 制約部品引数定義
		// ETメッセージ
		CAANMsg inETMsg = new CAANMsg(KK0401ETMsg.class.getName());
		inETMsg.set(KK0401ETMsg.TEMPLATEID, inCBSMsg.getString(EKK0401C170CBSMsg.TEMPLATEID));
		inETMsg.set(KK0401ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0401C170CBSMsg.OP_SVC_KEI_NO));
		inETMsg.set(KK0401ETMsg.SBOP_SVC_KEI_NO, inCBSMsg.getString(EKK0401C170CBSMsg.SBOP_SVC_KEI_NO));

		// 判定条件
		if (JKKModelCommon.checkStateTransitionKK0401(inETMsg, inContext) == false)
		{
			inCBSMsg.set(EKK0401C170CBSMsg.SBOP_SVC_KEI_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.STATUSTRANS_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}
	
	/**
	 * EKK0161C190_制約ＮＯ５（関連）チェック
	 * 子オプション解約時親オプション未解約チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0401C170_KR5(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		JKKejbKK0351KRCK instance = new JKKejbKK0351KRCK();

		if (!inCBSMsg.isNull(EKK0401C170CBSMsg.OP_SVC_KEI_NO) && !inCBSMsg.isNull(EKK0401C170CBSMsg.SVC_ENDYMD))
		{
			// 制約部品引数定義
			// ETメッセージ
			CAANMsg inETMsg = new CAANMsg(KK0401ETMsg.class.getName());
			inETMsg.set(KK0401ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0401C170CBSMsg.OP_SVC_KEI_NO));
			inETMsg.set(KK0401ETMsg.SVC_ENDYMD, inCBSMsg.getString(EKK0401C170CBSMsg.SVC_ENDYMD));

			// 判定条件
			if (!instance.isSbopDslOpNotDslChk(inETMsg, inContext))
			{
				inCBSMsg.set(EKK0401C170CBSMsg.SVC_ENDYMD_ERR, errFlag);
				if ("W".equals(errFlag.substring(0, 1)))
				{
					rtn = StatusCodes.WARNING;
				}
				else
				{
					rtn = StatusCodes.RELATION_ERR;
				}
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}
}
