/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JCHejbCH0311SecProc
 *	ソースファイル名：JCHejbCH0311SecProc.java
 *	作成者			：富士通
 *	日付			：2014年06月01日
 *＜機能概要＞
 *	領収に対する副次処理を行う部品
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v9.00.00	2014/06/01	富士通		新規作成
*	v23.00.00	2016/04/05	FJ)岡田    【OM-2016-0000639】
 **********************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.model.base.CAANCreateException;
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.common.util.JACTaxCalcShikibetuCodeUtil;
import eo.ejb.cbm.entity.CH0191ETMsg;
import eo.ejb.cbm.entity.CH0311ETMsg;
import eo.ejb.cbs.cbsmsg.ECH0011C012CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0051D011CBSMsg;
import eo.ejb.common.JCHModelCommon;
import eo.ejb.common.JSYejbSysDate;
import eo.ejb.common.edit.JCHejbCH0311NumberParts;

/**
 * <p>
 * 領収に対する副次処理を行う部品です。
 * </p>
 * 
 * @author 富士通
 */
public class JCHejbCH0311SecProc extends JCHejbCH0311DBABase {

	/**
	 * コンストラクタです。
	 */
	public JCHejbCH0311SecProc() {
		super();
	}

	/**
	 * エンティティの生成を行います。
	 * @param msg 生成するエンティティの情報を格納したメッセージキャリア
	 * @return CAANMsg 生成した結果を格納したメッセージキャリア
	 * @exception CAANCreateException エンティティ生成時のエラーを通知
	 */
	public CAANMsg create(CAANMsg msg) throws CAANCreateException
	{
		return super.create(msg);
	}

