package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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;

public class JDKDKSV005901ReqChk extends AbstractCustomReqChk
{

	/** SCタイトル */
	private static final String DKSV005901SC = "DKSV005901SC";
	/** 入荷状況一覧照会明細 */
	private static final String EDK0241B020CBSMsg1List = "EDK0241B020CBSMsg1List";
	/** 数量 */
	private static final String CNT = "cnt";
	/** 入荷種別 */
	private static final String NYUKA_SBT = "nyuka_sbt";
	/** 入荷種別フラグ（入荷） */
	private static final String NYUKA_SBT_FLG_NYUKA = "0";
	/** 入荷種別フラグ（発注外入荷） */
	private static final String NYUKA_SBT_FLG_HATTCHUGAI_NYUKA = "1";
	/** 発注数量 */
	private static final String HATTCHU_CNT = "hattchu_cnt";
	/** 入荷数量 */
	private static final String NYUKA_CNT = "nyuka_cnt";

	@Override
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp,
			IConditionValue conditionvalue) throws ReqChkException
	{
		HashMap parentMap = null;
		long cnt = 0;
		String nyukaSbt = NYUKA_SBT_FLG_NYUKA;
		long nyukaCntSum = 0;
		long hattchuCnt = 0;
		List list = new ArrayList();
		// SCマップから必要な情報を取り出す
		try
		{
			parentMap = (HashMap)irp.getData(DKSV005901SC);
			cnt = Long.valueOf((String)parentMap.get(CNT));
			nyukaSbt = (String)parentMap.get(NYUKA_SBT);
			list = (ArrayList)parentMap.get(EDK0241B020CBSMsg1List);
			for (int i = 0; i < list.size(); i++)
			{
				HashMap map = (HashMap)list.get(i);
				if (i == 0)
				{
					hattchuCnt = Long.valueOf((String)map.get(HATTCHU_CNT));
				}
				long nyukaCnt = Long.valueOf((String)map.get(NYUKA_CNT));
				nyukaCntSum += nyukaCnt;
			}
		}
		catch (RequestParameterException eRpe)
		{
			return false;
		}
		return (NYUKA_SBT_FLG_HATTCHUGAI_NYUKA.equals(nyukaSbt) && list.size() == 0) || ((cnt + nyukaCntSum) <= hattchuCnt);
	}

}
