/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JSYejbEDK0301B040TKCK
*	ソースファイル名：JSYejbEDK0301B040TKCK.java
*	作成者			：EK909139
*	日付			：2012年05月09日
*＜機能概要＞
*	返品データ一覧照会の単関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ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.EDK0301B040CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0301B040CBSMsg1List;

/**
 * <HR>
 * 返品データ一覧照会CBSMsgの単関連チェック用クラス｡ <p>
 * 
 * 以下の機能をサポートする。
 * <ul>
 * <li>返品データ一覧照会CBSMsgの単関連をチェックする。
 * </ul>
 * <p>
 * <HR>
 * <p>
 */ 
public class JSYejbEDK0301B040TKCK implements TankanrenCheckHandler {

	/**
	 * JSYejbEDK0301B040TKCK単関連をチェックする。<br>
	 * 
	 * JSYejbEDK0301B040TKCK単関連をチェックする。
	 * <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チェック
		CAANMsg[] l_edk0301b040cbsmsg1list = new CAANMsg[]{};
		if(!inCBSMsg.isNull(EDK0301B040CBSMsg.EDK0301B040CBSMSG1LIST)){
			l_edk0301b040cbsmsg1list = inCBSMsg.getCAANMsgList(EDK0301B040CBSMsg.EDK0301B040CBSMSG1LIST);
		}


		//(((((((((((((ＫＥＹ＿返品抽出条件コードがnull かつ ＫＥＹ＿倉庫コードがnull) かつ ＫＥＹ＿返品種別コードがnull) かつ ＫＥＹ＿サービス契約番号がnull) かつ ＫＥＹ＿案件番号がnull) かつ ＫＥＹ＿宅内機器型式コードがnull) かつ ＫＥＹ＿機器製造番号がnull) かつ ＫＥＹ＿宅内機器種別コードがnull) かつ ＫＥＹ＿返品日ＦＲＯＭがnull) かつ ＫＥＹ＿返品日ＴＯがnull) かつ ＫＥＹ＿承認日ＦＲＯＭがnull) かつ ＫＥＹ＿承認日ＴＯがnull) かつ ＫＥＹ＿取消日ＦＲＯＭがnull) かつ ＫＥＹ＿取消日ＴＯがnull) かつ ＫＥＹ＿商品状態コードがnull ：エラー
		if((((((((((((((inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_CHSHT_JOKEN_CD) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_SOKO_CD)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_SBT_CD)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_SVC_KEI_NO)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_ANKEN_NO)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_TAKNKIKI_MODEL_CD)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_KIKI_SEIZO_NO)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_TKKIKI_SBT_CD)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_UK_YMD_FROM)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_UK_YMD_TO)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_FROM)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_TO)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_CL_YMD_FROM)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_CL_YMD_TO)) && inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_GDS_STAT_CD)){
			inCBSMsg.set(EDK0301B040CBSMsg.KEY_HMPIN_CHSHT_JOKEN_CD_ERR, "E2");
			JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_hmpin_chsht_joken_cd_err:E2");
			stRet = StatusCodes.ITEM_RELATION_ERR;
		}

		//チェック条件：ＫＥＹ＿返品日ＦＲＯＭがnullでない かつ ＫＥＹ＿返品日ＴＯがnullでない
		if(!inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_UK_YMD_FROM) && !inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_UK_YMD_TO)){
			//ＫＥＹ＿返品日ＦＲＯＭがテンプレート項目(ＫＥＹ＿返品日ＴＯ)より大きい ：エラー
			if( comparison(inCBSMsg.getObject(EDK0301B040CBSMsg.KEY_HMPIN_UK_YMD_FROM),inCBSMsg.getObject(EDK0301B040CBSMsg.KEY_HMPIN_UK_YMD_TO),"31","1") ){
				inCBSMsg.set(EDK0301B040CBSMsg.KEY_HMPIN_UK_YMD_FROM_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_hmpin_uk_ymd_from_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：ＫＥＹ＿承認日ＦＲＯＭがnullでない かつ ＫＥＹ＿承認日ＴＯがnullでない
		if(!inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_FROM) && !inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_TO)){
			//ＫＥＹ＿承認日ＦＲＯＭがテンプレート項目(ＫＥＹ＿承認日ＴＯ)より大きい ：エラー
			if( comparison(inCBSMsg.getObject(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_FROM),inCBSMsg.getObject(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_TO),"31","1") ){
				inCBSMsg.set(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_SHONIN_YMD_FROM_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_hmpin_kiki_shonin_ymd_from_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}

		//チェック条件：ＫＥＹ＿取消日ＦＲＯＭがnullでない かつ ＫＥＹ＿取消日ＴＯがnullでない
		if(!inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_CL_YMD_FROM) && !inCBSMsg.isNull(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_CL_YMD_TO)){
			//ＫＥＹ＿取消日ＦＲＯＭがテンプレート項目(ＫＥＹ＿取消日ＴＯ)より大きい ：エラー
			if( comparison(inCBSMsg.getObject(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_CL_YMD_FROM),inCBSMsg.getObject(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_CL_YMD_TO),"31","1") ){
				inCBSMsg.set(EDK0301B040CBSMsg.KEY_HMPIN_KIKI_CL_YMD_FROM_ERR, "E2");
				JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"key_hmpin_kiki_cl_ymd_from_err:E2");
				stRet = StatusCodes.ITEM_RELATION_ERR;
			}
		}


		JSYejbLog.println(JSYejbLog.DEBUG,this.getClass(),"invoke#End");

		//チェック結果によりステータスを設定する
		if (stRet > inCBSMsg.getInt(EDK0301B040CBSMsg.STATUS)) {
			inCBSMsg.set(EDK0301B040CBSMsg.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;

	}

}
