/*********************************************************************
*	All Rights reserved,Copyright c Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*	システム名		：プロジェクト共通
*	モジュール名	：JCHejbCH0331KRCK
*	ソースファイル名：JCHejbCH0331KRCK.java
*	作成者			：富士通
*	日付			：2011年07月29日
*＜機能概要＞
*	債権内訳の関連チェックを行うクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/29	富士通		新規作成
*	v5.00.00	2013/10/30	FJ)伊藤		【OM-2013-0003283】送信コード：８（解除済み）の追加に対応
*
**********************************************************************/
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.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JACStrConst;
import eo.ejb.cbm.entity.CH0331ETMsg;
import eo.ejb.cbm.entity.CH0331LE;
import eo.ejb.common.JPCModelCommon;

/**
 * 請求引抜の関連チェックを行うクラスです。<p>
 * <br>
 * @author 富士通
 */
public class JCHejbCH0331KRCK
{
	
	/**
	 * <p>
	 * 請求書引抜存在チェック処理
	 * </p>
	 * 請求書引抜の存在チェック処理を行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 存在した場合：true、存在しない場合：false
	 */
	public static boolean isExistsCurrent(CAANMsg inMsg,	AgentDispatchContext inContext)
	{

		// 請求書引抜 ロジカルエンティティクラス
		CH0331LE leCH0331 = new CH0331LE();

		// 請求書引抜のETメッセージを作成
		CAANMsg msgCH0331 = new CAANMsg(CH0331ETMsg.class.getName());

		// 請求引抜番号
		msgCH0331.set(CH0331ETMsg.SKS_HIKINUKI_NO, inMsg.getString(CH0331ETMsg.SKS_HIKINUKI_NO));
		// 無効フラグ
		msgCH0331.set(CH0331ETMsg.MK_FLG, "0");

		// 更新対象のレコード取得
		CAANMsg[] arrMsgCH0331;
		try {
			arrMsgCH0331 = leCH0331.findByCondition(msgCH0331);
			if (arrMsgCH0331 != null && arrMsgCH0331.length > 0) {
				return true;
			}
		} catch (CAANException e) {
			inMsg.set(CH0331ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		return false;
	}

	/**
	 * <p>
	 * 引抜設定開始年月日チェック処理
	 * </p>
	 * 請求書引抜の引抜設定開始年月日が運用日付の期間内かのチェック処理を行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 期間内：true、期間外：false
	 */
	public static boolean isHikinukiStaYmdChk(CAANMsg inMsg,	AgentDispatchContext inContext)
	{

		// 請求書引抜 ロジカルエンティティクラス
		CH0331LE leCH0331 = new CH0331LE();

		// 請求書引抜のETメッセージを作成
		CAANMsg msgCH0331 = new CAANMsg(CH0331ETMsg.class.getName());

		// 請求引抜番号
		msgCH0331.set(CH0331ETMsg.SKS_HIKINUKI_NO, inMsg.getString(CH0331ETMsg.SKS_HIKINUKI_NO));
		// 無効フラグ
		msgCH0331.set(CH0331ETMsg.MK_FLG, "0");


		// 更新対象のレコード取得
		CAANMsg[] arrMsgCH0331;
		try {
			arrMsgCH0331 = leCH0331.findByCondition(msgCH0331);
			if (arrMsgCH0331 != null && arrMsgCH0331.length > 0) {

				CAANMsg msg = arrMsgCH0331[0];
				//	が引抜設定開始年月日を取得
				String strHikinukiStaymd = msg.getString(CH0331ETMsg.HIKINUKI_STAYMD);
				Long lngHikinukiStaymd = Long.valueOf(strHikinukiStaymd);

				String strOpeDate = (String)JPCModelCommon.getOpeDate(inMsg, inContext, null) ;
				Long lngOpeDate = Long.valueOf(strOpeDate);

				//	運用日付が引抜設定開始年月日以降だった場合
				if(lngOpeDate >= lngHikinukiStaymd){
					return true;
				}
			}
		} catch (CAANException e) {
			inMsg.set(CH0331ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		return false;
	}

	/**
	 * <p>
	 * 引抜設定終了年月日チェック処理
	 * </p>
	 * 請求書引抜の引抜設定終了年月日が運用日付の期間内かのチェック処理を行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 期間内：true、期間外：false
	 */
	public static boolean isHikinukiEndYmdChk(CAANMsg inMsg,	AgentDispatchContext inContext)
	{

		// 請求書引抜 ロジカルエンティティクラス
		CH0331LE leCH0331 = new CH0331LE();

		// 請求書引抜のETメッセージを作成
		CAANMsg msgCH0331 = new CAANMsg(CH0331ETMsg.class.getName());

		// 請求引抜番号
		msgCH0331.set(CH0331ETMsg.SKS_HIKINUKI_NO, inMsg.getString(CH0331ETMsg.SKS_HIKINUKI_NO));
		// 無効フラグ
		msgCH0331.set(CH0331ETMsg.MK_FLG, "0");


		// 更新対象のレコード取得
		CAANMsg[] arrMsgCH0331;
		try {
			arrMsgCH0331 = leCH0331.findByCondition(msgCH0331);
			if (arrMsgCH0331 != null && arrMsgCH0331.length > 0) {

				CAANMsg msg = arrMsgCH0331[0];
				//	引抜設定終了年月日を取得
				String strHikinukiStaymd = msg.getString(CH0331ETMsg.HIKINUKI_ENDYMD);
				//	引抜設定終了年月日がnullだった場合はtrueを返却
				if (null == strHikinukiStaymd) {
					return true;
				}
				Long lngHikinukiStaymd = Long.valueOf(strHikinukiStaymd);

				String strOpeDate = (String)JPCModelCommon.getOpeDate(inMsg, inContext, null) ;
				Long lngOpeDate = Long.valueOf(strOpeDate);
				//	運用日付が引抜設定終了年月日以前だった場合
				if(lngOpeDate <= lngHikinukiStaymd){
					return true;
				}
			}
		} catch (CAANException e) {
			inMsg.set(CH0331ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		return false;
	}

	/**
	 * <p>
	 * 請求所引抜解除済チェック処理
	 * </p>
	 * 請求書引抜が解除済みかどうかの判定をいます。
	 * <br>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 存在した場合：true、存在しない場合：false
	 */
	public static boolean isKaijoChk(CAANMsg inMsg,	AgentDispatchContext inContext)
	{

		// 請求書引抜 ロジカルエンティティクラス
		CH0331LE leCH0331 = new CH0331LE();

		// 請求書引抜のETメッセージを作成
		CAANMsg msgCH0331 = new CAANMsg(CH0331ETMsg.class.getName());

		// 請求契約番号
		msgCH0331.set(CH0331ETMsg.SEIKY_KEI_NO, inMsg.getString(CH0331ETMsg.SEIKY_KEI_NO));
		// 無効フラグ
		msgCH0331.set(CH0331ETMsg.MK_FLG, "0");

		// 更新対象のレコード取得
		CAANMsg[] arrMsgCH0331;
		try {

			arrMsgCH0331 = leCH0331.findByCondition(msgCH0331);

			//	請求契約番号にkeyに明細が取得できない場合はfalse
			if (arrMsgCH0331 == null || arrMsgCH0331.length == 0) {
				return true;
			} else {

				for(CAANMsg msg : arrMsgCH0331){

					//送信コードが"8"ならそのレコードはチェックスキップ
					String sendCd = msg.getString(CH0331ETMsg.HIKINUKI_SEND_CD);
					if (sendCd.equals(JACStrConst.PULLOUT_SEND_CD_KAIJO))
					{
						continue;
					}
					
					// 引抜設定終了年月日を取得
					String strHikinukiStaymd = msg.getString(CH0331ETMsg.HIKINUKI_ENDYMD);
					// 引抜設定終了年月日がnullだった場合はfalseを返却
					if (null == strHikinukiStaymd) {
						return false;
					}
					Long lngHikinukiStaymd = Long.valueOf(strHikinukiStaymd);

					String strOpeDate = (String) JPCModelCommon.getOpeDate(inMsg,inContext, null);
					Long lngOpeDate = Long.valueOf(strOpeDate);
					// 運用日付が引抜設定終了年月日以前だった場合
					if (lngOpeDate < lngHikinukiStaymd) {
						return false;
					} else {
						continue;
					}


				}
			}

		} catch (CAANException e) {
			inMsg.set(CH0331ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		return true;
	}


	/**
	 * <p>
	 * 引抜設定開始年月日チェック処理
	 * </p>
	 * 請求書引抜の引抜設定開始年月日が運用日付の期間内かのチェック処理を行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 期間内：true、期間外：false
	 */
	public static boolean isKeiyakuHikinukiStaYmdChk(CAANMsg inMsg,	AgentDispatchContext inContext)
	{

		// 請求書引抜 ロジカルエンティティクラス
		CH0331LE leCH0331 = new CH0331LE();

		// 請求書引抜のETメッセージを作成
		CAANMsg msgCH0331 = new CAANMsg(CH0331ETMsg.class.getName());

		// 請求引抜番号
		msgCH0331.set(CH0331ETMsg.SKS_HIKINUKI_NO, inMsg.getString(CH0331ETMsg.SKS_HIKINUKI_NO));
		// 請求契約番号
		//msgCH0331.set(CH0331ETMsg.SEIKY_KEI_NO, inMsg.getString(CH0331ETMsg.SEIKY_KEI_NO));
		// 無効フラグ
		msgCH0331.set(CH0331ETMsg.MK_FLG, "0");


		// 更新対象のレコード取得
		CAANMsg[] arrMsgCH0331;
		try {
			arrMsgCH0331 = leCH0331.findByCondition(msgCH0331);

			if (arrMsgCH0331 != null && arrMsgCH0331.length > 0) {

				for(CAANMsg msg : arrMsgCH0331){

					//	が引抜設定開始年月日を取得
					String strHikinukiStaymd = msg.getString(CH0331ETMsg.HIKINUKI_STAYMD);
					if (null == strHikinukiStaymd) {
						continue;
					}
					Long lngHikinukiStaymd = Long.valueOf(strHikinukiStaymd);

					String strOpeDate = (String)JPCModelCommon.getOpeDate(inMsg, inContext, null) ;
					Long lngOpeDate = Long.valueOf(strOpeDate);

					//	運用日付が引抜設定開始年月日より以前だった場合
					if(lngOpeDate < lngHikinukiStaymd){
						return false;
					}

				}
			} else {
				return false;
			}
		} catch (CAANException e) {
			inMsg.set(CH0331ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		return true;
	}

	/**
	 * <p>
	 * 引抜設定終了年月日チェック処理
	 * </p>
	 * 請求書引抜の引抜設定終了年月日が運用日付の期間内かのチェック処理を行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージ
	 * @param inContext エージェントディスパッチコンテキスト
	 * @return 期間内：true、期間外：false
	 */
	public static boolean isKeiyakuHikinukiEndYmdChk(CAANMsg inMsg,	AgentDispatchContext inContext)
	{

		// 請求書引抜 ロジカルエンティティクラス
		CH0331LE leCH0331 = new CH0331LE();

		// 請求書引抜のETメッセージを作成
		CAANMsg msgCH0331 = new CAANMsg(CH0331ETMsg.class.getName());

		// 請求契約番号
		//msgCH0331.set(CH0331ETMsg.SEIKY_KEI_NO, inMsg.getString(CH0331ETMsg.SEIKY_KEI_NO));
		// 請求引抜番号
		msgCH0331.set(CH0331ETMsg.SKS_HIKINUKI_NO, inMsg.getString(CH0331ETMsg.SKS_HIKINUKI_NO));
		// 無効フラグ
		msgCH0331.set(CH0331ETMsg.MK_FLG, "0");


		// 更新対象のレコード取得
		CAANMsg[] arrMsgCH0331;
		try {
			arrMsgCH0331 = leCH0331.findByCondition(msgCH0331);

			if (arrMsgCH0331 != null && arrMsgCH0331.length > 0) {

				for(CAANMsg msg : arrMsgCH0331){

					//	引抜設定終了年月日を取得
					String strHikinukiStaymd = msg.getString(CH0331ETMsg.HIKINUKI_ENDYMD);
					//	引抜設定終了年月日がnullだった場合はtrueを返却
					if (null == strHikinukiStaymd) {
						continue;
					}
					Long lngHikinukiStaymd = Long.valueOf(strHikinukiStaymd);

					String strOpeDate = (String)JPCModelCommon.getOpeDate(inMsg, inContext, null) ;
					Long lngOpeDate = Long.valueOf(strOpeDate);
					//	運用日付が引抜設定終了年月日以前だった場合
					if(lngOpeDate > lngHikinukiStaymd){
						return false;
					}

				}
			} else {
				return false;
			}
		} catch (CAANException e) {
			inMsg.set(CH0331ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		}
		return true;
	}
}
