/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *  システム名      ：eo顧客基幹システム
 *  モジュール名    ：JKKejbEKK0341Edit
 *  ソースファイル名：JKKejbEKK0341Edit.java
 *  作成者          ：富士通
 *  日付            ：2014年04月28日
 *＜機能概要＞
 *  保証・補償期間開始日算出基準年月日編集部品クラス
 *＜修正履歴＞
 *  バージョン  修正日      修正者      修正内容
 *  v9.00.00    2014/04/28	FJ)			新規作成
 *  v9.00.00    2014/06/18	FJ)小島		IT2-2014-0000248
 *  v10.00.00	2014/06/25	FJ)松		ANK-2138-00-00
 *
 **********************************************************************/

package eo.ejb.common.edit;

import java.util.HashMap;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.DK0011ETMsg;
import eo.ejb.cbm.entity.KK0341ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C231CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.db.JKKejbDK0011DBABase;
import eo.ejb.common.db.JKKejbKK0341DBABase;

/**
 * <p>
 * 保証・補償期間開始日算出基準年月日の編集を行う部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK0341Edit
{

	/**
	 * <p>
	 * 保証・補償期間開始日算出基準年月日を取得する。
	 * </p>
	 * @param  inMsg         処理対象のメッセージキャリア
	 * @param  inContext     Agentから渡されたAgentDispatchContext
	 * @param  kktkSvcKeiNo  機器提供サービス契約番号		
	 * @return 保証・補償期間開始日算出基準年月日
	 */
	public  Object  gethaisoFinYmd(CAANMsg inMsg, AgentDispatchContext inContext, Object kktkSvcKeiNo)
	{
		
		// 運用日付
		String opeDate = JKKModelCommon.getOpeDate(inMsg);
		
		JKKejbKK0341DBABase dbaBase = new JKKejbKK0341DBABase();
		
		// 機器提供サービス契約番号に紐づく機器提供サービス契約（カレント）を取得
		CAANMsg kk0341Cur = dbaBase.getKK0341Current((String)kktkSvcKeiNo, opeDate);
		/* ++++++++++++++++++++++++++++++ v10.00.00 修正開始 ++++++++++++++++++++++++++++++ */
//		// カレントの保証・補償期間開始日算出基準年月日を設定
//		String haisoFinYmd = kk0341Cur.getString(KK0341ETMsg.HCPRD_STAD_SNSTSTD_YMD);
		// カレントの保証・補償期間開始日算出基準年月日を設定 NULLを除去して取得する。
		String haisoFinYmd = JPCUtilCommon.Rtrim(kk0341Cur.getString(KK0341ETMsg.HCPRD_STAD_SNSTSTD_YMD));
		/* ++++++++++++++++++++++++++++++ v10.00.00 修正完了 ++++++++++++++++++++++++++++++ */
		/* ++++++++++++++++++++++++++++++ v10.00.00 追加開始 ++++++++++++++++++++++++++++++ */
		// 配送先工事会社コード
		String hisosCd = "";
		/* ++++++++++++++++++++++++++++++ v10.00.00 追加完了 ++++++++++++++++++++++++++++++ */
		// 更新対象か判定
		if (checkForUpdate0341(inMsg, inContext, kk0341Cur))
		{
			// 機器提供サービス契約番号
			String kktkSvcKeiN = kk0341Cur.getString(KK0341ETMsg.KKTK_SVC_KEI_NO);
			// 機器変更番号
			String kikiChgNo   = kk0341Cur.getString(KK0341ETMsg.KIKI_CHG_NO);
			
			HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();
			searchJknMap.put(DK0011ETMsg.HAISO_STAT, new String[] {JKKModelConst.HAISO_STAT_SJI_KN});
			
			JKKejbDK0011DBABase dk0011Dba = new JKKejbDK0011DBABase();
			// 機器提供サービス契約番号に紐づく配送（DK0011)を取得
			CAANMsg[] dk0011Cur = dk0011Dba.getDK0011byKktkSvcKei(kktkSvcKeiN, kikiChgNo, searchJknMap);
			
			//配送（DK0011)が取得できた場合、配送完了年月日を設定
			if (null != dk0011Cur && dk0011Cur.length != 0)
			{
				/* ++++++++++++++++++++++++++++++ v10.00.00 追加開始 ++++++++++++++++++++++++++++++ */
//				haisoFinYmd = dk0011Cur[0].getString(DK0011ETMsg.HAISO_FIN_YMD);
				// 配送先工事会社コード取得
				hisosCd = JPCUtilCommon.Rtrim(dk0011Cur[0].getString(DK0011ETMsg.HISOS_KOCOMP_CD));
				// 配送先工事会社コード有無判定
				if ("".equals(hisosCd))
				{
					// 配送先工事会社コードが空文字の場合、配送完了年月日を設定
					haisoFinYmd = dk0011Cur[0].getString(DK0011ETMsg.HAISO_FIN_YMD);
				}
				/* ++++++++++++++++++++++++++++++ v10.00.00 追加完了 ++++++++++++++++++++++++++++++ */
			}
			/* ++++++++++++++++++++++++++++++ v10.00.00 削除開始 ++++++++++++++++++++++++++++++ */
			//// カレントの保証・補償期間開始日算出基準年月日を返却
			//return haisoFinYmd;
			/* ++++++++++++++++++++++++++++++ v10.00.00 削除完了 ++++++++++++++++++++++++++++++ */
		}

		// 対象外の場合、カレントの保証・補償期間開始日算出基準年月日を返却
		return haisoFinYmd;
	}
	/**
	 * <p>
	 * 保証・補償期間開始日算出基準年月日の更新条件チェックを行います。
	 * </p>
	 * @param inCBSMsg  処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param curRetMsg 処理対象のカレントレコード
	 * @return チェック結果(OK:true, NG:false)
	 */
	public  boolean checkForUpdate0341(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg curRetMsg)
	{
		// カレントレコードが存在しない場合falseを返却
		if (curRetMsg == null)
		{
			return false;
		}
		//カレントレコードの保証・補償期間開始日算出基準年月日が設定済の場合falseを返却
		if (curRetMsg.getString(KK0341ETMsg.HCPRD_STAD_SNSTSTD_YMD) != null)
		{
			return false;
		}
		//カレントレコードの機器提供サービスコードが"C021"、かつ入力．出荷完了時処理済フラグ＝"1"
		//の場合、処理対象とする
		
		if (JKKModelConst.KKTK_SVC_CD_TABLET.equals(curRetMsg.getString(KK0341ETMsg.KKTK_SVC_CD)) && 
			JKKModelConst.SHKA_FIN_JI_SYRZM_FLG_SUMI.equals(inCBSMsg.getString(EKK0341C231CBSMsg.SHKA_FIN_JI_SYRZM_FLG)))
		{
			return true;
		}		
		return false;
	}
	
	/**
	 * <p>
	 * 機器提供サービス契約登録の予約適用年月日に設定する日付を取得する。
	 * </p>
	 * @param  inMsg 処理対象のメッセージキャリア
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  rsvAplyYmd 予約起用年月日		
	 * @return 予約起用年月日
	 */
	public Object getKktkSvcKeiRsvAplyYmd(CAANMsg inMsg, AgentDispatchContext inContext, Object rsvAplyYmd)
	{
		// 予約適用年月日が設定されている場合は入力の予約適用年月日を設定する
		if (rsvAplyYmd != null)
		{
			return rsvAplyYmd;
		}

		// 上記以外は運用日付を設定する
		return JKKModelCommon.getOpeDate(inMsg, inContext);
	}

	/* ++++++++++++++++++++++++++++++ v10.00.00 追加開始 ++++++++++++++++++++++++++++++ */
	/**
	 * <p>
	 * 保証・補償期間開始日算出基準年月日識別コードを算出する。
	 * </p>
	 * @param  inMsg         処理対象のメッセージキャリア
	 * @param  inContext     Agentから渡されたAgentDispatchContext
	 * @param  kktkSvcKeiNo  機器提供サービス契約番号		
	 * @return 保証・補償期間開始日算出基準年月日識別コード
	 */
	public  Object  getHcprdStadSnststdYmdScd(CAANMsg inMsg, AgentDispatchContext inContext, Object kktkSvcKeiNo)
	{
		
		// 運用日付
		String opeDate = JKKModelCommon.getOpeDate(inMsg);
		
		JKKejbKK0341DBABase dbaBase = new JKKejbKK0341DBABase();
		
		// 機器提供サービス契約番号に紐づく機器提供サービス契約（カレント）を取得
		CAANMsg kk0341Cur = dbaBase.getKK0341Current((String)kktkSvcKeiNo, opeDate);
		// カレントの保証・補償期間開始日算出基準年月日識別コードを設定
		String hcprdStadSnststdYmdScd = JPCUtilCommon.Rtrim(kk0341Cur.getString(KK0341ETMsg.HCPRD_STAD_SNSTSTD_YMD_SCD));
		// カレントの機器変更番号
		String kikiChgNo = JPCUtilCommon.Rtrim(kk0341Cur.getString(KK0341ETMsg.KIKI_CHG_NO));

		// 更新対象か判定
		if (checkForUpdate0341(inMsg, inContext, kk0341Cur))
		{

			/* ===================================================================
			 * 保証・補償期間開始日算出基準年月日識別コードが
			 * 設定されているか判定を行う。
			 * 設定済：true／未設定：false
			 =================================================================== */
			// 保証・補償期間開始日算出基準年月日識別コード設定チェック
			if ("".equals(hcprdStadSnststdYmdScd))
			{
				/* ===================================================================
				 * 配送先工事会社コードが設定されているか判定した結果によって、
				 * 保証・補償期間開始日算出基準年月日識別コードを設定する。
				 =================================================================== */
				if (this.existHisosCd(kktkSvcKeiNo.toString(),kikiChgNo))
				{
					hcprdStadSnststdYmdScd = "2";
				}
				else
				{
					hcprdStadSnststdYmdScd = "1";
				}
			}
		}
		// 対象外の場合、カレントの保証・補償期間開始日算出基準年月日識別コードを返却
		return hcprdStadSnststdYmdScd;
	}

	/**
	 * 配送先工事会社コードの存在有無を判定する。
	 * 
	 * @param kktkSvcKeiNo
	 * @param kikiChgNo
	 * @return boolean true：存在有/false：存在無
	 */
	private boolean existHisosCd(String kktkSvcKeiNo, String kikiChgNo)
	{
		boolean retValue = false;
		String strHisosCd = "";
		HashMap<String, String[]> searchJknMap = new HashMap<String, String[]>();
		searchJknMap.put(DK0011ETMsg.HAISO_STAT, new String[] {JKKModelConst.HAISO_STAT_SJI_KN});

		JKKejbDK0011DBABase dk0011Dba = new JKKejbDK0011DBABase();
		// 機器提供サービス契約番号に紐づく配送（DK0011)を取得
		CAANMsg[] dk0011Cur = dk0011Dba.getDK0011byKktkSvcKei(kktkSvcKeiNo, kikiChgNo, searchJknMap);

		//配送（DK0011)が取得できた場合、配送先工事会社コードを取得
		if (null != dk0011Cur && dk0011Cur.length != 0)
		{
			// 配送先工事会社コードを取得
			strHisosCd = dk0011Cur[0].getString(DK0011ETMsg.HISOS_KOCOMP_CD);
			// 配送先工事会社コードの存在有無をチェック
			if (strHisosCd != null && !"".equals(strHisosCd))
			{
				// 存在有の場合、trueを返却する。
				retValue = true;
			}
		}
		return retValue;
	}
	/* ++++++++++++++++++++++++++++++ v10.00.00 追加完了 ++++++++++++++++++++++++++++++ */
}