/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUFUSV0317ReqChk
*   ソースファイル名：JFUFUSV0317ReqChk.java
*   作成者          ：富士通
*   日付            ：2018年05月18日
*＜機能概要＞
*   実行判定部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v37.00      2018/05/18   FJ）岡井    【ANK-3119-00-00】開通前でもＷｅｂから支払方法を変更可能とする
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.HashMap;

import com.fujitsu.futurity.bp.x21.bpm.common.AbstractCustomReqChk;
import com.fujitsu.futurity.bp.x21.bpm.common.IConditionValue;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.reqchk.exception.ReqChkException;

/**
 * FUSV0317の実行条件判定クラス
 * 
 * <br>
 * @author 富士通
 */
public class JFUFUSV0317ReqChk extends AbstractCustomReqChk
{

	/**
	 * サービスIFの実行判定を実施する。
	 * <br>
	 * @param irp
	 * @param conditionvalue
	 * @return 判定結果(条件を満たすtrue/満たさないfalse)
	 * @throws ReqChkException
	 */
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp, IConditionValue conditionvalue) throws ReqChkException
	{
		// 各処理が成功の場合に、trueを返す。
		try
		{
			// BP定義ツールでセットしている値の取得
			String key = conditionvalue.get(null);

			if ("1".equals(key))
			{
				// コードが"1"の場合：初回オーソリ依頼のマップが存在しない場合は、実行しない。

				// 初回オーソリ依頼マップを取得
				HashMap<String, Object> parentMap = (HashMap<String, Object>)irp.getData("FUSV031701SC");

				if (parentMap == null || parentMap.size() == 0)
				{
					return false;
				}

				return true;
			}
			else if ("2".equals(key))
			{
				// コードが"2"の場合：初回オーソリ依頼の処理結果が「取引成功」以外の時は、実行しない。

				// 初回オーソリ依頼マップを取得
				HashMap<String, Object> parentMap = (HashMap<String, Object>)irp.getData("FUSV031701SC");

				if (parentMap != null)
				{
					// 処理結果コードを取得
					if (parentMap.containsKey("cr_resultcode"))
					{
						String cr_resultcode = (String)parentMap.get("cr_resultcode");

						// 処理結果コードを取得できないか、一桁目が"0"以外の場合は以降の処理を行わない
						if (cr_resultcode == null || "".equals(cr_resultcode) || !"0".equals(cr_resultcode.substring(0, 1)))
						{
							return false;
						}
					}
				}

				return true;
			}
			else if ("3".equals(key))
			{
				// コードが"3"の場合：審査済クレジットカード登録用情報が存在しない場合、実行しない。

				// 審査済クレジットカード登録マップを取得
				HashMap<String, Object> parentMap = (HashMap<String, Object>)irp.getData("FUSV031703SC");

				if (parentMap == null || parentMap.size() == 0)
				{
					return false;
				}

				return true;
			}
			else if ("4".equals(key))
			{
				// コードが"4"の場合：請求口座追加CC情報が存在しない場合、実行しない。

				// 請求口座追加CCマップを取得
				HashMap<String, Object> parentMap = (HashMap<String, Object>)irp.getData("FUSV031702CC");

				if (parentMap == null || parentMap.size() == 0)
				{
					return false;
				}

				return true;
			}

			return false;

		}
		catch (RequestParameterException e)
		{
			throw new ReqChkException(e.getMessage(), e);
		}
	}
}
