/*********************************************************************
 *   All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *  システム名		：eo顧客基幹システム
 *  モジュール名	：JKKejbEKK0351C250Edit
 *  ソースファイル名：JKKejbEKK0351C250Edit.java
 *  作成者			：富士通
 *  日付			：2011年11月11日
 *＜機能概要＞
 *  オプションサービス契約解約確定編集部品クラス
 *＜修正履歴＞
 *  バージョン	修正日		修正者		修正内容
 *  v1.00.00    2011/11/11  富士通      新規作成
 *  v4.00.00    2013/07/15  FJ)竹内     TG1-2013-0000704
 *
 **********************************************************************/

package eo.ejb.common.edit;

import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C250CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.db.JKKejbKK0351DBABase;
import eo.ejb.common.db.JKKejbKK0351ETDA;
import eo.ejb.common.entity.JKKejbKRCKCommon;

/**
 * <p>
 * オプションサービス契約の相関ルール処理を呼び出す為の編集を行う部品クラスです
 * </p>
 * @author 富士通
 */
public class JKKejbEKK0351C250Edit
{

	/** サービスコード：テレビサービス */
	private static final String SVC_CD_TV = "03";

	/** サービスコード：ホスティングサービス */
	private static final String SVC_CD_HOST = "04";

	/** カレント引継値 */
	private static final String CURRENT_VALUE = "CURRENT";

	/** 相関ルール値 */
	private static final String RULE_VALUE = "RULE";

	/** 設定種類Key名 */
	private static final String KEY_SET_TYPE = "KEY_SET_TYPE";

	/** サービス課金開始年月日Key名 */
	private static final String KEY_SVC_CHRG_STA_YMD = "KEY_SVC_CHRG_STA_YMD";

	/**
	 * コンストラクタです
	 */
	public JKKejbEKK0351C250Edit()
	{
	}

	/**
	 * <p>
	 * オプションサービス契約の課金開始年月日設定の相関ルールを呼び出し、
	 * 課金開始年月日を設定します
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 設定種類と課金開始年月日
	 */
	public Object getChrgStaYmd(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "call:JKKejbEKK0351C250Edit#getChrgStaYmd");

		// オプションサービス契約のカレント検索を行う
		CAANMsg kk0351Msg = getCurrentKK0351(inMsg);

		// 存在しない場合
		if (null == kk0351Msg)
		{
			return null;
		}

		// 返却をマップに格納する
		HashMap<String, String> retMap = new HashMap<String, String>();
		
		// 親契約識別コードを元に取得したサービス契約番号でサービス契約をカレント検索する
		CAANMsg kk0081Msg = new JKKejbKRCKCommon().getOyaKK0081(inMsg, kk0351Msg);

		// 親サービス契約のサービスコードを元に更新契機を決定します
		String svcCd = kk0081Msg.getString(KK0081ETMsg.SVC_CD);

		// 親サービス契約のサービスコードが"テレビサービス"または"ホスティングサービス"の場合
		if (SVC_CD_TV.equals(svcCd) || SVC_CD_HOST.equals(svcCd))
		{
			// カレント引継をおこなう
			retMap.put(KEY_SET_TYPE, CURRENT_VALUE);
			retMap.put(KEY_SVC_CHRG_STA_YMD, kk0351Msg.getString(KK0351ETMsg.SVC_CHRG_STAYMD));
		}
		else
		{
			// 相関ルールを実行する
			retMap.put(KEY_SET_TYPE, RULE_VALUE);
			retMap.put(KEY_SVC_CHRG_STA_YMD, new JKKejbKK0351ETDA().chrgStaYmdRuleRunForDsl(inMsg, kk0351Msg, kk0081Msg));
		}
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "end:JKKejbEKK0351C250Edit#getChrgStaYmd");

		return retMap;
	}

	/**
	 * <p>
	 * オプションサービス契約のカレントを検索します
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @return 取得したオプションサービス契約
	 */
	private CAANMsg getCurrentKK0351(CAANMsg inMsg)
	{
		// カレント検索用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0351ETMsg.class.getName());
		inETMsg.set(KK0351ETMsg.OP_SVC_KEI_NO, inMsg.getString(EKK0351C250CBSMsg.OP_SVC_KEI_NO));
		inETMsg.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inMsg));

		// オプションサービス契約のカレント検索を行う
		CAANMsg otEtMsg = new JKKejbKK0351DBABase().findByCurrent(inETMsg);

		if (null == otEtMsg)
		{
			return null;
		}

		return otEtMsg;
	}
}
