/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JECK0021C010ETDA
*	ソースファイル名：JECK0021C010ETDA.java
*	作成者			：富士通
*	日付			：2011年10月06日
*＜機能概要＞
*	お客様<個人>内容変更時の副次処理を行う部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/06	富士通		新規作成
*	v13.00.00	2015/04/20  FJ)藤本		ANK-2545-00-00 対応履歴画面の未来日予約削除対応
*
**********************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbs.cbsmsg.ECK0021C010CBSMsg;
import eo.ejb.common.JCKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.edit.JKKejbKK1681NumberParts;

/**
 * <p>
 * お客様<個人>内容変更の副次処理を行う部品クラスです。
 * </p>
 * @author 富士通
 */
public class JECK0021C010ETDA implements TemplateMainHandler
{

	/**
	 * <p>
	 * お客様<個人>内容変更の副次処理を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 20150420 ANK-2545-00-00 対応履歴画面の未来日予約削除対応 ADD START
		JCKejbCK0011SecProc instance = new JCKejbCK0011SecProc();
		// お客様予約取消処理を実行する場合
		if (instance.isCancelCustRsv(inCBSMsg, inContext))
		{
		// 20150420 ANK-2545-00-00 対応履歴画面の未来日予約削除対応 ADD END
			// 異動予約に存在するお客様予約の取り消し
			cancelCustRsv(inCBSMsg, inContext);
		// 20150420 ANK-2545-00-00 対応履歴画面の未来日予約削除対応 ADD START
		}
		// 20150420 ANK-2545-00-00 対応履歴画面の未来日予約削除対応 ADD END

		// EE対応表の条件の判定
		if(!checkJoken(inCBSMsg, inContext))
		{
			return;
			
		}

		// 異動予約登録処理を実行
		create(inCBSMsg, inContext);
		
		return;
	}

	/**
	 * <p>
	 * 異動予約に存在するお客様予約の取り消しを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	*/
	private void cancelCustRsv(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		String sysid = inCBSMsg.getString(ECK0021C010CBSMsg.SYSID); // SYSID
		String rsvAplyYmd = inCBSMsg.getString(ECK0021C010CBSMsg.RSV_APLY_YMD); // 予約適用年月日

		JKKejbIdoRsvDBAUtil idoRsvDbUtil = new JKKejbIdoRsvDBAUtil();

		// 取消対象レコードの取得
		CAANMsg[] targetMsgs = idoRsvDbUtil.getCustRsvInIdoRsv(inCBSMsg, inContext, sysid, rsvAplyYmd);

		// 対象レコードの更新
		for (CAANMsg targetMsg : targetMsgs)
		{
			idoRsvDbUtil.cancelCustRsvInIdoRsv(inCBSMsg, inContext, targetMsg);
			
			// 自動予約取消ワークに登録します
			this.createKK2791IdoRsv(targetMsg, JKKModelConst.AUTO_RSV_CL_STAT_CD_CL_ZM, inCBSMsg);
		}
	}

	/**
	 * <p>
	 * 自動予約取消ワークに異動予約の予約情報を登録します
	 * </p>
	 * @param kk1681EtMsg ETメッセージ
	 * @param autoRsvClStatCd 自動予約取消状態コード
 	 * @param inCBSMsg 入力情報
	 */
	private void createKK2791IdoRsv(CAANMsg kk1681EtMsg, String autoRsvClStatCd, CAANMsg inCBSMsg)
	{
		// 自動予約取消ワークＤＢ操作部品のインスタンス化
		JKKejbKK2791ETDA kk2791etda = new JKKejbKK2791ETDA();

		// 取消契機異動区分
		kk2791etda.setCl_opty_ido_div(JKKModelConst.IDO_DIV_CUST_CHG);
		// 登録年月日時分秒
		kk2791etda.setAdd_dtm(inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		// 登録オペレータアカウント
		kk2791etda.setAdd_opeacnt(inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		// 更新年月日時分秒
		kk2791etda.setUpd_dtm(inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		// 更新オペレータアカウント
		kk2791etda.setUpd_opeacnt(inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));

		// 自動予約取消ワークの登録
		kk2791etda.createKK2791(kk1681EtMsg, "KK1681", autoRsvClStatCd);
	}

	/**
	 * <p>
	 * 異動予約登録処理の条件チェックを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @return チェック結果(OK:true, NG:false)
	*/
	private boolean checkJoken(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 予約適用年月日を取得
		String rsvymd = inCBSMsg.getString(ECK0021C010CBSMsg.RSV_APLY_YMD);
		
		if (rsvymd != null && rsvymd.compareTo(JCKModelCommon.getOpeDate(inCBSMsg)) > 0)
		{
			return true;
		}
		
		return false;
	}
	
	/**
	 * <p>
	 * 異動予約登録処理のDBアクセス処理を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	private void create(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// ETMsgの作成
		CAANMsg inETMsg = new CAANMsg(KK1681ETMsg.class.getName());
		
		// 採番処理
		JKKejbKK1681NumberParts numberParts = new JKKejbKK1681NumberParts();
		String ido_rsv_no = numberParts.getIdoRsvNo(inCBSMsg, inContext);
		
		// 異動予約番号	IDO_RSV_NO
		inETMsg.set(KK1681ETMsg.IDO_RSV_NO, ido_rsv_no);
		
		// 異動区分	IDO_DIV
		inETMsg.set(KK1681ETMsg.IDO_DIV, "00012");
		
		// 異動予約詳細コード	IDO_RSV_DTL_CD
		inETMsg.set(KK1681ETMsg.IDO_RSV_DTL_CD, "001");
		
		// 予約適用年月日	RSV_APLY_YMD
		inETMsg.set(KK1681ETMsg.RSV_APLY_YMD, inCBSMsg.getString(ECK0021C010CBSMsg.RSV_APLY_YMD));
		
		// 異動予約状態コード	IDO_RSV_STAT_CD
		inETMsg.set(KK1681ETMsg.IDO_RSV_STAT_CD, "04");
		
		// SYSID	SYSID
		inETMsg.set(KK1681ETMsg.SYSID, inCBSMsg.getString(ECK0021C010CBSMsg.SYSID));
		
		// 登録年月日時分秒	ADD_DTM
		inETMsg.set(KK1681ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		
		// 登録オペレータアカウント	ADD_OPEACNT
		inETMsg.set(KK1681ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		
		// 更新年月日時分秒	UPD_DTM
		inETMsg.set(KK1681ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		
		// 更新オペレータアカウント	UPD_OPEACNT
		inETMsg.set(KK1681ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		
		// 無効フラグ	MK_FLG
		inETMsg.set(KK1681ETMsg.MK_FLG, "0");

		// 異動予約番号の登録
		JKKejbDBAUtil dba = new JKKejbDBAUtil(inCBSMsg);
		dba.create(inETMsg);
	
		return;
	}
	
}
