/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
*	モジュール名	：JCKejbCK0011ConvChk
*	ソースファイル名：JCKejbCK0011ConvChk.java
*	作成者			：富士通
*	日付			：2011年11月01日
*＜機能概要＞
*	お客様の変換条件部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/01	富士通		新規作成
*	v53.00.00   2021/05/11  FJ）謝      【ANK-4009-00-00】CX戦略WG方針対応
*
**********************************************************************/
package eo.ejb.common.convert;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.CK0011ETMsg;
import eo.ejb.common.JCKModelCommon;
import eo.ejb.common.db.JCKejbCK0011DBABase;

/**
 * ３層スキーマ変換時の変換条件を提供するクラスです。<p>
 * <br>
 * @author 富士通
 */
public class JCKejbCK0011ConvChk
{
	/** 会員種別コード(非eo会員) */
	private static final String MEMB_SBT_CD_HI_EOMNB = "00";

	/** 会員種別コード(マスター会員(個人)) */
	private static final String MEMB_SBT_CD_MAST_KOJIN = "10";

	/** 会員種別コード(マスター会員(法人)) */
	private static final String MEMB_SBT_CD_MAST_HOJIN = "20";
// ANK-4009-00-00 ADD START
	/** 会員種別コード(オープン会員) */
	private static final String MEMB_SBT_CD_OPEN = "30";
// ANK-4009-00-00 ADD END

	/**
	 * 会員種別コードチェック処理(マスター会員(個人・法人)、オープン会員用)
	 * <p>
	 * 会員種別コードが"非eo会員"から"オープン会員"に変更される場合、true。
	 * 会員種別コードが"マスター会員（個人）"・"マスター会員（法人）"以外から
	 * "マスター会員（個人）"または"マスター会員（法人）"に変更される場合、true。
	 * 上記以外の場合はfalse。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param memberSbtCd 会員種別コード
	 * @param sysId SYSID
	 * @return チェック結果
	 */
	public boolean isChkCngMbrSbtCdMasKoHo(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object memberSbtCd, Object sysId)
	{
		// 引数チェック
		if (null == memberSbtCd || null == sysId)
		{
			return false;
		}

		// お客様のカレントレコードを取得
		CAANMsg inETMsg = new CAANMsg(CK0011ETMsg.class.getName());
		inETMsg.set(CK0011ETMsg.SYSID, sysId.toString());
		inETMsg.set(CK0011ETMsg.RSV_APLY_YMD, JCKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg outETMsg = new JCKejbCK0011DBABase().findByCurrent(inETMsg);

		// 存在しない場合
		if (null == outETMsg)
		{
			return false;
		}
// ANK-4009-00-00 ADD START
		// 会員種別コードが非eo会員からオープン会員に変更される場合
		if (MEMB_SBT_CD_HI_EOMNB.equals(outETMsg.getString(CK0011ETMsg.MEMBER_SBT_CD))
				&& MEMB_SBT_CD_OPEN.equals(memberSbtCd))
		{
			return true;
		}
// ANK-4009-00-00 ADD END

		// 変更前の会員種別コードがマスター会員(個人)またはマスター会員(法人)の場合、falseを返却
		if (MEMB_SBT_CD_MAST_KOJIN.equals(outETMsg.getString(CK0011ETMsg.MEMBER_SBT_CD))
				|| MEMB_SBT_CD_MAST_HOJIN.equals(outETMsg.getString(CK0011ETMsg.MEMBER_SBT_CD)))
		{
			return false;
		}

		// 会員種別コードがマスター会員(個人)またはマスター会員(法人)の場合
		if (MEMB_SBT_CD_MAST_KOJIN.equals(memberSbtCd) || MEMB_SBT_CD_MAST_HOJIN.equals(memberSbtCd))
		{
			return true;
		}

		return false;
	}
	
	/**
	 * 会員種別コードチェック処理(非eo会員→マスター会員(個人・法人)、オープン会員用)
	 * <p>
	 * 会員種別コードが"非eo会員"から"マスター会員（個人）"または"マスター会員（法人）"または"オープン会員"に変更される場合、true。
	 * 上記以外の場合はfalse。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param sysId SYSID
	 * @param memberSbtCd 会員種別コード
	 * @return
	 */
	public boolean isChkMbrSbtCdHieoMasKoHo(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object sysId, Object memberSbtCd)
	{
		// 引数チェック
		if (null == memberSbtCd || null == sysId)
		{
			return false;
		}

		// お客様のカレントレコードを取得
		CAANMsg inETMsg = new CAANMsg(CK0011ETMsg.class.getName());
		inETMsg.set(CK0011ETMsg.SYSID, sysId.toString());
		inETMsg.set(CK0011ETMsg.RSV_APLY_YMD, JCKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg outETMsg = new JCKejbCK0011DBABase().findByCurrent(inETMsg);

		// 存在しない場合
		if (null == outETMsg)
		{
			return false;
		}

		// 変更前の会員種別コードが非eo会員でない場合、falseを返却
		if (!MEMB_SBT_CD_HI_EOMNB.equals(outETMsg.getString(CK0011ETMsg.MEMBER_SBT_CD)))
		{
			return false;
		}

// ANK-4009-00-00 MOD START
//		// 会員種別コードがマスター会員(個人)またはマスター会員(法人)の場合
//		if (MEMB_SBT_CD_MAST_KOJIN.equals(memberSbtCd) || MEMB_SBT_CD_MAST_HOJIN.equals(memberSbtCd))
		// 会員種別コードがマスター会員(個人)またはマスター会員(法人)またはオープン会員の場合
		if (MEMB_SBT_CD_MAST_KOJIN.equals(memberSbtCd) || MEMB_SBT_CD_MAST_HOJIN.equals(memberSbtCd) || MEMB_SBT_CD_OPEN.equals(memberSbtCd))
// ANK-4009-00-00 MOD END
		{
			return true;
		}

		return false;
	}
	
	/**
	 * 会員種別コードチェック処理(カレント_マスター会員(個人・法人)用)
	 * <p>
	 * お客様の会員種別コードが、マスター会員（個人）またはマスター会員（法人）であるかを判断する
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param sysId SYSID
	 * @return 対象のお客様の会員種別コードが"マスター会員（個人）"または"マスター会員（法人）"の場合、true。
	 *          上記以外の場合はfalse。
	 */
	public boolean isChkMbrSbtCdCurMasKoHoCK(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object sysId)
	{
		// 引数チェック
		if (null == sysId)
		{
			return false;
		}

		// お客様のカレントレコードを取得
		CAANMsg inETMsg = new CAANMsg(CK0011ETMsg.class.getName());
		inETMsg.set(CK0011ETMsg.SYSID, sysId.toString());
		inETMsg.set(CK0011ETMsg.RSV_APLY_YMD, JCKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg outETMsg = new JCKejbCK0011DBABase().findByCurrent(inETMsg);

		// 存在しない場合
		if (null == outETMsg)
		{
			return false;
		}

		// 変更前の会員種別コードがマスター会員(個人)またはマスター会員(法人)の場合、trueを返却
		if (MEMB_SBT_CD_MAST_KOJIN.equals(outETMsg.getString(CK0011ETMsg.MEMBER_SBT_CD))
				|| MEMB_SBT_CD_MAST_HOJIN.equals(outETMsg.getString(CK0011ETMsg.MEMBER_SBT_CD)))
		{
			return true;
		}

		return false;
	}
}
