/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEKK0061C010TKCK
*	ソースファイル名：JSYejbEKK0061C010TKCK.java
*	作成者			：EK912022
*	日付			：2012年11月14日
*＜機能概要＞
*	代理店変更の単関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.check.itemrelation;

import java.sql.Date;
import java.sql.Timestamp;
import com.fujitsu.futurity.model.base.CAANMsg;
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 com.fujitsu.futurity.model.ejb.common.fw.TankanrenCheckHandler;
import eo.ejb.cbs.cbsmsg.EKK0061C010CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <HR>
 * 代理店変更CBSMsgの単関連チェック用クラス｡ <p>
 * 
 * 以下の機能をサポートする。
 * <ul>
 * <li>代理店変更CBSMsgの単関連をチェックする。
 * </ul>
 * <p>
 * <HR>
 * <p>
 */ 
public class JSYejbEKK0061C010TKCK implements TankanrenCheckHandler {

	/**
	 * JSYejbEKK0061C010TKCK単関連をチェックする。<br>
	 * 
	 * JSYejbEKK0061C010TKCK単関連をチェックする。
	 * <p>
	 * @param	inCBSMsg	CBSMsgメッセージ
	 * @param	inContext	Agent
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext) {

		JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"invoke#Call");

		// チェックを行う
		int stRet = 0;

		//チェック条件：代理店住所コードがnullでない かつ 代理店住所手動入力フラグが固定値(0)と等しい
		if(!inCBSMsg.isNull(EKK0061C010CBSMsg.AGNT_AD_CD) &&  comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.AGNT_AD_MAN_INPUT_FLG),"0","20","1") ){
			//住所入力チェック（契約）の戻り値がfalseと等しい ：エラー
			if(JKKModelCommon.isKKAddressInputCheck(inCBSMsg, inContext , "E2", "agnt_ad_cd", "agnt_state_nm", "agnt_city_nm", "agnt_oaztsu_nm", "agnt_azcho_nm", "agnt_bnchigo" ) == false){
				inCBSMsg.set(EKK0061C010CBSMsg.AGNT_AD_CD_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"agnt_ad_cd_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：代理店住所チェックレベルが固定値(1)と等しい または 代理店住所チェックレベルが固定値(2)と等しい
		if( comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.AGNT_AD_CHK_LV),"1","20","1")  ||  comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.AGNT_AD_CHK_LV),"2","20","1") ){
			//代理店住所コードがnull または 代理店郵便番号がnull ：エラー
			if(inCBSMsg.isNull(EKK0061C010CBSMsg.AGNT_AD_CD) || inCBSMsg.isNull(EKK0061C010CBSMsg.AGNT_PCD)){
				inCBSMsg.set(EKK0061C010CBSMsg.AGNT_AD_CD_ERR, "E3");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"agnt_ad_cd_err:E3");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：予約適用年月日がnullでない
		if(!inCBSMsg.isNull(EKK0061C010CBSMsg.RSV_APLY_YMD)){
			//過去日判定処理(契約)の戻り値がfalseと等しい ：正常
			if(!(JKKModelCommon.isPastDateTKCK(inCBSMsg, inContext , "rsv_aply_ymd", "0" ) == false)){
				inCBSMsg.set(EKK0061C010CBSMsg.RSV_APLY_YMD_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"rsv_aply_ymd_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：代理店適用終了年月日がnullでない
		if(!inCBSMsg.isNull(EKK0061C010CBSMsg.AGNT_TENDYMD)){
			//過去日判定処理(契約)の戻り値がfalseと等しい ：正常
			if(!(JKKModelCommon.isPastDateTKCK(inCBSMsg, inContext , "agnt_tendymd", "0" ) == false)){
				inCBSMsg.set(EKK0061C010CBSMsg.AGNT_TENDYMD_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"agnt_tendymd_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：予約適用年月日がnullでない かつ 代理店適用終了年月日がnullでない
		if(!inCBSMsg.isNull(EKK0061C010CBSMsg.RSV_APLY_YMD) && !inCBSMsg.isNull(EKK0061C010CBSMsg.AGNT_TENDYMD)){
			//代理店適用終了年月日がテンプレート項目(予約適用年月日)より小さい ：エラー
			if( comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.AGNT_TENDYMD),inCBSMsg.getObject(EKK0061C010CBSMsg.RSV_APLY_YMD),"10","1") ){
				inCBSMsg.set(EKK0061C010CBSMsg.AGNT_TENDYMD_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"agnt_tendymd_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：フロントログイン制御コードが固定値(1)と等しい または フロントログイン制御コードが固定値(2)と等しい
		if( comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.FRNT_LOGIN_CTRL_CD),"1","20","1")  ||  comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.FRNT_LOGIN_CTRL_CD),"2","20","1") ){
			//フロント画面表示用取扱コード名がnull ：エラー
			if(inCBSMsg.isNull(EKK0061C010CBSMsg.FRNT_SCREEN_DSP_TRAT_CD_NM)){
				inCBSMsg.set(EKK0061C010CBSMsg.FRNT_SCREEN_DSP_TRAT_CD_NM_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"frnt_screen_dsp_trat_cd_nm_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：フロントログイン制御コードが固定値(3)と等しい または フロントログイン制御コードが固定値(4)と等しい
		if( comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.FRNT_LOGIN_CTRL_CD),"3","20","1")  ||  comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.FRNT_LOGIN_CTRL_CD),"4","20","1") ){
			//ユーザーIDがnull ：エラー
			if(inCBSMsg.isNull(EKK0061C010CBSMsg.USER_ID)){
				inCBSMsg.set(EKK0061C010CBSMsg.USER_ID_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"user_id_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：インセンティブ支払発生コードが固定値(00)と等しい
		if( comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.INCNTV_PAY_HASSEI_CD),"00","20","1") ){
			//インセンティブ支払先コード1がnullでない ：エラー
			if(!inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_1)){
				inCBSMsg.set(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_1_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"incntv_pay_sk_cd_1_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：インセンティブ支払先コード1がnull
		if(inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_1)){
			//インセンティブ支払先コード2がnullでない ：エラー
			if(!inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_2)){
				inCBSMsg.set(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_2_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"incntv_pay_sk_cd_2_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：代理店中分類名がnull
		if(inCBSMsg.isNull(EKK0061C010CBSMsg.AGNT_CBRI_NM)){
			//代理店小分類名がnullでない ：エラー
			if(!inCBSMsg.isNull(EKK0061C010CBSMsg.AGNT_SBRI_NM)){
				inCBSMsg.set(EKK0061C010CBSMsg.AGNT_SBRI_NM_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"agnt_sbri_nm_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：インセンティブ支払発生コードが固定値(00)と等しい
		if( comparison(inCBSMsg.getObject(EKK0061C010CBSMsg.INCNTV_PAY_HASSEI_CD),"00","20","1") ){
			//インセンティブ支払先グループコードがnullでない ：エラー
			if(!inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SK_GRP_CD)){
				inCBSMsg.set(EKK0061C010CBSMsg.INCNTV_PAY_SK_GRP_CD_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"incntv_pay_sk_grp_cd_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：インセンティブ支払先コード1がnullでない
		if(!inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_1)){
			//インセンティブ支払所管組織コードがnull ：エラー
			if(inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SHKN_ORG_CD)){
				inCBSMsg.set(EKK0061C010CBSMsg.INCNTV_PAY_SHKN_ORG_CD_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"incntv_pay_shkn_org_cd_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：インセンティブ支払先コード1がnull
		if(inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_1)){
			//インセンティブ支払所管組織コードがnullでない ：エラー
			if(!inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SHKN_ORG_CD)){
				inCBSMsg.set(EKK0061C010CBSMsg.INCNTV_PAY_SHKN_ORG_CD_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"incntv_pay_shkn_org_cd_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：インセンティブ支払先コード1がnullでない
		if(!inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_1)){
			//契約申込所管組織コードがnull ：エラー
			if(inCBSMsg.isNull(EKK0061C010CBSMsg.KEI_MKM_SHKN_ORG_CD)){
				inCBSMsg.set(EKK0061C010CBSMsg.KEI_MKM_SHKN_ORG_CD_ERR, "E1");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"kei_mkm_shkn_org_cd_err:E1");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：インセンティブ支払先コード1がnull
		if(inCBSMsg.isNull(EKK0061C010CBSMsg.INCNTV_PAY_SK_CD_1)){
			//契約申込所管組織コードがnullでない ：エラー
			if(!inCBSMsg.isNull(EKK0061C010CBSMsg.KEI_MKM_SHKN_ORG_CD)){
				inCBSMsg.set(EKK0061C010CBSMsg.KEI_MKM_SHKN_ORG_CD_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"kei_mkm_shkn_org_cd_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}


		JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"invoke#End");

		//チェック結果によりステータスを設定する
		if (stRet > inCBSMsg.getInt(EKK0061C010CBSMsg.STATUS)) {
			inCBSMsg.set(EKK0061C010CBSMsg.STATUS,stRet);
		}
	}

	/**
	 * 比較処理
	 * 
	 * @param left_arg 		比較値（左辺）
	 * @param right_arg 	比較値（右辺）
	 * @param enzan_arg 	比較演算子
	 * @param checkType 	比較形式
	 */
	private boolean comparison(Object left_arg, Object right_arg, String enzan_arg, String checkType)
	{

		boolean booRet = true;

		String leftStr = new String();
		String rightStr = new String();

		if ( left_arg != null ){
			leftStr = left_arg.toString();
		}
		if ( right_arg != null ){
			rightStr = right_arg.toString();
		}

		// 文字比較
		if ( "1".equals(checkType) ) {

			//より小さい
			if ( "10".equals(enzan_arg) || "40".equals(enzan_arg) || "41".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) < 0)){
					return true;
				}else{
					return false;
				}
			//以下
			} else if ( "11".equals(enzan_arg) || "50".equals(enzan_arg) || "51".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) <= 0)){
					return true;
				}else{
					return false;
				}
			//等しい
			} else if ( "20".equals(enzan_arg) || "60".equals(enzan_arg) || "61".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) == 0)){
					return true;
				}else{
					return false;
				}
			//等しくない
			} else if ( "21".equals(enzan_arg) || "70".equals(enzan_arg) || "71".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) != 0)){
					return true;
				}else{
					return false;
				}
			//以上
			} else if ( "30".equals(enzan_arg) || "80".equals(enzan_arg) || "81".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) >= 0)){
					return true;
				}else{
					return false;
				}
			//より大きい
			} else if ( "31".equals(enzan_arg) || "90".equals(enzan_arg) || "91".equals(enzan_arg) ) {
				if( (leftStr.compareTo(rightStr) > 0)){
					return true;
				}else{
					return false;
				}
			//該当無し
			} else {
				return false;
			}

		//数値比較
		} else if ( "2".equals(checkType) ) {

			try{
				Long l_left_arg = new Long(leftStr);
				Long l_right_arg = new Long(rightStr);

				//より小さい
				if ( "10".equals(enzan_arg) || "40".equals(enzan_arg) || "41".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) < 0)){
						return true;
					}else{
						return false;
					}
				//以下
				} else if ( "11".equals(enzan_arg) || "50".equals(enzan_arg) || "51".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) <= 0)){
						return true;
					}else{
						return false;
					}
				//等しい
				} else if ( "20".equals(enzan_arg) || "60".equals(enzan_arg) || "61".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) == 0)){
						return true;
					}else{
						return false;
					}
				//等しくない
				} else if ( "21".equals(enzan_arg) || "70".equals(enzan_arg) || "71".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) != 0)){
						return true;
					}else{
						return false;
					}
				//以上
				} else if ( "30".equals(enzan_arg) || "80".equals(enzan_arg) || "81".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) >= 0)){
						return true;
					}else{
						return false;
					}
				//より大きい
				} else if ( "31".equals(enzan_arg) || "90".equals(enzan_arg) || "91".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) > 0)){
						return true;
					}else{
						return false;
					}
				//該当無し
				} else {
					return false;
				}
			}catch(NumberFormatException e){
				return false;
			}

		//精度比較
		} else if ( "3".equals(checkType) ) {

			try{
				Double l_left_arg = new Double(leftStr);
				Double l_right_arg = new Double(rightStr);
				
				//より小さい
				if ( "10".equals(enzan_arg) || "40".equals(enzan_arg) || "41".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) < 0)){
						return true;
					}else{
						return false;
					}
				//以下
				} else if ( "11".equals(enzan_arg) || "50".equals(enzan_arg) || "51".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) <= 0)){
						return true;
					}else{
						return false;
					}
				//等しい
				} else if ( "20".equals(enzan_arg) || "60".equals(enzan_arg) || "61".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) == 0)){
						return true;
					}else{
						return false;
					}
				//等しくない
				} else if ( "21".equals(enzan_arg) || "70".equals(enzan_arg) || "71".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) != 0)){
						return true;
					}else{
						return false;
					}
				//以上
				} else if ( "30".equals(enzan_arg) || "80".equals(enzan_arg) || "81".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) >= 0)){
						return true;
					}else{
						return false;
					}
				//より大きい
				} else if ( "31".equals(enzan_arg) || "90".equals(enzan_arg) || "91".equals(enzan_arg) ) {
					if( (l_left_arg.compareTo(l_right_arg) > 0)){
						return true;
					}else{
						return false;
					}
				//該当無し
				} else {
					return false;
				}
			}catch(NumberFormatException e){
				return false;
			}
		}

		return booRet;

	}

}
