/*********************************************************************
*	All Rights reserved,Copyright c Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*	システム名		：プロジェクト共通
*	モジュール名	：JCHejbCH0191KnkMoveCdEdit
*	ソースファイル名：JCHejbCH0191KnkMoveCdEdit.java
*	作成者			：富士通
*	日付			：2011年08月11日
*＜機能概要＞
*	金庫移動登録時の金庫移動コードを編集する部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/11	富士通		新規作成
*
**********************************************************************/
package eo.ejb.common.edit;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JACStrConst;
import eo.ejb.cbm.entity.CH0201ETMsg;
import eo.ejb.cbm.entity.CH0401ETMsg;
import eo.ejb.cbs.cbsmsg.ECH0011C013CBSMsg;
import eo.ejb.cbs.mainproc.JECH0011C013TPMA;


/**
 * 最新債権充当年月日を編集する部品<p>
 * <br>
 * @author 富士通
 */
public class JCHejbSaikenJutoYmd
{
	/**
	 * 最新債権充当年月日設定処理<br>
	 * 最新債権充当年月日設定を算出し返却する。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 編集結果
	 */
	public static String getSaikenJutoYmd(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		
		// 債権ステータス編集部品を呼び出す。
		String sSaikeState = JCHejbCH0011SaikenStateEdit.getSaikenStateEdit(inCBSMsg, inContext);
		
		// 債権ステータス編集部品の結果判定
		if(JACStrConst.SAIKEN_STAT_FIX_SEIKY.equals(sSaikeState)){
			// 債権ステータスが'02'：請求確定の場合、nullを返却する。
			return null;
		}
		else if(JACStrConst.SAIKEN_STAT_ICHIBU_KAKNO.equals(sSaikeState)){
			// 債権ステータスが'060'：一部収納済の場合、最新の充当年月日を取得する。
			
			// コネクション
			Connection con1 = null;

			// プリペアステートメント
			PreparedStatement pstmt = null;

			// リザルトセット
			ResultSet rsltQuery = null;
			
			/********************
			 * SQL文の作成
			 ********************/
			
			try {
				
				con1 = JSYejbConnection.getConnection(CH0201ETMsg.getTableName());
				
				StringBuffer sql_Buff = new StringBuffer();
				sql_Buff.append(" SELECT ")
						.append("     MAX(CH0201.JUTO_YMD) AS JUTO_YMD ")
						.append(" FROM ")
						.append("     CH_T_JUTO CH0201 ")
						.append(" WHERE ")
						.append("     CH0201.JUTO_SBT_CD = '3' ")
						.append(" AND CH0201.SAIKEN_NO = ? ")
						.append(" AND CH0201.MK_FLG = '0' ");
				
				// prepareStatementにSQL文をセット
				pstmt = con1.prepareStatement(sql_Buff.toString());

				// ログ出力(SQL文の出力)
				JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS,JECH0011C013TPMA.class, sql_Buff);
				
				int i = 1;
				
				// パラメータの設定(債権番号を指定)
				CAANJDBCUtil.setParam(pstmt, i++, inCBSMsg.getObject(ECH0011C013CBSMsg.SAIKEN_NO));
				
				// ResultSetの取得
				rsltQuery = pstmt.executeQuery();
				
				// 戻り値の判定
				if (rsltQuery.next()) {
					String sJUTO_YMD = rsltQuery.getString(CH0201ETMsg.JUTO_YMD);
					
					// 取得した充当年月日を返却
					return sJUTO_YMD;
				}
				
			} catch (SQLException e) {
				inCBSMsg.set(CH0401ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			} finally {
				// 資源の解放
				try {
					if (rsltQuery != null) {
						rsltQuery.close();
					}
					if (pstmt != null) {
						pstmt.close();
					}
					if (con1 != null) {
						CAANConnectionMgr.getInstance().close(con1);
					}
				} catch (SQLException e) {
					inCBSMsg.set(CH0401ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
					throw new CAANRuntimeException(e);
				}
			}
			
			
		}
		return null;
	}
}
