/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCKCustInfChgExecReqChk
*	ソースファイル名：JCKCustInfChgExecReqChk.java
*	作成者			：FJ
*	日付			：2012年01月24日
*＜機能概要＞
*	お客様変更_実行判定クラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/24	FJ			新規作成
*	v4.00.00	2012/09/26	FJ)庭山		【ANK-0398-00-00】対応
*	v4.00.01	2012/10/05	FJ)庭山		【ANK-1223-00-00】対応
*   v4.00.02    2012/11/30  FJ)野口      IT1-2012-0002285対応
*	v4.00.03	2012/12/18	FJ)庭山		【IT1-2012-0002483】対応
*	v4.00.04	2013/02/16	FJ)宇野		【ST1-2013-000349】対応
*	v6.00.00	2013/12/30	FJ)稲岡		【OM-2013-0005345】対応
*  v39.00.00	2018/09/02	FJ)原田		【ANK-3458-00-00】契約者氏名変更時の副次処理を追加（緊急通報氏名の更新）
*  v47.00.00	2019/11/06	FJ)西窪		【ANK-3706-00-00】ｅｏＩＤログインのセキュリティ強化対応
*  v50.00.00	2020/08/05	FJ)吉田		【OM-2020-0000919】契約者名/カナを変更していないのにフェムトセル異動通知が登録される
**********************************************************************/
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;

import eo.common.constant.JKKStrConst;

/**
 * 実行判定クラスです。
 * <BR>
 * @author 富士通
 */
public class JCKCustInfChgExecReqChk extends AbstractCustomReqChk
{

