/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEAC0171D010TPMA
*	ソースファイル名：JEAC0171D010TPMA.java
*	作成者			：富士通
*	日付			：2011年07月5日
*＜機能概要＞
*	一時金登録顧客独自処理部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/03/14	富士通		新規作成
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

import java.text.ParseException;
import java.util.HashMap;

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 com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.EAC0171D010CBSMsg;
import eo.ejb.common.JCHModelCommon;
import eo.ejb.common.db.JCHejbAC0171SecProc;
import eo.ejb.common.itemrelation.JACejbAC0171Checker;

/**
 * <p>
 * 一時金登録エラーチェック処理を呼び出す部品です。
 * </p>
 * @author 富士通
 */
public class JEAC0171D010TPMA implements TemplateMainHandler
{

	/**
	 * コンストラクタです。
	 */
	public JEAC0171D010TPMA()
	{
	}

	/**
	 * <p>
	 * 一時金登録エラーチェック処理を呼び出します。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @throws ParseException 
	 */
	public static void invoke(CAANMsg inMsg, AgentDispatchContext inContext) throws ParseException
	{
		// ------------------------------------------------------ //
		// 請求年月チェック
		// ------------------------------------------------------ //
		// チェック部品を呼び出す
		JACejbAC0171Checker checkObj = new JACejbAC0171Checker();
		// 最新の料金計算が走行した日に対応する請求年月を取得する
		String dbSeikyYm = checkObj.getPrevCalcDate(inMsg);
		// 入力値を取得
		String inSeikyYm = inMsg.getString(EAC0171D010CBSMsg.SEIKY_YM);
		
		// チェック条件：請求年月がnullでない
		if(inSeikyYm != null)
		{
			// 最新の料金計算が走行した日に対応する請求年月以下の場合
			if(inSeikyYm.compareTo(dbSeikyYm) <= 0)
			{
				// 一時金請求年月料金未計算チェックエラー
				inMsg.set(EAC0171D010CBSMsg.SEIKY_YM_ERR, "E3");
				inMsg.set(EAC0171D010CBSMsg.STATUS, StatusCodes.ITEM_RELATION_ERR);
				return;
			}
			
			// 加算した年月を取得する。
			dbSeikyYm = JPCUtilCommon.addMonth(dbSeikyYm + "01", 12);
			
			dbSeikyYm = dbSeikyYm.substring(0, 6);
			
			// 未来12ヶ月より大きい場合
			if(inSeikyYm.compareTo(dbSeikyYm) > 0)
			{
				// 未来12ヶ月超えチェックエラー
				inMsg.set(EAC0171D010CBSMsg.SEIKY_YM_ERR, "E4");
				inMsg.set(EAC0171D010CBSMsg.STATUS, StatusCodes.ITEM_RELATION_ERR);
				return;
			}
		}

		// ------------------------------------------------------ //
		// 機器製造番号チェック
		// 指定されたサービス契約番号、製造番号が機器提供サービス契約に存在するかチェックし
		// 存在する場合、機器提供サービス契約番号をメッセージキャリア.サービス詳細識別番号に設定し
		// 存在しない場合、エラーを返す。
		// ------------------------------------------------------ //
		// サービス契約番号、サービス詳細識別番号が設定されている場合のみ実行
		if (!inMsg.isNull(EAC0171D010CBSMsg.SVC_KEI_NO) && !inMsg.isNull(EAC0171D010CBSMsg.SVC_DTL_SKBT_NO_KBN))
		{
			if (!JCHModelCommon.isExistsKikiTkSvcKei(inMsg, inContext, null))
			{
				// 機器提供サービス契約番号存在チェックエラー
				inMsg.set(EAC0171D010CBSMsg.SVC_DTL_SKBT_NO_ERR, "EA");
				inMsg.set(EAC0171D010CBSMsg.STATUS, StatusCodes.RELATION_ERR);
				return;
			}
		}

		// 上記以外はステータス正常とする
		inMsg.set(EAC0171D010CBSMsg.STATUS, 0);
		
		// 機能コード判定
		if (!"1".equals(inMsg.getString(EAC0171D010CBSMsg.FUNC_CODE))) 
		{
			return;
		}
		
		// マンション情報取得
		if (!inMsg.isNull(EAC0171D010CBSMsg.SVC_KEI_NO))
		{
			if (inMsg.isNull(EAC0171D010CBSMsg.MANSION_ID) 
				&& inMsg.isNull(EAC0171D010CBSMsg.TK_HOSHIKI_KEI_NO) 
				&& inMsg.isNull(EAC0171D010CBSMsg.KANYU_KEI_PAY_HOSHIKI_CD))
			{
				JCHejbAC0171SecProc AC0171 = new JCHejbAC0171SecProc();
				HashMap<String, String> retMap = AC0171.getMansionInfo(inMsg, inContext, inMsg.getString(EAC0171D010CBSMsg.SVC_KEI_NO));
				
				if (null != retMap && retMap.size() != 0)
				{
					inMsg.set(EAC0171D010CBSMsg.MANSION_ID, retMap.get(EAC0171D010CBSMsg.MANSION_ID));
					inMsg.set(EAC0171D010CBSMsg.TK_HOSHIKI_KEI_NO, retMap.get(EAC0171D010CBSMsg.TK_HOSHIKI_KEI_NO));
					inMsg.set(EAC0171D010CBSMsg.KANYU_KEI_PAY_HOSHIKI_CD, retMap.get(EAC0171D010CBSMsg.KANYU_KEI_PAY_HOSHIKI_CD));
				}
			}
		}
	}
}
