/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbKK2441KRCK
*	ソースファイル名：JKKejbKK2441KRCK.java
*	作成者			：富士通
*	日付			：2012年8月7日
*＜機能概要＞
*	他事業者割引契約制約部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/08/07	FJ)			新規作成
*
**********************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import eo.ejb.cbm.entity.KK2441ETMsg;
import eo.ejb.cbm.entity.KK2441LE;
import eo.ejb.common.db.JKKejbKK2441DBABase;

/**
 * <p>
 * 他事業者割引契約制約部品クラスです
 * </p>
 * @author 富士通
 */
public class JKKejbKK2441KRCK extends JKKejbKK2441DBABase
{

	/** 日付：最大値 */
	private static final String DATE_MAX = "20991231";

	/** 無効フラグ：有効 */
	private static final String MKFLG_VALID = "0";

	/**
	 * <p>
	 * 新しいJKKejbKK2441KRCKを作成します。
	 * </p>
	 */
	public JKKejbKK2441KRCK()
	{
	}

	/**
	 * <p>
	 * 他事業者割引契約の他事業者割引契約締結状態チェックを行う
	 * </p>
	 * @param inMsg チェック対象のETMsg(KK2441ETMsg)
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 締結済の場合はtrue。未締結の場合はfalse。
	 */
	public boolean isCheckTajgswkeiTgkeiTendymd(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// ETメッセージ
		CAANMsg inMsg2 = new CAANMsg(KK2441ETMsg.class.getName());
		inMsg2.set(KK2441ETMsg.TAJGS_WRIB_KEI_NO, inMsg.getString(KK2441ETMsg.TAJGS_WRIB_KEI_NO));

		// カレントレコードの情報を確認する（最新のデータが締結済であるかを確認）
		CAANMsg rsltMsg = findByCurrent(inMsg2);

		//存在しない場合
		if (rsltMsg == null)
		{
			return false;
		}

		// 存在する場合
		// 他事業者割引契約締結年月日がNULLである または 他事業者割引契約締結年月日が2099/12/31である
		if (rsltMsg.isNull(KK2441ETMsg.TAJGS_WRIB_KEI_CNC_YMD) || DATE_MAX.equals(rsltMsg.getString(KK2441ETMsg.TAJGS_WRIB_KEI_CNC_YMD)))
		{
			return false;
		}
		// KDDIバリューコードがNULLである または KDDIバリューコードが同じ場合
		if (rsltMsg.isNull(KK2441ETMsg.KDDI_VAL_CD) || inMsg.getString(KK2441ETMsg.KDDI_VAL_CD).equals(rsltMsg.getString(KK2441ETMsg.KDDI_VAL_CD)))
		{
			return false;
		}

		// 他事業者割引契約締結年月日がNULLでない かつ 他事業者割引契約締結年月日が2099/12/31でない
		return true;
	}

	/**
	 * <p>
	 * KDDIバリューコードチェックを行う
	 * </p>
	 * @param inMsg チェック対象のETMsg(KK2441ETMsg)
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 対象レコードが存在しない場合はtrue、対象レコードが存在する場合はfalse
	 */
	public boolean isKddiValCdChk(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// ETメッセージ
		CAANMsg condMsg = new CAANMsg(KK2441ETMsg.class.getName());
		condMsg.set(KK2441ETMsg.KDDI_VAL_CD, inMsg.getString(KK2441ETMsg.KDDI_VAL_CD));
		condMsg.set(KK2441ETMsg.MK_FLG, MKFLG_VALID);
		CAANMsg[] retConMsg = null;

		try
		{
			// 対象データを取得
			retConMsg = new KK2441LE().findByCondition(condMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		// 取得件数分、処理を行う
		for (int i = 0; i < retConMsg.length; i++)
		{
			// EKK2441C020_他事業者割引契約申込変更の場合
			if ("EKK2441C020".equals(inMsg.getString(JCMConstants.TEMPLATE_ID_KEY)))
			{
				// Input.他事業者割引契約番号以外を対象とする
				if (retConMsg[i].getString(KK2441ETMsg.TAJGS_WRIB_KEI_NO).equals(inMsg.getString(KK2441ETMsg.TAJGS_WRIB_KEI_NO)))
				{
					continue;
				}
			}

			// 他事業者割引契約のカレントレコードを検索
			CAANMsg curMsgKK2441 = new CAANMsg(KK2441ETMsg.class.getName());
			curMsgKK2441.set(KK2441ETMsg.TAJGS_WRIB_KEI_NO, retConMsg[i].getString(KK2441ETMsg.TAJGS_WRIB_KEI_NO));
			CAANMsg retCurMsg = new JKKejbKK2441DBABase().findByCurrent(curMsgKK2441);

			// 存在しない場合
			if (null == retCurMsg)
			{
				return true;
			}

			// 判定
			if (!isDateJudge(retCurMsg, inMsg))
			{
				return false;
			}
		}
		return true;
	}

	/**
	 * <p>
	 * 取得データ存在チェックを行う
	 * </p>
	 * @param retCurMsg チェック対象のカレントレコード
	 * @return 存在しない場合はtrue、存在する場合はfalse
	 */
	private boolean isDateJudge(CAANMsg retCurMsg, CAANMsg inMsg)
	{
		// 他事業者割引契約キャンセル年月日がNULL、または"20991231"の場合
		if (retCurMsg.isNull(KK2441ETMsg.TAJGS_WRIB_KEI_CNCL_YMD)
				|| DATE_MAX.equals(retCurMsg.getString(KK2441ETMsg.TAJGS_WRIB_KEI_CNCL_YMD)))
		{
			return false;
		}

		// 上記判定に該当しない場合、対象データが存在する為、falseを返す
		return true;
	}
	/**
	 * <p>
	 * 他事業者割引契約締結年月日チェック処理
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return カレントレコードの他事業者割引契約締結年月日が未設定の場合はfalse
	 */
	public boolean isChkTajgsWribKeiCncYmd(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// ETメッセージ
		CAANMsg inMsg2 = new CAANMsg(KK2441ETMsg.class.getName());
		inMsg2.set(KK2441ETMsg.TAJGS_WRIB_KEI_NO, inMsg.getString(KK2441ETMsg.TAJGS_WRIB_KEI_NO));

		// カレントレコードの情報を確認する（最新のデータが締結済であるかを確認）
		CAANMsg rsltMsg = findByCurrent(inMsg2);

		//存在しない場合
		if (rsltMsg == null)
		{
			return false;
		}

		// 存在する場合
		// 他事業者割引契約締結年月日がNULLである または 他事業者割引契約締結年月日が2099/12/31である
		if (rsltMsg.isNull(KK2441ETMsg.TAJGS_WRIB_KEI_CNC_YMD) || DATE_MAX.equals(rsltMsg.getString(KK2441ETMsg.TAJGS_WRIB_KEI_CNC_YMD)))
		{
			return false;
		}

		return true;
	}
}