	/**
	 * <p>
	 * 入金登録副次処理
	 * 入金登録時に領収の登録を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inDtMsg 料金計算結果内部データ
	 * @throws CAANException 
	 */
	public void insRyoshu(CAANMsg cbsMsg, AgentDispatchContext inContext, String inJutoAmnt, String inJutoAmntUchiTax, String inSeikyWayCd, String inSeikySbtCd, String inJutoNo){
		

		// 登録処理を行う。
		CAANMsg inETMsgRyoshu = new CAANMsg(CH0311ETMsg.class.getName());
		// 債権番号
		String inSaikenNo = cbsMsg.getString(ECH0011C012CBSMsg.SAIKEN_NO);
		String inSaikenYm = cbsMsg.getString(ECH0011C012CBSMsg.SAIKEN_YM);
		String inSeikyKeiNo = cbsMsg.getString(ECH0011C012CBSMsg.SEIKY_KEI_NO);
		String inNyukinNo = cbsMsg.getString(ECH0011C012CBSMsg.NYUKIN_NO);
		String inNyukinRouteCd = cbsMsg.getString(ECH0011C012CBSMsg.NYUKIN_ROUTE_CD);
		
		// 登録データを設定する。
		String receiptNo = JCHejbCH0311NumberParts.getReceiptNo(cbsMsg, inContext);
		inETMsgRyoshu.set(CH0311ETMsg.RECEIPT_NO, receiptNo);
		inETMsgRyoshu.set(CH0311ETMsg.SEIKY_KEI_NO, inSeikyKeiNo);
		inETMsgRyoshu.set(CH0311ETMsg.NYUKIN_NO, inNyukinNo);
		inETMsgRyoshu.set(CH0311ETMsg.NYUKIN_ROUTE_CD, inNyukinRouteCd);
		inETMsgRyoshu.set(CH0311ETMsg.NYUKIN_TRN_YMD, JSYejbSysDate.getDate("YYYYMMDD"));
		inETMsgRyoshu.setNull(CH0311ETMsg.NYUKIN_TRN_HMS);
		inETMsgRyoshu.set(CH0311ETMsg.RECEIPT_YMD,  JSYejbSysDate.getDate("YYYYMMDD"));
		inETMsgRyoshu.setNull(CH0311ETMsg.RECEIPT_HMS);
		inETMsgRyoshu.set(CH0311ETMsg.SAIKEN_YM, inSaikenYm);
		inETMsgRyoshu.set(CH0311ETMsg.SEIKY_WAY_CD, inSeikyWayCd);
		inETMsgRyoshu.set(CH0311ETMsg.JUTO_AMNT, inJutoAmnt);
		inETMsgRyoshu.set(CH0311ETMsg.JUTO_AMNT_UCHI_STAX, inJutoAmntUchiTax);
		inETMsgRyoshu.set(CH0311ETMsg.ADD_DTM, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
		inETMsgRyoshu.set(CH0311ETMsg.ADD_OPEACNT, cbsMsg.getObject(ECH0051D011CBSMsg.OPERATORID));
		inETMsgRyoshu.set(CH0311ETMsg.UPD_DTM, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
		inETMsgRyoshu.set(CH0311ETMsg.UPD_OPEACNT, cbsMsg.getObject(ECH0051D011CBSMsg.OPERATORID));
		inETMsgRyoshu.set(CH0311ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
		inETMsgRyoshu.set(CH0311ETMsg.SAIKEN_NO, inSaikenNo);
		inETMsgRyoshu.set(CH0311ETMsg.SEIKY_SBT_CD, inSeikySbtCd);
		inETMsgRyoshu.set(CH0311ETMsg.JUTO_NO, inJutoNo);
		
		try {
			
			super.create(inETMsgRyoshu);
			
		} catch (CAANException e) {
			
			throw new CAANRuntimeException(e);
			
		} catch (Exception e) {
			
			throw new CAANRuntimeException(e);
		}
	}

	// v23.00.00 ADD START
	/**
	 * <p>
	 * 領収を削除する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param caPrcShukResltSaiken 登録対象明細
	 * @param jutoReceiptInfo 充当領収情報
	 */
	public void delRyoshu(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg caPrcShukResltSaiken, CAANMsg jutoReceiptInfo)
	{
		try
		{
			CAANMsg delMsg = new CAANMsg(CH0311ETMsg.class.getName());
			
			//メッセージを設定
			delMsg.set(CH0311ETMsg.RECEIPT_NO,     jutoReceiptInfo.getString(CH0311ETMsg.RECEIPT_NO));    // 領収番号
			
			super.remove(delMsg);
		}
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}

	/**
	 * <p>
	 * 領収を更新する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param knkInfo 金庫情報
	 * @param jutoReceiptInfo 充当領収情報
	 * @param sJutoNo 充当番号
	 */
	public void insRyoshu(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg knkInfo, CAANMsg jutoReceiptInfo, String sJutoNo)
	{
		String saikenNo = jutoReceiptInfo.getString(CH0311ETMsg.SAIKEN_NO);
		String nyukinRouteCd = jutoReceiptInfo.getString(CH0311ETMsg.NYUKIN_ROUTE_CD);
		String saikenYm = jutoReceiptInfo.getString(CH0311ETMsg.SAIKEN_YM);
		String seikyWayCd = jutoReceiptInfo.getString(CH0311ETMsg.SEIKY_WAY_CD);
		String seikySbtCd = jutoReceiptInfo.getString(CH0311ETMsg.SEIKY_SBT_CD);
		
		insRyoshu(inCBSMsg, inContext, knkInfo, sJutoNo, saikenNo, nyukinRouteCd, saikenYm, seikyWayCd, seikySbtCd);
	}
	/**
	 * <p>
	 * 領収を更新する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param knkInfo 金庫情報
	 * @param sJutoNo 充当番号
	 * @param saikenNo 債権番号
	 * @param nyukinRouteCd 入金経路コード
	 * @param saikenYm 債権年月
	 * @param seikyWayCd 請求方法コード
	 * @param seikySbtCd 請求種別コード
	 */
	public void insRyoshu(
		CAANMsg inCBSMsg, 
		AgentDispatchContext inContext, 
		CAANMsg knkInfo, 
		String sJutoNo, 
		String saikenNo, 
		String nyukinRouteCd, 
		String saikenYm, 
		String seikyWayCd, 
		String seikySbtCd
	) {
		
		try
		{
			CAANMsg inETMsgRyoshu = new CAANMsg(CH0311ETMsg.class.getName());
			
			/** 税計算識別コード管理クラス */
			JACTaxCalcShikibetuCodeUtil jACTaxCalcShikibetuCodeUtil = new JACTaxCalcShikibetuCodeUtil(JACStrConst.CALLER_SCREEN);
			// 税計算識別コード取得
			String taxSkbtCd = jACTaxCalcShikibetuCodeUtil.getTaxSkbtCdStaMax(JACStrConst.UZEI_SZEI_SKBT_UCHI, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_YM).toString().concat("01"));
			// 充当金額うち消費税取得
			String JutoAmntUchiStax = JCHModelCommon.getTaxAmnt(inCBSMsg, inContext, knkInfo.getString(CH0191ETMsg.KNK_AMNT).toString(), taxSkbtCd);
			
			//メッセージを設定
			String receiptNo = JCHejbCH0311NumberParts.getReceiptNo(inCBSMsg, inContext);
			inETMsgRyoshu.set(CH0311ETMsg.RECEIPT_NO, receiptNo);
			inETMsgRyoshu.set(CH0311ETMsg.SEIKY_KEI_NO, knkInfo.getString(CH0191ETMsg.SEIKY_KEI_NO));
			inETMsgRyoshu.set(CH0311ETMsg.NYUKIN_NO, knkInfo.getString(CH0191ETMsg.NYUKIN_NO));
			inETMsgRyoshu.set(CH0311ETMsg.NYUKIN_ROUTE_CD, nyukinRouteCd);
			inETMsgRyoshu.set(CH0311ETMsg.NYUKIN_TRN_YMD, JSYejbSysDate.getDate("YYYYMMDD"));
			inETMsgRyoshu.setNull(CH0311ETMsg.NYUKIN_TRN_HMS);
			inETMsgRyoshu.set(CH0311ETMsg.RECEIPT_YMD,  JSYejbSysDate.getDate("YYYYMMDD"));
			inETMsgRyoshu.setNull(CH0311ETMsg.RECEIPT_HMS);
			inETMsgRyoshu.set(CH0311ETMsg.SAIKEN_YM, saikenYm);
			inETMsgRyoshu.set(CH0311ETMsg.SEIKY_WAY_CD, seikyWayCd);
			inETMsgRyoshu.set(CH0311ETMsg.JUTO_AMNT, knkInfo.getString(CH0191ETMsg.KNK_AMNT));
			inETMsgRyoshu.set(CH0311ETMsg.JUTO_AMNT_UCHI_STAX, JutoAmntUchiStax);
			inETMsgRyoshu.set(CH0311ETMsg.ADD_DTM, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
			inETMsgRyoshu.set(CH0311ETMsg.ADD_OPEACNT, inCBSMsg.getObject(CH0311ETMsg.OPERATORID));
			inETMsgRyoshu.set(CH0311ETMsg.UPD_DTM, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
			inETMsgRyoshu.set(CH0311ETMsg.UPD_OPEACNT, inCBSMsg.getObject(CH0311ETMsg.OPERATORID));
			inETMsgRyoshu.set(CH0311ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
			inETMsgRyoshu.set(CH0311ETMsg.SAIKEN_NO, saikenNo);
			inETMsgRyoshu.set(CH0311ETMsg.SEIKY_SBT_CD, seikySbtCd);
			inETMsgRyoshu.set(CH0311ETMsg.JUTO_NO, sJutoNo);
			
			super.create(inETMsgRyoshu);
		}
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}
	// v23.00.00 ADD END
}
