/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCKejbCK0011KRCK
*   ソースファイル名：JCKejbCK0011KRCK.java
*   作成者          ：富士通
*   日付            ：2011年04月21日
*＜機能概要＞
*   お客様の関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/04/21  富士通      新規作成
*
**********************************************************************/

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.ejb.cbm.entity.CK0011ETMsg;
import eo.ejb.cbm.entity.CK0011LE;
import eo.ejb.common.JCKModelCommon;
import eo.ejb.common.db.JCKejbCK0011DBABase;

/**
 * <p>
 * お客様の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JCKejbCK0011KRCK extends JCKejbCK0011DBABase
{

	/** 無効フラグ（有効） */
	private static final String MK_FLG_YUKO = "0";

	/** 予約適用コード（予約手続中） */
	private static final String YYK_PROC = "1";

	/** 予約適用コード（予約確定） */
	private static final String YYK_KAKUTEI = "2";

	/**
	 * <p>
	 * 新しいJCKejbCK0011KRCKを作成します。
	 * </p>
	 */
	public JCKejbCK0011KRCK()
	{
		super();
	}
	
	/**
	 * <p>
	 * お客様の存在チェックを行います。
	 * </p>
	 * @param sysid SYSID
	 * @param gene_add_dtm 世代登録年月日時分秒
	 * @return レコードが存在する場合はtrue。存在しない場合はfalse。
	 */
	public boolean isExists(String sysid, String gene_add_dtm)
	{
		if( sysid == null || "".equals(sysid) || 
				gene_add_dtm == null || "".equals(gene_add_dtm)	)
		{
			return true;
		}

		// ETメッセージ
		CAANMsg msg = new CAANMsg(CK0011ETMsg.class.getName());
		msg.set(CK0011ETMsg.SYSID, sysid);
		msg.set(CK0011ETMsg.GENE_ADD_DTM,gene_add_dtm);

		// ロジカルエンティティ生成
		CK0011LE le = new CK0011LE();

		CAANMsg rsltmsg = le.findByPrimaryKey(msg);

		//存在しない場合
		if (rsltmsg == null)
		{
			return false;
		}

		//存在する場合
		return true;
	}

	/**
	 * <p>
	 * お客様の未存在チェックを行います。
	 * </p>
	 * @param sysid SYSID
	 * @param gene_add_dtm 世代登録年月日時分秒
	 * @return PK検索でレコードが存在しない場合はtrue。存在する場合はfalse。
	 */
	public boolean isNonExists(String sysid, String gene_add_dtm)
	{
		// ETメッセージ
		CAANMsg msg = new CAANMsg(CK0011ETMsg.class.getName());
		msg.set(CK0011ETMsg.SYSID, sysid);
		msg.set(CK0011ETMsg.GENE_ADD_DTM,gene_add_dtm);

		// ロジカルエンティティ生成
		CK0011LE le = new CK0011LE();

		CAANMsg rsltmsg = le.findByPrimaryKey(msg);

		//存在しない場合
		if (rsltmsg == null)
		{
			return true;
		}

		//存在する場合
		return false;
	}

	/**
	 * <p>
	 * お客様の存在チェックを行います。（世代登録年月日時分秒を除く有効なレコード）
	 * </p>
	 * @param sysid SYSID
	 * @return レコードが存在する場合はtrue。存在しない場合はfalse。
	 */
	public boolean isExistsNonGene(String sysid)
	{
		
		if( sysid == null || "".equals(sysid))
		{
			return true;
		}
		// ETメッセージ
		CAANMsg msg = new CAANMsg(CK0011ETMsg.class.getName());
		msg.set(CK0011ETMsg.SYSID, sysid);
		msg.set(CK0011ETMsg.MK_FLG, MK_FLG_YUKO);

		// ロジカルエンティティ生成
		CK0011LE le = new CK0011LE();

		try
		{
			CAANMsg[] rsltList = le.findByCondition(msg);

			//存在しない場合
			if (rsltList.length == 0)
			{
				return false;
			}

			//存在する場合
			return true;
		}
		catch (CAANException ex)
		{
			throw new CAANRuntimeException(ex);
		}
	}

	/**
	 * <p>
	 * 指定したお客様のレコードが予約のレコードであることのチェックを行う。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @return 取得した予約レコードが存在する場合true。
	 *          それ以外の場合はfalse。
	 */
	public boolean isCheckRsvRecord(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 内部スキーマメッセージを作成
		CAANMsg inETMsg = new CAANMsg(CK0011ETMsg.class.getName());

		// パラメータ設定
		inETMsg.set(CK0011ETMsg.SYSID, inMsg.getString(CK0011ETMsg.SYSID));
		inETMsg.set(CK0011ETMsg.GENE_ADD_DTM, inMsg.getString(CK0011ETMsg.GENE_ADD_DTM));

		// 一意検索実行
		CAANMsg otETMsg = super.findByPrimaryKey(inETMsg);

		// 運用日付取得
		String upd_date = JCKModelCommon.getOpeDate(inMsg);

		//予約適用コードを判定
		String rsv_aply_cd = otETMsg.getString(CK0011ETMsg.RSV_APLY_CD);
		String rsv_aply_ymd = otETMsg.getString(CK0011ETMsg.RSV_APLY_YMD);
		if (YYK_PROC.equals(rsv_aply_cd) 
				|| (YYK_KAKUTEI.equals(rsv_aply_cd) && rsv_aply_ymd.compareTo(upd_date) > 0))
		{
			return true;
		}
		
		return false;
	}
}
