/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEKK0081C013KRCK
*   ソースファイル名：JEKK0081C013KRCK.java
*   作成者          ：富士通
*   日付            ：2011年11月04日
*＜機能概要＞
*   サービス契約サービス開始日変更関連チェック処理部品です。
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/11/04  富士通      新規作成
*
**********************************************************************/

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.cbmmsg.KK0081CBMMsg;
import eo.ejb.cbs.cbsmsg.EKK0081C013CBSMsg;

/**
 * <p>
 * サービス契約サービス開始日変更関連チェック処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0081C013KRCK
{

	/** 異動区分：サービス情報訂正 */
	private static final String IDO_DIV_SVC_INF_CNG = "00033";

	/** 異動区分：登録内容修正 */
	private static final String IDO_DIV_ADD_INF_CNG = "00032";

	/**
	 * コンストラクタです。
	 */
	public JEKK0081C013KRCK()
	{
	}

	/**
	 * <p>
	 * サービス契約サービス開始日変更関連チェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JKKejbKK0081KRCK kk0081 = new JKKejbKK0081KRCK();

		// CBMMsgへの転記
		String svcKeiNo = inCBSMsg.getString(EKK0081C013CBSMsg.SVC_KEI_NO); // サービス契約番号
		String updDtmBf = inCBSMsg.getString(EKK0081C013CBSMsg.UPD_DTM_BF); // 更新年月日時分秒(更新前)
		CAANMsg inEtMsg = new CAANMsg(KK0081CBMMsg.class.getName());
		inEtMsg.set(JCMConstants.TEMPLATE_ID_KEY, inCBSMsg.getString(JCMConstants.TEMPLATE_ID_KEY));
		inEtMsg.set(KK0081CBMMsg.SVC_KEI_NO, svcKeiNo);
		inEtMsg.set(KK0081CBMMsg.UPD_DTM, updDtmBf);

		// サービス契約_サービス契約存在チェック
		if (!kk0081.isExistsCurrent(inEtMsg, svcKeiNo))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0081C013CBSMsg.SVC_KEI_NO_ERR, "EA");
			return;
		}

		// サービス契約_料金グループチェック
		if (!kk0081.isChkGroupCd(inEtMsg, inContext))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0081C013CBSMsg.SVC_KEI_NO_ERR, "EB");
			return;
		}

		// サービス契約_サービス開始日チェック
		String svcStaYmd = inCBSMsg.getString(EKK0081C013CBSMsg.SVC_STA_YMD);
		if (!kk0081.isChkSvcStaYmd(inEtMsg, inContext, svcStaYmd))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0081C013CBSMsg.SVC_STA_YMD_ERR, "EA");
			return;
		}

		// 状態遷移チェック
		if (!new JKKejbKK0081JSCK().checkStateTransition(inEtMsg, inContext))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.STATUSTRANS_ERR);
			inCBSMsg.set(EKK0081C013CBSMsg.SVC_KEI_NO_ERR, "EA");
			return;
		}
		
		// サービス契約番号、サービス開始年月日、異動区分がNULLでない
		if (!inCBSMsg.isNull(EKK0081C013CBSMsg.SVC_KEI_NO) && !inCBSMsg.isNull(EKK0081C013CBSMsg.SVC_STA_YMD)
				&& !inCBSMsg.isNull(EKK0081C013CBSMsg.IDO_DIV))
		{
			// 異動区分が"サービス情報訂正"であるまたは"登録内容修正"である
			if (IDO_DIV_SVC_INF_CNG.equals(inCBSMsg.getString(EKK0081C013CBSMsg.IDO_DIV)) || 
					IDO_DIV_ADD_INF_CNG.equals(inCBSMsg.getString(EKK0081C013CBSMsg.IDO_DIV)))
			{
				// サービス開始年月日
				inEtMsg.set(KK0081CBMMsg.SVC_STA_YMD, inCBSMsg.getString(EKK0081C013CBSMsg.SVC_STA_YMD));

				// 開始日変更時光電話(マンション)料金計算済チェック
				if (kk0081.isStaYmdCngTelMsPrcCalcEnd(inEtMsg, inContext))
				{
					inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
					inCBSMsg.set(EKK0081C013CBSMsg.SVC_STA_YMD_ERR, "EB");
					return;
				}

				// 開始日変更時光電話(マンション)解約予約済チェック
				if (kk0081.isStaYmdCngTelMsRsvDslEnd(inEtMsg, inContext))
				{
					inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
					inCBSMsg.set(EKK0081C013CBSMsg.SVC_STA_YMD_ERR, "EC");
					return;
				}
				
				// 開始日変更時光ネット(マンション)料金計算済チェック
				if (kk0081.isStaYmdCngNetMsPrcCalcEnd(inEtMsg, inContext))
				{
					inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
					inCBSMsg.set(EKK0081C013CBSMsg.SVC_STA_YMD_ERR, "ED");
					return;
				}

				// 開始日変更時光ネット(マンション)解約予約済チェック
				if (kk0081.isStaYmdCngNetMsRsvDslEnd(inEtMsg, inContext))
				{
					inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
					inCBSMsg.set(EKK0081C013CBSMsg.SVC_STA_YMD_ERR, "EE");
					return;
				}
			}
		}
	}
}
