/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEKK0341C340KRCK
*   ソースファイル名：JEKK0341C340KRCK.java
*   作成者          ：富士通
*   日付            ：2011年10月19日
*＜機能概要＞
*   機器提供サービス契約解約の関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/10/19  富士通      新規作成
*   v5.00.00    2013/10/24  FJ) 沖田    OM-2013-0002760
*
**********************************************************************/

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.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0341ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C340CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * 機器提供サービス契約解約の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0341C340KRCK
{

	/** 関連チェックエラーフラグ&エラー返却項目(機器提供サービス契約 機器提供サービス存在チェック) */
	private static final String[] KRCK_KKTK_EXISTS_ERR = {"EA", EKK0341C340CBSMsg.KKTK_SVC_KEI_NO_ERR};

	/** 関連チェックエラーフラグ&エラー返却項目(申込明細 存在チェック) */
	private static final String[] KRCK_MSKM_EXISTS_ERR = {"EA", EKK0341C340CBSMsg.MSKM_DTL_NO_ERR};

	/** 関連チェックエラーフラグ&エラー返却項目(サービス契約 存在チェック) */
	private static final String[] KRCK_SVC_KEI_NO_EXISTS_ERR = {"EA", EKK0341C340CBSMsg.SVC_KEI_NO_ERR};
	
	/** 状態遷移チェックエラーフラグ&エラー返却項目 */
	private static final String[] KRCK_JS_ERR = {"EA", EKK0341C340CBSMsg.KKTK_SVC_KEI_NO_ERR};

	/**
	 * <p>
	 * 新しいJEKK0341C340KRCKを作成します。
	 * </p>
	 */
	public JEKK0341C340KRCK()
	{
	}

	/**
	 * <p>
	 * 機器提供サービス契約解約の関連制約を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 機器提供サービス契約番号
		String kktkSvcKeiNo = inCBSMsg.getString(EKK0341C340CBSMsg.KKTK_SVC_KEI_NO);

		// 機器提供サービス契約関連チェック部品
		JKKejbKK0341KRCK kk0341KRCK = new JKKejbKK0341KRCK();
	
		// 機器提供サービス契約 機器提供サービス存在チェック
		if(kktkSvcKeiNo != null)
		{
			// カレントレコード検索パラメータの設定
			CAANMsg msg = new CAANMsg(KK0341ETMsg.class.getName());
			msg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
			msg.set(KK0341ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
			// カレントレコードの検索
			CAANMsg ret = kk0341KRCK.findByCurrent(msg);

			if (ret == null)
			{
				setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_KKTK_EXISTS_ERR);
				return;
			}
		}
		
		//申込明細の存在チェック
		String mskm_dtl_no = inCBSMsg.getString(EKK0341C340CBSMsg.MSKM_DTL_NO);
		if(mskm_dtl_no != null)
		{
			JKKejbKK0021KRCK kk0021krck = new JKKejbKK0021KRCK();

			if (!kk0021krck.isExistsNonGene(mskm_dtl_no))
			{
				setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_MSKM_EXISTS_ERR);
				return;
			}
		}
		
		// サービス契約の存在チェック
		String svcKeiNo = inCBSMsg.getString(EKK0341C340CBSMsg.SVC_KEI_NO);
		if(svcKeiNo != null)
		{
			JKKejbKK0081KRCK kk0081krck = new JKKejbKK0081KRCK();

			if (!kk0081krck.isExistsNonGene(svcKeiNo))
			{
				setErrInfo(inCBSMsg, StatusCodes.RELATION_ERR, KRCK_SVC_KEI_NO_EXISTS_ERR);
				return;
			}
		}
		
		
		// 機器提供サービス契約　状態遷移チェック
		CAANMsg inETMsg = new CAANMsg(KK0341ETMsg.class.getName());
		inETMsg.set(KK0341ETMsg.TEMPLATEID, inCBSMsg.getString(EKK0341C340CBSMsg.TEMPLATEID));
		inETMsg.set(KK0341ETMsg.KKTK_SVC_KEI_NO, inCBSMsg.getString(EKK0341C340CBSMsg.KKTK_SVC_KEI_NO));

		// 判定条件
		if (JKKModelCommon.checkStateTransitionKK0341(inETMsg, inContext) == false)
		{
			setErrInfo(inCBSMsg, StatusCodes.STATUSTRANS_ERR, KRCK_JS_ERR);
			return;
		}
		
	}
	
	/**
	 * <p>
	 * エラー返却項目にエラーフラグを設定します。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param status エラー時のステータス
	 * @param errInfo[] エラー情報が設定された配列 [0]:エラーフラグ [1]:エラー返却項目
	 */
	private void setErrInfo(CAANMsg inCBSMsg, int status, String[] errInfo)
	{
		inCBSMsg.set(JCMConstants.STATUS_INT_KEY, status);
		inCBSMsg.set(errInfo[1], errInfo[0]);
		return;
		
	}

}

