/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEKK0101C050KRCK
*   ソースファイル名：JEKK0101C050KRCK.java
*   作成者          ：富士通
*   日付            ：2011年10月07日
*＜機能概要＞
*   サービス契約<eo光TV>手続中料金プラン変更関連チェック処理部品です。
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/10/07  富士通      新規作成
*   v75.00.00	2025/04/21	 FJ)柴田	【ANK-4673-00-00】テレビ新コース（スカパー用）導入対応　2025年6月フォロー案件
*
**********************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0101ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0081C110CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0101C050CBSMsg;
import eo.ejb.common.edit.JKKejbKK0081Edit;

/**
 * <p>
 * サービス契約<eo光TV>手続中料金プラン変更関連チェック処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0101C050KRCK
{

	/**
	 * コンストラクタです。
	 */
	public JEKK0101C050KRCK()
	{

	}

	/**
	 * <p>
	 * サービス契約<eo光TV>手続中料金プラン変更関連チェック処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{

		JKKejbKK0081KRCK kk0081 = new JKKejbKK0081KRCK();

		// サービス契約番号
		String svcKeiNo = inCBSMsg.getString(EKK0101C050CBSMsg.SVC_KEI_NO); // サービス契約番号

		// サービス契約_存在チェック
		if (!kk0081.isExistsCurrent(inCBSMsg, svcKeiNo))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.SVC_KEI_NO_ERR, "ED");
			return;
		}

		// 申込明細_存在チェック
		JKKejbKK0021KRCK kk0021 = new JKKejbKK0021KRCK();
		String mskmDtlNo = inCBSMsg.getString(EKK0101C050CBSMsg.MSKM_DTL_NO); // 申込明細番号
		if (!kk0021.isExistsNonGene(mskmDtlNo))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.MSKM_DTL_NO_ERR, "EA");
			return;
		}

		// 料金グループ_存在チェック
		JKKejbKK0781KRCK kk0781 = new JKKejbKK0781KRCK();
		String prcGrpCd = inCBSMsg.getString(EKK0101C050CBSMsg.PRC_GRP_CD); // グループコード
		if (!kk0781.isExistsNonGene(prcGrpCd))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.PRC_GRP_CD_ERR, "EA");
			return;
		}

		// 料金コース_存在チェック
		JKKejbKK0791KRCK kk0791 = new JKKejbKK0791KRCK();
		String pcrsCd = inCBSMsg.getString(EKK0101C050CBSMsg.PCRS_CD); // 料金コースコード
		if (!kk0791.isExistsNonGene(pcrsCd))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.PCRS_CD_ERR, "EA");
			return;
		}

		// 料金コース_存在チェック(料金コース種別コード判定)
		if (!kk0791.isUsablePcrsSvcKei(pcrsCd))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.PCRS_CD_ERR, "EB");
			return;
		}

		// 料金プラン_存在チェック
		JKKejbKK0591KRCK kk0591 = new JKKejbKK0591KRCK();
		String pplanCd = inCBSMsg.getString(EKK0101C050CBSMsg.PPLAN_CD); // 料金プランコード
		if (!kk0591.isExistsYuko(pcrsCd, pplanCd))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.PCRS_CD_ERR, "EC");
			return;
		}

		// 提供方式契約_存在チェック
		JKKejbKK0891KRCK kk0891 = new JKKejbKK0891KRCK();
		String tkHosikiKeiNo = inCBSMsg.getString(EKK0101C050CBSMsg.TK_HOSHIKI_KEI_NO); // 提供方式契約番号
		if (!kk0891.isExistsYuko(tkHosikiKeiNo))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.TK_HOSHIKI_KEI_NO_ERR, "EA");
			return;
		}
		
		// サービス契約<eo光TV>_存在チェック
		JKKejbKK0101KRCK kk0101 = new JKKejbKK0101KRCK();
		JKKejbKK0081Edit kk0081Ed = new JKKejbKK0081Edit();
		String kk0081GeneAddDtm = (String)kk0081Ed.getCurrentGeneAddDtm(inCBSMsg, inContext, svcKeiNo);

		if (!kk0101.isExistsYuko(svcKeiNo, kk0081GeneAddDtm))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.SVC_KEI_NO_ERR, "EC");
			return;
		}
		// ANK-4673-00-00 ADD START
		// 関連チェック用ETメッセージ
		CAANMsg inMsg = new CAANMsg(KK0101ETMsg.class.getName());
		inMsg.set(KK0101ETMsg.SVC_KEI_NO, svcKeiNo);
		// 変更前料金コースコード
		String exPcrsCd = inCBSMsg.getString(EKK0101C050CBSMsg.EX_PCRS_CD); // 変更前料金コースコード
		
		// 開通前コース変更状態チェック（新設）（機器変更あり）
		if (!kk0101.isCrsCngValidNew1(inMsg, inContext, exPcrsCd, pcrsCd))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.SVC_KEI_NO_ERR, "EE");
			return;
		}
		// ANK-4673-00-00 ADD END

		// 電波障害案件_存在チェック
		JKKejbKK0581KRCK kk0581 = new JKKejbKK0581KRCK();
		String dmpsAnkenNo = inCBSMsg.getString(EKK0101C050CBSMsg.DMPS_ANKEN_NO); // 電波障害案件番号
		if (!kk0581.isExistsMK(dmpsAnkenNo))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.RELATION_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.DMPS_ANKEN_NO_ERR, "EA");
			return;
		}

		// サービス契約状態遷移チェック用ETメッセージ
		CAANMsg inETMsg = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsg.set(JCMConstants.TEMPLATE_ID_KEY, inCBSMsg.getString(JCMConstants.TEMPLATE_ID_KEY));
		inETMsg.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);

		// 状態遷移チェック
		if (!new JKKejbKK0081JSCK().checkStateTransition(inETMsg, inContext))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.STATUSTRANS_ERR);
			inCBSMsg.set(EKK0101C050CBSMsg.SVC_KEI_NO_ERR, "EA");
			return;
		}
	}
}
