/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JCHejbCH0021SecProc
 *	ソースファイル名：JCHejbCH0021SecProc.java
 *	作成者			：富士通
 *	日付			：2011年08月06日
 *＜機能概要＞
 *	債権内訳に対する副次処理を行う部品
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/08/06	富士通		新規作成
 *	v5.00.00    2013/08/27  FJ) 林     【IT1-2013-0001612】請求取消仕様変更。請求取消時の債権スキーマ更新項目を変更。
 *	v5.00.01    2013/10/21  FJ) 林     【OM-2013-0003447】当月ご請求額が0円から0円以外に変更された場合、債権ステータスを更新するよう修正。
 *	v8.00.00    2014/02/14  FJ) 林     【OM-2013-0005255】料金調整画面、請求作成機能追加。債権登録処理追加。
 *	v11.00.00	2014/11/21	FJ)古田    【OM-2014-0003587】ニッテレ債権委託対応
 *
 **********************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JACStrConst;
import eo.ejb.cbm.entity.CH0011ETMsg;
import eo.ejb.cbs.cbsmsg.ECH0101D011CBSMsg;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JCHModelCommon;
import eo.ejb.common.edit.JCHejbCH0011NumberParts;

/**
 * <p>
 * 債権内訳に対する副次処理を行う部品です。
 * </p>
 * 
 * @author 富士通
 */
public class JCHejbCH0011SecProc extends JCHejbCH0011DBABase {

	/** テンプレートID取得用 */
	private static final String TEMPLATEID = "templateID";
	
	/** テンプレートID比較用 */
	private static final String ECH0101D011 = "ECH0101D011";
	private static final String ECH0101D012 = "ECH0101D012";
	
	/**
	 * コンストラクタです。
	 */
	public JCHejbCH0011SecProc() {
		super();
	}

	/**
	 * <p>
	 * 料金調整債権変更副次処理部品
	 * 料金調整登録時に債権の更新を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param sSeikyNo 更新対象の請求番号
	 * @param sSeikyAmntAjstYMD 請求金額調整年月日
	 */
	public void PrcAdjSaikenUp(CAANMsg cbsMsg, String sSaikenNo, String sSaikenAdjYMD, String sCompensationUmFlg) {
		
		try {
			
			// 請求の請求金額調整年月日を更新する。
			CAANMsg inETMsgSaiken = new CAANMsg(CH0011ETMsg.class.getName());
			inETMsgSaiken.set(CH0011ETMsg.SAIKEN_NO, sSaikenNo);
			if(sSaikenAdjYMD != null
					&& sSaikenAdjYMD.length() != 0){
				inETMsgSaiken.set(CH0011ETMsg.SAIKEN_ADJ_YMD, sSaikenAdjYMD);
			}
			inETMsgSaiken.set(CH0011ETMsg.HSHIAK_PRC_TEISE_UM, sCompensationUmFlg);
			super.update(inETMsgSaiken);
			
		} catch (CAANException e) {
			
			throw new CAANRuntimeException(e);
			
		} catch (Exception e) {
			
			throw new CAANRuntimeException(e);
		}
	}
	
