/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbKK0961KRCK
*   ソースファイル名：JKKejbKK0961KRCK.java
*   作成者          ：富士通
*   日付            ：2013年01月29日
*＜機能概要＞
*   利用停止期間の関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v5.00.00    2013/01/29  富士通      ANK-1452-00-00対応
*   v7.00.00    2014/02/12  FJ）松枝    OM-2014-0000641
*
**********************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.KK0961ETMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.db.JKKejbKK0961DBABase;
import eo.ejb.common.db.JKKejbOtherSysDBABase;

/**
 * <p>
 * サービス契約内訳の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK0961KRCK extends JKKejbKK0961DBABase
{
	
	/** 月初日：01 */
	private static final String MONTH_FIRST_DAY = "01";
	
	/** 料金スケジュール定義：基準日以降で直近の料金計算の請求年月 */
	private static final String AFTER_LATEST_SEIKYU_YM = "2";

	/**
	 * <p>
	 * 新しいJKKejbKK0961KRCKを作成します。
	 * </p>
	 */
	public JKKejbKK0961KRCK()
	{
		super();
	}

	/**
	 * 利用停止開始日妥当性チェック処理
	 * <p>
	 * 対象の利用停止期間の利用停止開始年月日時分秒を料金計算日を比較し、妥当性有無のチェックを行う
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 料金月初日＜入力パラメータ「利用停止開始日」、false
	 *          それ以外の場合、true
	 */
	public boolean isValidUseStpStaDtm(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 請求年月を取得する
		JKKejbOtherSysDBABase otdba = new JKKejbOtherSysDBABase();
		String prcMonthFirst = otdba.getCH0501ByEventYmd(JKKModelCommon.getOpeDate(inMsg), AFTER_LATEST_SEIKYU_YM);

		// 利用停止開始年月日時分秒の上8桁を、判定日とする
		String hmtiYmd = (String)inMsg.getString(KK0961ETMsg.USE_STP_STA_DTM);

		// 請求年月がNULLの場合、エラーとする
		if (prcMonthFirst == null)
		{
			return false;
		}

		// 請求年月に"01"を付与し料金月初日とする
		prcMonthFirst = prcMonthFirst.concat(MONTH_FIRST_DAY);

		// 判定日がNULLの場合、異常とする
		if (hmtiYmd == null)
		{
			return false;
		}

		// 判定日が8桁(YYYYMMDD)未満の場合、エラーとする
		if (hmtiYmd.length() < 8)
		{
			return false;
		}

		JKKejbKK0961DBABase kk0961dba = new JKKejbKK0961DBABase();
		CAANMsg kk0961Msg = kk0961dba.findByCurrent(inMsg);
		
		// 入力の利用停止開始年月日時分秒と利用停止期間.利用停止開始年月日時分秒が同一の場合、チェック対象外とする
		// （利用停止期間.利用停止開始年月日時分秒がnullの場合は、チェック対象とする）
		
		if (kk0961Msg != null && (String)kk0961Msg.getString(KK0961ETMsg.USE_STP_STA_DTM) != null)
		{
			if(hmtiYmd.equals((String)kk0961Msg.getString(KK0961ETMsg.USE_STP_STA_DTM))){

				return true;
			}
		}

		hmtiYmd = hmtiYmd.substring(0, 8);
		
		// 判定日 ＜ 料金月初日の場合、エラーとする
		if (!(JPCUtilCommon.isFutureDate(hmtiYmd, prcMonthFirst, "1")))
		{
			return false;
		}
		// 上記以外の場合、正常とする
		return true;
	}
}
