/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbEKK0451D010TKCK
*	ソースファイル名：JKKejbEKK0451D010TKCK.java
*	作成者			：富士通
*	日付			：2012年06月25日
*＜機能概要＞
*	割引サービス契約登録の単関連部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/06/25	富士通		新規作成
*
**********************************************************************/

package eo.ejb.common.itemrelation;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbs.cbsmsg.EKK0451D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451D010CBSMsg1List;

/**
 * <p>
 * 割引サービス契約登録の単関連部品です。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK0451D010TKCK extends JKKejbTKCKBase
{

	/** 親契約識別コード（サービス契約） */
	private static final String OYA_KEI_CD_SVC = "01";

	/** 親契約識別コード（サービス契約内訳） */
	private static final String OYA_KEI_CD_UCWK = "03";

	/** 親契約識別コード（オプションサービス契約） */
	private static final String OYA_KEI_CD_OP = "04";

	/** 親契約識別コード（サブオプションサービス契約） */
	private static final String OYA_KEI_CD_SBOP = "05";

	/** 親契約識別コード（機器提供サービス契約） */
	private static final String OYA_KEI_CD_KKTK = "06";

	/** 親契約識別コード（請求オプションサービス契約） */
	private static final String OYA_KEI_CD_SEIOP = "07";

	/** 親契約識別コード（機器オプションサービス契約） */
	private static final String OYA_KEI_CD_KKOP = "10";

	/**
	 * <p>
	 * 対象契約入力チェック処理。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return メッセージに指定されている契約番号が１つのみの場合はtrue。
	 */
	public boolean isTgKeiInputCheck(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 割引サービス対象契約明細の各明細ごとにチェックを行う
		for (CAANMsg wbSvcTgMsg: inMsg.getCAANMsgList(EKK0451D010CBSMsg.EKK0451D010CBSMSG1LIST))
		{
			// 実施条件
			if (!isCheck(wbSvcTgMsg))
			{
				continue;
			}

			// 判定条件
			if (!isInputContents(wbSvcTgMsg))
			{
				return false;
			}
		}

		// 上記条件に該当しない場合はtrueを返却
		return true;
		
	}

	/**
	 * <p>
	 * 関連制約を実施するかの判定を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア（リストの明細）
	 * @return 対象契約識別コードが設定されていて、かつ契約番号のいずれかが設定されている場合true。それ以外の場合false。
	 */
	private boolean isCheck(CAANMsg inMsg)
	{
		// 対象契約識別コードが設定されていない場合はfalseを返却
		if (inMsg.isNull(EKK0451D010CBSMsg1List.TG_KEI_SKBT_CD))
		{
			return false;
		}

		// サービス契約番号が設定されている場合はtrueを返却する
		if (!inMsg.isNull(EKK0451D010CBSMsg1List.SVC_KEI_NO))
		{
			return true;
		}

		// サービス契約内訳番号が設定されている場合はtrueを返却する
		if (!inMsg.isNull(EKK0451D010CBSMsg1List.SVC_KEI_UCWK_NO))
		{
			return true;
		}

		// オプションサービス契約番号が設定されている場合はtrueを返却する
		if (!inMsg.isNull(EKK0451D010CBSMsg1List.OP_SVC_KEI_NO))
		{
			return true;
		}

		// サブオプションサービス契約番号が設定されている場合はtrueを返却する
		if (!inMsg.isNull(EKK0451D010CBSMsg1List.SBOP_SVC_KEI_NO))
		{
			return true;
		}

		// 機器提供サービス契約番号が設定されている場合はtrueを返却する
		if (!inMsg.isNull(EKK0451D010CBSMsg1List.KKTK_SVC_KEI_NO))
		{
			return true;
		}

		// 請求オプションサービス契約番号が設定されている場合はtrueを返却する
		if (!inMsg.isNull(EKK0451D010CBSMsg1List.SEIOPSVC_KEI_NO))
		{
			return true;
		}

		// 機器オプションサービス契約番号が設定されている場合はtrueを返却する
		if (!inMsg.isNull(EKK0451D010CBSMsg1List.KKOP_SVC_KEI_NO))
		{
			return true;
		}
		
		// 上記条件に該当しない場合はfalseを返却
		return false;
		
	}

	/**
	 * <p>
	 * 明細内の入力内容が妥当かの判定を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア（リストの明細）
	 * @return 設定された対象契約識別コードに該当する契約番号が設定されていない場合false。それ以外の場合true。
	 */
	private boolean isInputContents(CAANMsg inMsg)
	{
		// 対象契約識別コードを取得
		String tgKeiSkbtCd = inMsg.getString(EKK0451D010CBSMsg1List.TG_KEI_SKBT_CD);

		if (OYA_KEI_CD_SVC.equals(tgKeiSkbtCd))
		{
			// 親契約識別コードが"01"（サービス契約）の場合、サービス契約番号が設定されていなかったらfalseを返却
			if (inMsg.isNull(EKK0451D010CBSMsg1List.SVC_KEI_NO))
			{
				return false;
			}
		}
		if (OYA_KEI_CD_UCWK.equals(tgKeiSkbtCd))
		{
			// 親契約識別コードが"03"（サービス契約内訳）の場合、サービス契約内訳番号が設定されていなかったらfalseを返却
			if (inMsg.isNull(EKK0451D010CBSMsg1List.SVC_KEI_UCWK_NO))
			{
				return false;
			}
		}
		if (OYA_KEI_CD_OP.equals(tgKeiSkbtCd))
		{
			// 親契約識別コードが"04"（オプションサービス契約）の場合、オプションサービス契約番号が設定されていなかったらfalseを返却
			if (inMsg.isNull(EKK0451D010CBSMsg1List.OP_SVC_KEI_NO))
			{
				return false;
			}
		}
		if (OYA_KEI_CD_SBOP.equals(tgKeiSkbtCd))
		{
			// 親契約識別コードが"05"（サブオプションサービス契約）の場合、オプションサービス契約番号が設定されていなかったらfalseを返却
			if (inMsg.isNull(EKK0451D010CBSMsg1List.OP_SVC_KEI_NO))
			{
				return false;
			}
			// 親契約識別コードが"05"（サブオプションサービス契約）の場合、サブオプションサービス契約番号が設定されていなかったらfalseを返却
			if (inMsg.isNull(EKK0451D010CBSMsg1List.SBOP_SVC_KEI_NO))
			{
				return false;
			}
		}
		if (OYA_KEI_CD_KKTK.equals(tgKeiSkbtCd))
		{
			// 親契約識別コードが"06"（機器提供サービス契約）の場合、機器提供サービス契約番号が設定されていなかったらfalseを返却
			if (inMsg.isNull(EKK0451D010CBSMsg1List.KKTK_SVC_KEI_NO))
			{
				return false;
			}
		}
		if (OYA_KEI_CD_SEIOP.equals(tgKeiSkbtCd))
		{
			// 親契約識別コードが"07"（請求オプションサービス契約）の場合、請求オプションサービス契約番号が設定されていなかったらfalseを返却
			if (inMsg.isNull(EKK0451D010CBSMsg1List.SEIOPSVC_KEI_NO))
			{
				return false;
			}
		}
		if (OYA_KEI_CD_KKOP.equals(tgKeiSkbtCd))
		{
			// 親契約識別コードが"10"（機器オプションサービス契約）の場合、機器オプションサービス契約番号が設定されていなかったらfalseを返却
			if (inMsg.isNull(EKK0451D010CBSMsg1List.KKOP_SVC_KEI_NO))
			{
				return false;
			}
		}

		// 上記条件に該当しない場合はtrueを返却
		return true;
		
	}

}
