/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbEKK0151C030Edit
*	ソースファイル名：JKKejbEKK0151C030Edit.java
*	作成者			：富士通
*	日付			：2011年12月26日
*＜機能概要＞
*	サービス契約<ホスティング>開始相関ルールチェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00    2011/12/26  富士通      新規作成
*
********************************************************************************/

package eo.ejb.common.edit;

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.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0151C030CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.db.JKKejbKK0081DBABase;
import eo.ejb.common.rule.JKKejbRule0065001;

/**
 * <p>
 * サービス契約<ホスティング>開始相関ルールチェック部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK0151C030Edit
{

	/**
	 * <p>
	 * 新しいJKKejbEKK0151C030Editを作成します。
	 * </p>
	 */
	public JKKejbEKK0151C030Edit()
	{
	}

	/**
	 * <p>
	 * 課金開始日設定(サービス)の相関ルールにより課金開始日を算出する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 課金開始日
	 */
	public Object getChrgStaYmd(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbEKK0151C030Edit#getChrgStaYmd");

		// サービス契約のカレントレコードを取得
		CAANMsg ret0081 = getCurrentKK0081(inCBSMsg, inCBSMsg.getString(EKK0151C030CBSMsg.SVC_KEI_NO));
		
		// サービス契約番号が存在しない場合
		if (ret0081 == null) 
		{
			return null;
		}
		
		// 開始日設定(サービス)の相関ルール部品呼び出し
		JKKejbRule0065001 rule0065 = new JKKejbRule0065001(inCBSMsg);

		// パラメータ設定
		rule0065.setSvc_cd(ret0081.getString(KK0081ETMsg.SVC_CD));
		rule0065.setSvc_sta_ymd(inCBSMsg.getString(EKK0151C030CBSMsg.SVC_STA_YMD));

		// ルールの呼び出し
		String chrgStaYmd = rule0065.getChrgStaYmd();

		// 開始年月日が取得できなかった場合、エラー処理を行う。
		if(null == chrgStaYmd || "".equals(chrgStaYmd))
		{
			setError(inCBSMsg);
			return null;
		}

		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "end:JKKejbEKK0151C030Edit#getChrgStaYmd");

		return chrgStaYmd;
	}

	/**
	 * <p>
	 * サービス契約のカレント検索を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param svcKeiNo サービス契約番号
	 * @return 検索結果のレコード
	 */
	private CAANMsg getCurrentKK0081(CAANMsg inCBSMsg, String svcKeiNo)
	{
		// カレント検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
		inETMsg.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

		// サービス契約のカレント検索を行う
		return new JKKejbKK0081DBABase().findByCurrent(inETMsg);
	}
	
	/**
	 * <p>
	 * 関連制約エラーを設定します。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 */
	private void setError(CAANMsg inCBSMsg)
	{
		// 相関エラーのステータスを設定
		inCBSMsg.set(EKK0151C030CBSMsg.SVC_KEI_NO_ERR, "ED");
		inCBSMsg.set(EKK0151C030CBSMsg.STATUS, StatusCodes.RELATION_ERR);
	}

}