	/**
	 * <p>
	 * ECH0101D011_料金調整登録、ECH0101D012_料金変更登録、ECH0051D011_随時請求登録
	 * 債権の更新処理を行う。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param sCompensationUm 補償費扱い料金訂正有無
	 * @param saikenStat 債権ステータス
	 */
	public void executePrcAdjSaiken(CAANMsg inCBSMsg, AgentDispatchContext inContext, String sCompensationUm, String saikenStat)
	{
		try 
		{
			// テンプレートID取得
			String sTempID = inCBSMsg.getString(TEMPLATEID);
			
			// 請求の請求調整年月日を更新する。
			CAANMsg inETMsgSeiky = new CAANMsg(CH0011ETMsg.class.getName());
			inETMsgSeiky.set(CH0011ETMsg.SAIKEN_NO, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SAIKEN_NO));
			
			if(ECH0101D011.equals(sTempID))
			{
				// 債権調整年月日
				inETMsgSeiky.set(CH0011ETMsg.SAIKEN_ADJ_YMD, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_AMNT_AJST_YMD));
			}
			else if(ECH0101D012.equals(sTempID))
			{
				if (!"".equals(saikenStat))
				{
					// 債権ステータス
					inETMsgSeiky.set(CH0011ETMsg.SAIKEN_STAT, saikenStat);
				}
				// 債権変更年月日
				inETMsgSeiky.set(CH0011ETMsg.SAIKEN_CHG_YMD, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_AMNT_AJST_YMD));
			}
			
			if(sCompensationUm != null)
			{
				// 補償費扱い料金訂正有無
				inETMsgSeiky.set(CH0011ETMsg.HSHIAK_PRC_TEISE_UM, sCompensationUm);
			}
			
			// 更新年月日時分秒
			inETMsgSeiky.set(CH0011ETMsg.UPD_DTM, JCHModelCommon.getSysDateTimeStamp());
			// 更新オペレータアカウント
			inETMsgSeiky.set(CH0011ETMsg.UPD_OPEACNT, inCBSMsg.getString(CH0011ETMsg.OPERATORID));
			
			super.update(inETMsgSeiky);
		} 
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}
	
	/**
	 * 債権登録を行います。
	 * @param inCBSMsg 処理対象のCBSメッセージ
	 * @param inContext ディスパッチコンテキスト
	 */
	public void createSaiken(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		try 
		{
			CAANMsg inInsMsg = new CAANMsg(CH0011ETMsg.class.getName());
			
			// 債権番号採番
			String saikenNo = JCHejbCH0011NumberParts.getSaikenNo(inCBSMsg, inContext);
			inCBSMsg.set(ECH0101D011CBSMsg.SAIKEN_NO, saikenNo);
			inInsMsg.set(CH0011ETMsg.SAIKEN_NO, saikenNo);
			
			inInsMsg.set(CH0011ETMsg.SEIKY_KEI_NO, inCBSMsg.getString(CH0011ETMsg.SEIKY_KEI_NO));
			inInsMsg.set(CH0011ETMsg.SAIKEN_YM, inCBSMsg.getString(CH0011ETMsg.SAIKEN_YM));
			inInsMsg.set(CH0011ETMsg.SAIKEN_STAT, JACStrConst.SAIKEN_STAT_MI_FIX);                  // "000":債権ステータス（未確定）
			inInsMsg.set(CH0011ETMsg.SEIKY_WAY_CD, inCBSMsg.getString(CH0011ETMsg.SEIKY_WAY_CD));
			inInsMsg.set(CH0011ETMsg.PAY_KIGEN_YMD, inCBSMsg.getString(CH0011ETMsg.PAY_KIGEN_YMD));
			inInsMsg.set(CH0011ETMsg.SEIKY_SBT_CD, JACStrConst.SIKYSHBTS_TEIGK_SEIKY);              // "0":請求種別コード（定例請求）
			inInsMsg.set(CH0011ETMsg.SAIKEN_TORIATSU_CD, "0");
			inInsMsg.set(CH0011ETMsg.SAIKEN_ADJ_YMD, JCCModelCommon.getOpeDate(inCBSMsg, null));
			inInsMsg.set(CH0011ETMsg.HSHIAK_PRC_TEISE_UM, "0");
			
			inInsMsg.set(CH0011ETMsg.ADD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inInsMsg.set(CH0011ETMsg.ADD_OPEACNT, inCBSMsg.getString(CH0011ETMsg.OPERATORID));
			inInsMsg.set(CH0011ETMsg.UPD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inInsMsg.set(CH0011ETMsg.UPD_OPEACNT, inCBSMsg.getString(CH0011ETMsg.OPERATORID));
			inInsMsg.set(CH0011ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
			
			super.create(inInsMsg);
		} 
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}
	
	
	/* ++++++++++ v11.00.00 追加開始 ++++++++++ */
	/**
	 * <p>
	 * ECH0101D011_料金調整登録、ECH0101D012_料金変更登録、ECH0051D011_随時請求登録
	 * 債権の更新処理を行う。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param saikenTakCd 債権取扱コード
	 */
	public void executePrcAdjSaikenSaikenTakCd(CAANMsg inCBSMsg, AgentDispatchContext inContext, String saikenTakCd)
	{
		try 
		{
			// 請求の更新
			CAANMsg inETMsgSeiky = new CAANMsg(CH0011ETMsg.class.getName());
			inETMsgSeiky.set(CH0011ETMsg.SAIKEN_NO, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SAIKEN_NO));
			
			// 債権取扱コード
			inETMsgSeiky.set(CH0011ETMsg.SAIKEN_TORIATSU_CD, saikenTakCd);
			
			// 更新年月日時分秒
			inETMsgSeiky.set(CH0011ETMsg.UPD_DTM, JCHModelCommon.getSysDateTimeStamp());
			// 更新オペレータアカウント
			inETMsgSeiky.set(CH0011ETMsg.UPD_OPEACNT, inCBSMsg.getString(CH0011ETMsg.OPERATORID));
			
			super.update(inETMsgSeiky);
		} 
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}
	/* ++++++++++ v11.00.00 追加完了 ++++++++++ */
	
}
