/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：契約管理
 *   モジュール名    ：JKKSV003108ReqChk
 *   ソースファイル名：JKKSV003108ReqChk.java
 *   作成者          ：富士通
 *   日付            ：
 *＜機能概要＞
 *   マルチセッション情報登録時のSODCCのReqChkクラス
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00                 FJ）富士通  新規作成
 *   v1.01.00    2012/04/17   FJ）富士通  ST2-2012-0000488の横展開対応
 *
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.common.JCCBPCommon;
import com.fujitsu.futurity.bp.custom.constant.KKSV0031_KKSV0031OP;
import com.fujitsu.futurity.bp.custom.constant.KKSV0031_KKSV0031OP_RECCHK;
import com.fujitsu.futurity.bp.x21.bpm.common.AbstractCustomReqChk;
import com.fujitsu.futurity.bp.x21.bpm.common.IConditionValue;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.reqchk.exception.ReqChkException;
import com.fujitsu.futurity.bp.x21.values.MessageID;
import com.fujitsu.futurity.common.JSYLogBase;
import com.fujitsu.futurity.common.JSYbpmLog;

import eo.common.util.JPCDateChecker;

public class JKKSV003108ReqChk extends AbstractCustomReqChk {

	/**
	 * カスタム実行判定処理を実装するメソッド
	 */
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp,
			IConditionValue conditionvalue) throws ReqChkException {

		String use_staymd = null;
		HashMap<String,Object> parentMap = null;
		
		try {
			// チェック条件項目マップから必要な情報を取り出す
			parentMap = (HashMap<String,Object>)irp.getData(KKSV0031_KKSV0031OP.RECCHK);
			use_staymd = (String)parentMap.get(KKSV0031_KKSV0031OP_RECCHK.USE_STAYMD); // 利用開始日（画面投入）

			// TODO （暫定）未来日での「異動予約→SOD登録」は行わない
			// 利用開始日（画面投入）と運用日付を比較（trueなら未来日）
			boolean flg = JPCDateChecker.isFutureDate(use_staymd,  JCCBPCommon.getOpeDate(null), "0");
			
			if (!flg) {
				/* ++++++++++ v1.01.00 追加開始 ++++++++++ */
				// SODCCへの引継データの取得
				HashMap<String, Object> sodCCMap = (HashMap<String, Object>) irp.getData("KKSV003108CC");
				try 
				{
					String dynamicIPFl = (String)parentMap.get("dynamicIP_fl");
					if (dynamicIPFl != null && "1".equals(dynamicIPFl))
					{
						ArrayList <HashMap<String, Object>> trgtDataList 
						= (ArrayList <HashMap<String, Object>>) sodCCMap.get("trgt_data_list");
						HashMap<String, Object> trgtDataListElement = trgtDataList.get(0);
						// オプションサービス契約情報の取得
						HashMap<String, Object> opsvkeiInfo 
						= (HashMap<String, Object>) trgtDataListElement.get("opsvkei_info");

						// Work項目の取得
						Map<Object, Object> mappingWorkAreaMap = irp.getMappingWorkArea();
						HashMap<String, Object> workMap = (HashMap<String, Object>) mappingWorkAreaMap.get("WORK");
						// オプションサービス契約番号の取得
						String opSvcKeiNo = (String) workMap.get("op_svc_kei_no");
						// オプションサービスの世代登録年月日時分秒を取得
						String kk0351GeneAddDtm = (String)workMap.get("kk0351_gene_add_dtm");

						// SODCC引継項目へのオプションサービス契約番号と世代登録年月日時分秒の設定
						opsvkeiInfo.put("chaf_opsvkei_no", opSvcKeiNo);					// オプションサービス契約番号
						opsvkeiInfo.put("chaf_opsvkei_gene_add_dtm", kk0351GeneAddDtm);	// オプションサービス契約世代年月日時分秒
					} 

				} catch (RequestParameterException e) {

				}
				JSYbpmLog.println(JSYLogBase.Message_Dump, this.getClass(), sodCCMap , MessageID.DEB_X21_DEBUG_MSG,  new String[]{"### オブジェクト", "SODCC引継情報"}, " ###");
				/* ++++++++++ v1.02.00 追加終了 ++++++++++ */
				return true;
			}

			return false;
			
		} catch (RequestParameterException e) {
			
			return false;
		}
	}
}
