/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKCrsRkKojiakStatReqChk
*	ソースファイル名：JKKCrsRkKojiakStatReqChk.java
*	作成者			：FJ
*	日付			：2011年11月07日
*＜機能概要＞
*	コース履歴予約取消確認サービス_工事案件ステータス実行判定クラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/07	FJ			新規作成
*	v4.00.00	2013/02/01	FJ）藤原	【ST2-2013-0000432】対応
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
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;

/**
 * 実行判定クラスです。
 * <BR>
 * @author 富士通
 */
public class JKKCrsRkKojiakStatReqChk extends AbstractCustomReqChk
{

	/**
	 * 実行判定処理
	 * <BR>
	 * @param irp
	 * @param conditionvalue
	 * @return boolean
	 * @throws ReqChkException
	 */
	@Override
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp, IConditionValue conditionvalue) throws ReqChkException
	{
		try
		{
			boolean rtnValue = false;
			String value = conditionvalue.get("");
			HashMap<String, Object> inMap = (HashMap)irp.getData("KKSV039527SC");
			HashMap<String, Object> scrndata = (HashMap<String, Object>)irp.getData("SCRNDATA");

			if(null == inMap)
			{
				inMap = (HashMap)irp.getData("KKSV039613SC");
			}
			
			if (null == inMap)
			{
				return false;
			}

			ArrayList<HashMap<String, Object>> dataList = (ArrayList)inMap.get("EKU0011B020CBSMsg1List");

			if (null == dataList || 0 == dataList.size())
			{
				return false;
			}

			if ("0".equals(value))
			{
				rtnValue = true;
			}
			else if ("1".equals(value))
			{
				String svcCd = (String)scrndata.get("svc_cd");
				HashMap<String, Object> data = (HashMap<String, Object>)dataList.get(0);
				String dataValue1 = (String)data.get("kojiak_stat");
				String dataValue2 = (String)data.get("sette_koji_stat");

				// サービスコードがテレビのとき
				if ("03".equals(svcCd))
				{
					if ("130".equals(dataValue1) || "120".equals(dataValue1)) 
					{
						rtnValue = true;
					}
				}
				else
				{
// ++++++++++ v4.00.00 修正開始 ++++++++++
//					if (("130".equals(dataValue1) || "120".equals(dataValue1)) && ("130".equals(dataValue2) || "120".equals(dataValue2)))
//					{
//						rtnValue = true;
//					}
					// 設定工事ステータスが空の場合
					if ("".equals(getNullToStr(dataValue2)))
					{
						if (("130".equals(dataValue1) || "120".equals(dataValue1)))
						{
							rtnValue = true;
						}
					}
					else
					{
						if (("130".equals(dataValue1) || "120".equals(dataValue1)) && ("130".equals(dataValue2) || "120".equals(dataValue2)))
						{
							rtnValue = true;
						}
					}
// ++++++++++ v4.00.00 修正終了 ++++++++++
				}
			}
			else if("2".equals(value))
			{
				String svcCd = (String)scrndata.get("svc_cd");
				HashMap<String, Object> data = (HashMap<String, Object>)dataList.get(0);
				String kojiakStat = (String) data.get("kojiak_stat");
				// サービスコードがテレビのときは状況にかかわらず実行。テレビ以外は状況が依頼済み以降のときは実施しない。
				if (!"03".equals(svcCd) && !"110".equals(kojiakStat) && !"120".equals(kojiakStat) && !"130".equals(kojiakStat))
				{
					return false;
				}
				else
				{
					rtnValue = true;
				}
				
			}

			return rtnValue;
		}
		catch (RequestParameterException e)
		{
			return false;
		}
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str;
	}
}
