/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbKK0061KRCK
*   ソースファイル名：JKKejbKK0061KRCK.java
*   作成者          ：富士通
*   日付            ：2012年09月11日
*＜機能概要＞
*   代理店の関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2012/09/11  富士通      新規作成
*
**********************************************************************/

package eo.ejb.common.entity;

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.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.KK0061ETMsg;
import eo.ejb.cbm.entity.KK0061LE;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.db.JKKejbKK0061DBABase;

/**
 * <p>
 * 代理店の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK0061KRCK extends JKKejbKK0061DBABase
{

	/** 無効フラグ（有効） */
	private static final String MK_FLG_YUKO = "0";

	/** 同日指定：含む */
	private static final String INC_DATE = "1";
	
	/**
	 * <p>
	 * 新しいJKKejbKK0061KRCKを作成します。
	 * </p>
	 */
	public JKKejbKK0061KRCK()
	{
		super();
	}

	/**
	 * <p>
	 * 予約レコード存在可否チェックを行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 予約レコードが存在する場合はtrue
	 * 			予約レコードが存在しない場合はfalse
	 */
	public boolean isReserveDataExsist(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 代理店コードで検索条件を作成する
		CAANMsg inETMsg = new CAANMsg(KK0061ETMsg.class.getName());
		inETMsg.set(KK0061ETMsg.AGNT_CD, inMsg.getString(KK0061ETMsg.AGNT_CD));
		inETMsg.set(KK0061ETMsg.MK_FLG, MK_FLG_YUKO);

		try
		{
			CAANMsg[] outETMsg = new KK0061LE().findByCondition(inETMsg);

			// 検索結果が0件の場合
			if (outETMsg.length == 0)
			{
				return false;
			}

			// 運用日付を取得する
			String opeDate = JKKModelCommon.getOpeDate(inMsg);

			for (int i = 0; outETMsg.length > i; i++)
			{
				// 運用日付より大きい予約適用年月日が存在する場合
				if (opeDate.compareTo(outETMsg[i].getString(KK0061ETMsg.RSV_APLY_YMD)) < 0)
				{
					return true;
				}
			}
			return false;
		}
		catch (CAANException ex)
		{
			throw new CAANRuntimeException(ex);
		}
	}
	
	/**
	 * <p>
	 * 予約レコード存在可否チェックを行います。(世代有)
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 予約レコードが存在する場合はtrue
	 * 			予約レコードが存在しない場合はfalse
	 */
	public boolean isReserveDataExsistGane(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 代理店コードで検索条件を作成する
		CAANMsg inETMsg = new CAANMsg(KK0061ETMsg.class.getName());
		inETMsg.set(KK0061ETMsg.AGNT_CD, inMsg.getString(KK0061ETMsg.AGNT_CD));
		inETMsg.set(KK0061ETMsg.GENE_ADD_DTM, inMsg.getString(KK0061ETMsg.GENE_ADD_DTM));
		inETMsg.set(KK0061ETMsg.MK_FLG, MK_FLG_YUKO);

		CAANMsg outETMsg = new KK0061LE().findByPrimaryKey(inETMsg);

		// 検索結果が0件の場合
		if (outETMsg == null)
		{
			return false;
		}

		// 運用日付を取得する
		String opeDate = JKKModelCommon.getOpeDate(inMsg);

		// 運用日付より大きい予約適用年月日が存在する場合
		if (opeDate.compareTo(outETMsg.getString(KK0061ETMsg.RSV_APLY_YMD)) < 0)
		{
			return true;
		}

		// 運用日付より大きい代理店適用開始年月日が存在する場合
		if (opeDate.compareTo(outETMsg.getString(KK0061ETMsg.AGNT_TSTAYMD)) < 0)
		{
			return true;
		}

		return false;
	}
	
	/**
	 * <p>
	 * 代理店カレントデータ存在チェックを行います。(世代有)
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return カレントレコードが存在する場合はtrue
	 * 			カレントレコードが存在しない場合はfalse
	 */
	public boolean chkCurrentDataKK0061(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 代理店コードで検索条件を作成する
		CAANMsg inETMsg = new CAANMsg(KK0061ETMsg.class.getName());
		
		String opedate = JKKModelCommon.getOpeDate(inETMsg);
		
		inETMsg.set(KK0061ETMsg.AGNT_CD, inMsg.getString(KK0061ETMsg.AGNT_CD));
		inETMsg.set(KK0061ETMsg.RSV_APLY_YMD, opedate);

		CAANMsg outETMsg = findByCurrent(inETMsg);

		// 検索結果が0件の場合
		if (outETMsg == null)
		{
			return false;
		}

		return true;
	}
	

	/**
	 * <p>
	 * 代理店カレントデータ適用中チェック
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return カレントレコードが適用中の場合、true
	 */
	public boolean chkCurrentDataAply(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 代理店コードで検索条件を作成する
		CAANMsg inETMsg = new CAANMsg(KK0061ETMsg.class.getName());

		String opedate = JKKModelCommon.getOpeDate(inETMsg);

		inETMsg.set(KK0061ETMsg.AGNT_CD, inMsg.getString(KK0061ETMsg.AGNT_CD));
		inETMsg.set(KK0061ETMsg.RSV_APLY_YMD, opedate);

		CAANMsg outETMsg = findByCurrent(inETMsg);

		// 検索結果が0件の場合
		if (outETMsg == null)
		{
			return false;
		}

		String agntTstaymd = outETMsg.getString(KK0061ETMsg.AGNT_TSTAYMD);
		String agntTendymd = outETMsg.getString(KK0061ETMsg.AGNT_TENDYMD);

		// 代理店適用開始年月日≦運用日の場合
		if (JPCUtilCommon.isPastDate(agntTstaymd, opedate, INC_DATE))
		{
			// 運用日≦代理店適用終了年月日の場合
			if (JPCUtilCommon.isFutureDate(agntTendymd, opedate, INC_DATE))
			{
				return true;
			}
		}

		return false;
	}
}