	/**
	 * 実行判定処理
     * <BR>
     * @param irp
     * @param conditionvalue
	 * @return boolean
	 * @throws ReqChkException
	 */
	@Override
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp, IConditionValue conditionvalue) throws ReqChkException
	{
		try
		{
			String value = conditionvalue.get("");
			HashMap inMap = (HashMap)irp.getData("CKSV0007WORK01");
			
			if (inMap == null)
			{
				inMap = (HashMap)irp.getData("CKSV0008WORK01");
			}
			
			if (inMap == null)
			{
				inMap = (HashMap)irp.getData("CKSV0009WORK01");
			}
			
			if (inMap == null)
			{
				inMap = (HashMap)irp.getMappingWorkArea();
			}
			
			String mmbSbtCd = (String)inMap.get("member_sbt_cd");
			String typeCd = (String)inMap.get("keisha_type_cd");
			
			// 異動区分選択画面遷移判定の場合
			if ("CKSV000701CC".equals(value))
			{
				String flg = (String)inMap.get("reference_flg");
				
				// 参照表示フラグが"0"の場合
				if ("0".equals(flg))
				{
					return true;
				}
			}
			// 法人判定の場合
			else if ("hojin".equals(value))
			{
				// 会員種別がマスター会員（法人）又は、非eo会員且つ契約者タイプが個人以外
				if ("20".equals(mmbSbtCd) || (JKKStrConst.CD00039_00.equals(mmbSbtCd) && !JKKStrConst.KEISHA_TYPE_CD_KOJIN.equals(typeCd)))
				{
					return true;
				}
			}
			// ファミリー会員判定の場合
			else if ("family".equals(value))
			{
				// 会員種別がファミリー会員（個人）："11"又はファミリー会員（法人）："21"
				if (JKKStrConst.CD00039_11.equals(mmbSbtCd) || JKKStrConst.CD00039_21.equals(mmbSbtCd))
				{
					return true;
				}
			}
			// 個人判定の場合
			else if ("kojin".equals(value))
			{
				// 会員種別がマスター会員（個人）又はファミリー会員（個人）又はファミリー会員（法人）又はオープン会員
				if (JKKStrConst.CD00039_10.equals(mmbSbtCd)
					|| JKKStrConst.CD00039_11.equals(mmbSbtCd)
					|| JKKStrConst.CD00039_21.equals(mmbSbtCd)
					|| JKKStrConst.CD00039_30.equals(mmbSbtCd))
				{
					return true;
				}
				
				// 非eo会員且つ契約者タイプが個人
				if (JKKStrConst.CD00039_00.equals(mmbSbtCd) && JKKStrConst.KEISHA_TYPE_CD_KOJIN.equals(typeCd))
				{
					return true;
				}
			}
			else if ("CKSV000922".equals(value))
			{
				inMap = (HashMap)irp.getData("CKSV000922CC");
				
				// 異動区分選択画面、照査画面からの遷移
				if ((Boolean)inMap.get("ido_div_seni_flg") || (Boolean)inMap.get("shosa_seni_flg"))
				{
					return true;
				}
			}
			else if ("CKSV000933".equals(value))
			{
				inMap = (HashMap)irp.getData("CKSV000922CC");
				
				// 異動区分選択画面、照査画面からの遷移
				if ((Boolean)inMap.get("ido_div_seni_flg") || (Boolean)inMap.get("shosa_seni_flg"))
				{
					inMap = (HashMap)irp.getData("CKSV0009WORK01");
					
					// 予約でない
					if (!(Boolean)inMap.get("rsv_flg"))
					{
						// ********* v4.00.04 開始 *********
						HashMap fmtcelMap = (HashMap)irp.getData("CKSV000933CC");
						
						if(fmtcelMap.get("prg_dtm") != null && !"".equals((String)fmtcelMap.get("prg_dtm")))
						{
							// OM-2020-0000919 ADD START
							// 契約者名更新フラグが"1"の場合
							if ("1".equals(fmtcelMap.get("keisha_nm_upd_flg"))){
								// OM-2020-0000919 ADD END
								return true;
								// OM-2020-0000919 ADD START
							}
							// OM-2020-0000919 ADD END
						}
						// ********* v4.00.04 終了 *********
					}
				}
			}
			else if ("kojianken".equals(value))
			{
				inMap = (HashMap)irp.getData("CKSV000926CC");
				
				// 異動区分選択画面からの遷移且つ、お客様変更時工事案件反映CC実行判定フラグ="true"
				if ((Boolean)inMap.get("ido_div_seni_flg") && (Boolean)inMap.get("kojiankencc_exec_flg"))
				{
					return true;
				}
			}
			else if ("CKSV000928".equals(value))
			{
				inMap = (HashMap)irp.getData("CKSV000928CC");
				
				// 照査画面からの遷移
				if ((Boolean)inMap.get("shosa_seni_flg"))
				{
					return true;
				}
			}
			// 仮登録判定の場合
			else if ("cust_stat".equals(value))
			{
				inMap = (HashMap)irp.getData("CKSV000925SC");
				String custStat = (String)inMap.get("cust_stat");
				
				// お客様ステータス=受付済："100"
				if ("100".equals(custStat))
				{
					return true;
				}
			}
			// 家族認証判定の場合
			else if ("family_ninsho".equals(value))
			{
				String grpLeaderSysid = (String)inMap.get("grp_leader_sysid");
				
				if (grpLeaderSysid != null && grpLeaderSysid.length() > 0)
				{
					return true;
				}
			}
			// ANK-3458-00-00 ADD START
			else if ("CKSV000936".equals(value))
			{
				inMap = (HashMap)irp.getData("CKSV000936CC");
				if (inMap != null)
				{
					return true;
				}
			}
			// ANK-3458-00-00 ADD END
			// ANK-3706-00-00 ADD START			
			else if ("CKSV000940".equals(value))
			{
				inMap = (HashMap)irp.getData("CKSV000923CC");
				
				if ((inMap) != null)
				{
					String beforeAuthenticationLevel = (String)inMap.get("before_authentication_level");
					String authenticationLevel = (String)inMap.get("authentication_level");
					

					//ログイン認証レベル変更チェック
					if (!beforeAuthenticationLevel.equals(authenticationLevel))
					{
						// 変更前がレベル2の場合
						if("2".equals(beforeAuthenticationLevel))
						{
							// 変更後がレベル0またはレベル1の場合にtrue
							if("0".equals(authenticationLevel) || "1".equals(authenticationLevel))
							{
								return true;
							}
						}
						
					}
				}
			}
			// ANK-3706-00-00 ADD END
			return false;
		}
		catch (RequestParameterException e)
		{
			throw new ReqChkException(e.getMessage(), e);
		}
	}
}
