/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JDKejbDK0011KRCK
*	ソースファイル名：JDKejbDK0011KRCK.java
*	作成者			：EK909729
*	日付			：2011年10月14日
*＜機能概要＞
*	配送制約部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

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.DK0011ETMsg;
import eo.ejb.cbm.entity.DK0011LE;
import eo.ejb.cbm.entity.DK0021ETMsg;
import eo.ejb.cbm.entity.DK0021LE;

/**
 * <p>
 * 配送受付の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JDKejbDK0011KRCK
{

	/** 配送ステータス（受付済） */
	private static final String HAISO_STAT_UKETSUKEZUMI = "001";
	
	/** 配送ステータス（指示済） */
	private static final String HAISO_STAT_SHIJIZUMI = "002";
	
	/** 配送ステータス（出荷済） */
	private static final String HAISO_STAT_SHUKKAZUMI = "003";
	
	/** 配送ステータス（完了済） */
	private static final String HAISO_STAT_KANRYOZUMI = "004";

	/**
	 * <p>
	 * 新しいJDKejbDK0011KRCKを作成します。
	 * </p>
	 */
	public JDKejbDK0011KRCK()
	{
	}

	/**
	 * <p>
	 * 未存在チェックを行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 同一の機器提供サービス契約番号と型式コード（宅内機器型式、付属品型式）と機器製造番号で
	 *          配送ステータスが"001"（受付済）、または"002"（指示済）、または"003（出荷済）"、
	 *          または"004"（完了済）のデータが存在する場合にfalseを返す。以外の場合true。
	 */
	public static boolean isNotExistsCheck(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 全件検索用の配送対象物品の内部スキーマメッセージを作成
		CAANMsg in0021ETMsg = new CAANMsg(DK0021ETMsg.class.getName());
		in0021ETMsg.set(DK0021ETMsg.KKTK_SVC_KEI_NO, inMsg.getString(DK0021ETMsg.KKTK_SVC_KEI_NO));
		in0021ETMsg.set(DK0021ETMsg.KIKI_CHG_NO, inMsg.getString(DK0021ETMsg.KIKI_CHG_NO));
		in0021ETMsg.set(DK0021ETMsg.MK_FLG, "0");

		// 全件検索を行う
		DK0021LE dk0021Le = new DK0021LE();
		CAANMsg[] ret0021 = null;
		try
		{
			ret0021 = dk0021Le.findByCondition(in0021ETMsg);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		if (ret0021.length >= 1) 
		{
			// 配送ステータスを判定します
			if (isAvailable(ret0021))
			{
				return false;
			}
		}

		return true;
	}
	
	/**
	 * 配送ステータスを判定します
	 * @param ret0021 配送対象物品情報
	 * @return 配送ステータスが"001"（受付済）、または"002"（指示済）、または"003（出荷済）"、
	 *          または"004"（完了済）のデータの場合にfalseを返す。以外の場合はtrue。
	 */
	private static boolean isAvailable(CAANMsg[] ret0021)
	{
		try
		{
			for (int i = 0; i < ret0021.length; i++)
			{
				// 全件検索用の配送の内部スキーマメッセージを作成
				CAANMsg in0011ETMsg = new CAANMsg(DK0011ETMsg.class.getName());
				in0011ETMsg.set(DK0011ETMsg.HAISO_NO, ret0021[i].getString(DK0021ETMsg.HAISO_NO));
				in0011ETMsg.set(DK0011ETMsg.MK_FLG, "0");

				// 全件検索を行う
				DK0011LE dk0011Le = new DK0011LE();
				CAANMsg[] ret0011 = null;
				ret0011 = dk0011Le.findByCondition(in0011ETMsg);
				if (ret0011.length >= 1) 
				{
					// 配送ステータスが"001"（受付済）、"002"（指示済）、"003"（出荷済）、"004"（完了済）かどうか判定
					String haiStat = ret0011[0].getString(DK0011ETMsg.HAISO_STAT);
					if (HAISO_STAT_UKETSUKEZUMI.equals(haiStat)
						|| HAISO_STAT_SHIJIZUMI.equals(haiStat)
						|| HAISO_STAT_SHUKKAZUMI.equals(haiStat)
						|| HAISO_STAT_KANRYOZUMI.equals(haiStat))
					{
						return true;
					}
				}
				return false;
			}
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		return false;
	}

}
