/*********************************************************************
*	All Rights reserved,Copyright c Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*	システム名		：プロジェクト共通
*	モジュール名	：JCHejbCH0231TokusokuAmntEdit
*	ソースファイル名：JCHejbCH0231TokusokuAmntEdit.java
*	作成者			：富士通
*	日付			：2012年02月27日
*＜機能概要＞
*	金庫移動登録時の金庫移動コードを編集する部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/02/27	富士通		新規作成
*
**********************************************************************/
package eo.ejb.common.edit;

import java.math.BigDecimal;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JACStrConst;
import eo.ejb.cbs.cbsmsg.ECH0231C010CBSMsg;


/**
 * 債権ステータスを編集する部品<p>
 * <br>
 * @author 富士通
 */
public class JCHejbCH0231TokusokuAmntEdit
{
	/**
	 * 債権ステータス編集処理<br>
	 * 債権ステータスを算出し返却する。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 編集結果
	 */
	public static String getTokusokuAmntEdit(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		
		// 返却する金額
		String sRetTokusokuAmnt = null;
		
		// 督促異動イベントコードを取得する。
		String sTokusokuIdoEvntCd = inCBSMsg.getString(ECH0231C010CBSMsg.TOKUSOKU_IDO_EVNT_CD);
		
		// 更新前督促金額、異動金額を取得する。
		String sTokusokuAmntBf = inCBSMsg.getString(ECH0231C010CBSMsg.TOKUSOKU_AMNT_BF);
		String sIdoAmnt = inCBSMsg.getString(ECH0231C010CBSMsg.IDO_AMNT);
		
		// (1)督促異動イベントコードによって督促金額の算出を行う。
		if(JACStrConst.TKSKIDO_EVCD_NYKIN_ADD_DISP.equals(sTokusokuIdoEvntCd)){
			
			// BigDecimalに変換
			BigDecimal bdTokusokuAmntBf = new BigDecimal(sTokusokuAmntBf);
			BigDecimal bdIdoAmnt = new BigDecimal(sIdoAmnt);

			// 督促金額返却値初期化
			BigDecimal bdRetTokusokuAmnt = BigDecimal.ZERO;

			// 督促異動イベントコードが'40'(入金登録画面)の場合
			// 更新前督促金額から異動金額を減算する
			// ただし、異動金額が更新前督促金額より大きい場合は、督促金額をゼロ円とする（督促金額はマイナス以下には減算しない）
			if (bdTokusokuAmntBf.compareTo(bdIdoAmnt) > 0)
			{
				bdRetTokusokuAmnt = bdTokusokuAmntBf.subtract(bdIdoAmnt);
			}

			sRetTokusokuAmnt = String.valueOf(bdRetTokusokuAmnt);
		}
		else if(JACStrConst.TKSKIDO_EVCD_NYKIN_CLR_DISP.equals(sTokusokuIdoEvntCd)){
			
			// BigDecimalに変換
			BigDecimal bdTokusokuAmntBf = new BigDecimal(sTokusokuAmntBf);
			BigDecimal bdIdoAmnt = new BigDecimal(sIdoAmnt);
			
			// 督促異動イベントコードが'60'(入金取消画面)の場合
			// 更新前督促金額に異動金額を加算する。
			BigDecimal bdRetTokusokuAmnt = bdTokusokuAmntBf.add(bdIdoAmnt);
			
			sRetTokusokuAmnt = String.valueOf(bdRetTokusokuAmnt);
		}
		else if(JACStrConst.TKSKIDO_EVCD_PRC_CHG_DISP.equals(sTokusokuIdoEvntCd)){
			
			// BigDecimalに変換
			BigDecimal bdTokusokuAmntBf = new BigDecimal(sTokusokuAmntBf);
			BigDecimal bdIdoAmnt = new BigDecimal(sIdoAmnt);
			
			// 督促異動イベントコードが'70'(料金変更)の場合
			// 更新前督促金額に異動金額を加算する。
			BigDecimal bdRetTokusokuAmnt = bdTokusokuAmntBf.add(bdIdoAmnt);
			
			sRetTokusokuAmnt = String.valueOf(bdRetTokusokuAmnt);
		}
		
		return sRetTokusokuAmnt;
	}
}
