/*********************************************************************
*	All Rights reserved,Copyright c Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*	システム名		：プロジェクト共通
*	モジュール名	：JACejbAC0171Checker
*	ソースファイル名：JACejbAC0171Checker.java
*	作成者			：富士通
*	日付			：2011年07月05日
*＜機能概要＞
*	一時金に関する短項目関連チェック部品を定義するクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/05	富士通		新規作成
*
**********************************************************************/
package eo.ejb.common.itemrelation;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANSQLFacility;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbs.cbsmsg.ECH0051D012CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0051D012CBSMsg1List;

/**
 * <p>
 * 再請求登録に関する制約部品を定義するクラスです。
 * <br>
 * @author 富士通
 */
public class JCHejbECH0051D012Checker extends CAANSQLFacility
{
	/**
	 * <p>
	 * 再請求登録で使用する料金系コードが全て指定されているかチェックを行う。
	 * </p>
	 * @param inMsg     処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * 
	 * @return true:リスト中の料金系コードが全て指定されている
	 *          false:リスト中に一つ以上指定されていない料金系コードが存在する
	 */
	public static boolean isSpecifesPrcCd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 返却フラグ
		boolean bRet = true;
		
		// inMsgの再請求登録明細を取得する
		CAANMsg[] msgList = inMsg.getCAANMsgList(ECH0051D012CBSMsg.ECH0051D012CBSMSG1LIST);
		
		// パラメータチェック(リストが指定されていなければチェックせず、falseを返却)
		if (msgList == null || msgList.length == 0)
		{
			return false;
		}
		
		// リスト数分料金系コードの指定チェックを行う
		for(int i = 0; i < msgList.length; i++)
		{
			// 料金項目コードが指定されているかチェックする
			// (コースコード、サービスコードはフル桁スペースの場合null)
			if (msgList[i].isNull(ECH0051D012CBSMsg1List.PRC_KMK_CD))
			{
				// 指定されていないリストが存在したら、返却値を書き換えループを抜ける
				bRet = false;
				break;
			}
		}
		return bRet;
	}
	
	/**
	 * <p>
	 * 再請求登録で使用する金額が全て0より大きいかチェックを行う。
	 * </p>
	 * 
	 * @param inMsg     処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * 
	 * @return true:全て設定されていて、1円以上の値が設定されている
	 *          false:一つ以上設定されていない、または0円の値が存在する
	 */
	public static boolean isSpecifesAmnt(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 返却値
		boolean bRet = true;
		
		// inMsgの再請求登録明細を取得する
		CAANMsg[] msgList = inMsg.getCAANMsgList(ECH0051D012CBSMsg.ECH0051D012CBSMSG1LIST);
		
		// パラメータチェック(リストが指定されていなければチェックせず、falseを返却)
		if (msgList == null || msgList.length == 0)
		{
			return false;
		}
		
		for (int i = 0; i < msgList.length; i++)
		{
			int amnt = 0;
			
			try
			{
				// 指定された金額を数値に変換
				amnt = Integer.parseInt(msgList[i].getString(ECH0051D012CBSMsg1List.AMNT));
			}
			catch (NumberFormatException nfe)
			{
				// 数値に変換できない場合不正な値が設定されているため、falseを返却
				bRet = false;
				break;
			}
			
			// 指定された金額の大きさをチェックする
			if (amnt <= 0)
			{
				// 指定された金額が0以下だった場合、falseを返却する
				bRet = false;
				break;
			}
		}
		return bRet;
	}
	
	/**
	 * <p>
	 * パラメータに指定されたリストに存在する項目が指定されているかチェックする。
	 * </p>
	 * 
	 * @param inMsg     処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param itemName  チェック対象の項目名
	 * 
	 * @return true:全て設定されている
	 *          false:一つ以上設定されていない
	 */
	public static boolean isSpecifesItem(CAANMsg inMsg, AgentDispatchContext inContext, Object itemName)
	{
		// 返却フラグ
		boolean bRet = true;
		
		// inMsgの再請求登録明細を取得する
		CAANMsg[] msgList = inMsg.getCAANMsgList(ECH0051D012CBSMsg.ECH0051D012CBSMSG1LIST);
		
		// パラメータチェック(リストが指定されていなければチェックせず、falseを返却)
		if (msgList == null || msgList.length == 0)
		{
			return false;
		}
		// 項目名のパラメータチェック
		if (itemName == null)
		{
			return false;
		}
		
		// リスト数分パラメータの項目指定チェックを行う
		for(int i = 0; i < msgList.length; i++)
		{
			// パラメータに指定された項目名に値が指定されているかチェックする
			if (msgList[i].isNull(itemName.toString()))
			{
				// 指定されていないリストが存在したら、返却値を書き換えループを抜ける
				bRet = false;
				break;
			}
		}
		return bRet;
	}
}
