/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEAC0171C011TPMA
*	ソースファイル名：JEAC0171C011TPMA.java
*	作成者			：富士通
*	日付			：2011年07月5日
*＜機能概要＞
*	一時金引継更新顧客独自処理部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/03/14	富士通		新規作成
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

import java.text.ParseException;

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 com.fujitsu.futurity.model.ejb.common.StatusCodes;

import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.EAC0171C010CBSMsg;
import eo.ejb.common.itemrelation.JACejbAC0171Checker;

/**
 * <p>
 * 一時金引継更新エラーチェック処理を呼び出す部品です。
 * </p>
 * @author 富士通
 */
public class JEAC0171C011TPMA implements TemplateMainHandler
{

	/**
	 * コンストラクタです。
	 */
	public JEAC0171C011TPMA()
	{
	}

	/**
	 * <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(EAC0171C010CBSMsg.SEIKY_YM);
		
		// チェック条件：請求年月がnullでない
		if(inSeikyYm != null)
		{
			// 最新の料金計算が走行した日に対応する請求年月以下の場合
			if(inSeikyYm.compareTo(dbSeikyYm) <= 0)
			{
				// 一時金請求年月料金未計算チェックエラー
				inMsg.set(EAC0171C010CBSMsg.SEIKY_YM_ERR, "E3");
				inMsg.set(EAC0171C010CBSMsg.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(EAC0171C010CBSMsg.SEIKY_YM_ERR, "E4");
				inMsg.set(EAC0171C010CBSMsg.STATUS, StatusCodes.ITEM_RELATION_ERR);
				return;
			}
		}
		
		// 上記以外はステータス正常とする
		inMsg.set(EAC0171C010CBSMsg.STATUS, 0);

	}

}
