/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKSV063907ReqChk
*	ソースファイル名：JKKSV063907ReqChk.java
*	作成者			：FJ）近藤
*	日付			：2012年08月11日
*＜機能概要＞
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00		2012/08/11	FJ）近藤	新規作成
*	v4.01		2012/10/03	FJ）近藤	一覧照会取得結果0件対応
*	v4.02		2013/02/16	FJ）砂川	【ST2-2013-0000687】タブレットの配送状態を確認する対応
*	v6.00		2013/12/22	FJ）		【OM-2013-0004495 】割賦更新判定追加
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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;

/**
 * BPから呼び出すサービスIFの
 * 単項目チェック・単関連チェックを実施する。
 * 
 * @author FJ
 */
public class JKKSV063907ReqChk extends AbstractCustomReqChk
{
	/** サービス契約ステータス（サービス提供中） */
	private static final String SVC_KEI_STAT_100 = "100";
	/** 機器提供サービス契約ステータス（解約済み） */
	private static final String KIKI_TK_SVC_KEI_STAT_910 = "910";
	/** 機器提供サービス契約ステータス（キャンセル済み） */
	private static final String KIKI_TK_SVC_KEI_STAT_920 = "920";
	/** 進捗ステータス(オプション設定完了) */
	public static final String PRG_STAT_CD_5102 = "5102";
	/** 宅内機器型式コード(タブレット) */
	public static final String TAKNKIKI_MODEL_TABLET = "P0";
	// ▼▼▼ ST2-2013-0000687 Add Start    ▼▼▼
	/** 配送返品状態コード(配送済かつ未返品) */
	private static final String HAISO_HMPIN_STAT_CD_0 = "0";
	// ▲▲▲ ST2-2013-0000687 Add End      ▲▲▲
	
	/**
	 * 実行判定クラス。
     * <BR>
     * @param irp リクエストパラメータ
     * @param conditionvalue 判定条件
	 * @return boolean
	 * @throws ReqChkException 
	 */
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp,
			IConditionValue conditionvalue) throws ReqChkException
	{
		
		try
		{
			HashMap kksv063901Map = (HashMap)irp.getData("KKSV063901SC");
			HashMap kksv063902Map = (HashMap)irp.getData("KKSV063902SC");
			HashMap kksv063910Map = (HashMap)irp.getData("KKSV063910SC");
			// ▼▼▼ ST2-2013-0000687 Add Start    ▼▼▼
			HashMap kksv063907Map = (HashMap)irp.getData("KKSV063907SC");
			// ▲▲▲ ST2-2013-0000687 Add End      ▲▲▲
// v6.00 ADD START
			HashMap IsSserviceOpUpdCC = (HashMap)irp.getData("IsSserviceOpUpdCC");
// v6.00 ADD END
			
			
			if (kksv063901Map == null || "".equals(kksv063901Map)
					|| kksv063902Map == null || "".equals(kksv063902Map))
			{
				return false;
			}

			//サービス契約ステータスの取得
			String svc_kei_stat = (String)kksv063901Map.get("svc_kei_stat");
			
			// 判定処理
			if (svc_kei_stat == null || "".equals(svc_kei_stat) 
					|| !SVC_KEI_STAT_100.equals(svc_kei_stat))
			{
				return false;
			}
			
			
// v6.00 ADD START
			
			// 割賦契約無　又は　割賦全てが締結済
			if (IsSserviceOpUpdCC != null &&
					 (IsSserviceOpUpdCC.get("EKK2541B004CBSMsg1List") != null && !"".equals(IsSserviceOpUpdCC.get("EKK2541B004CBSMsg1List")))) {
				return true;
			}
// v6.00 ADD END
			
			// 機器提供サービス契約一覧照会マップ取得
			List kksv063902list = ((List)kksv063902Map.get("EKK0341B008CBSMsg1List"));
			
			// 2012/10/03 MOD START
//			if (kksv063902list == null || "".equals(kksv063902list))
			if (kksv063902list.size() == 0)
			// 2012/10/03 MOD END
			{
				return false;
			}
			
			String kiki_seizo_no = null;
			String taknkiki_sbt_cd = null;
			String kktk_svc_kei_stat = null;
			// ▼▼▼ ST2-2013-0000687 Add Start    ▼▼▼
			boolean kiki_cfm_flg = false;
			String haiso_hmpin_stat_cd = null;
			// ▲▲▲ ST2-2013-0000687 Add End      ▲▲▲
			
			for (int i = 0; i < kksv063902list.size(); i++)
			{
				kiki_seizo_no = (String) ((Map)kksv063902list.get(i)).get("kiki_seizo_no");
				taknkiki_sbt_cd = (String) ((Map)kksv063902list.get(i)).get("taknkiki_sbt_cd");
				kktk_svc_kei_stat = (String) ((Map)kksv063902list.get(i)).get("kktk_svc_kei_stat");
				
				// 判定処理
				if (TAKNKIKI_MODEL_TABLET.equals(taknkiki_sbt_cd))
				{
					if (kktk_svc_kei_stat != null && !"".equals(kktk_svc_kei_stat)
							&& !KIKI_TK_SVC_KEI_STAT_910.equals(kktk_svc_kei_stat) 
							&& !KIKI_TK_SVC_KEI_STAT_920.equals(kktk_svc_kei_stat))
					{
						if (kiki_seizo_no != null && !"".equals(kiki_seizo_no))
						{
							// ▼▼▼ ST2-2013-0000687 Add Start    ▼▼▼
							// 機器製造番号が設定された機器がある場合、機器配送状態の確認に移行する
							kiki_cfm_flg = true;
							break;
							// ▲▲▲ ST2-2013-0000687 Add End      ▲▲▲
							// ▼▼▼ ST2-2013-0000687 Delete Start ▼▼▼
//							kksv063910Map.put("prg_stat", PRG_STAT_CD_5102);
//							return true;
							// ▲▲▲ ST2-2013-0000687 Delete End   ▲▲▲
						}
					}
				}
			}
			// ▼▼▼ ST2-2013-0000687 Add Start    ▼▼▼
			if(kiki_cfm_flg)
			{
				if(null != kksv063907Map.get("haiso_hmpin_stat_cd") && !("".equals(kksv063907Map.get("haiso_hmpin_stat_cd"))))
				{
					haiso_hmpin_stat_cd = (String)kksv063907Map.get("haiso_hmpin_stat_cd");
					
					if(HAISO_HMPIN_STAT_CD_0.equals(haiso_hmpin_stat_cd))
					{
						// 配送返品状態コードが"配送済かつ未返品"の場合、オプションサービス契約<ISP>開始を実行する
						kksv063910Map.put("prg_stat", PRG_STAT_CD_5102);
						return true;
					}
				}
			}
			// ▲▲▲ ST2-2013-0000687 Add End      ▲▲▲
		}
		catch (RequestParameterException e)
		{
			return false;
		}
		return false;
	}
}
