/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：JDKCommon54CC.java
*   作成者          ：富士通
*   日付            ：2012年05月22日
*＜機能概要＞
*   在庫出荷出力許可更新CCクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/05/22   FJ          新規作成
*
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.fujitsu.futurity.bp.custom.constant.DKSV0154_DKSV0154OP_DKSV015401CC_updateOutputList.*;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;

/**
 * 在庫出荷出力許可更新CCクラスです。
 * @author 富士通
 */
public class JDKCommon55CC extends AbstractCommonComponent {
	
	private static final String DKSV015401CC = "DKSV015401CC";
	private static final String IDOMOTO_KRIPLACE_SKCD = "idomoto_kriplace_skcd";
	
	/**
	 * 在庫出荷出力許可更新を行います。
	 * @param handle セッションハンドル
	 * @param param パラメータ
	 * @param fixedText 定型文字
	 * @return パラメータ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updateOutput(SessionHandle handle, 
			IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		JDKStockMap stocks = null;

		Map dataMap = (Map)param.getData(DKSV015401CC);
		List<Map> dataList = (List)dataMap.get("updateOutputList");
		
		List<Map> args = new ArrayList<Map>();
		for (Map data : dataList) {
			Map arg = new HashMap();
			arg.put(KEY_KNRI_PLC_CD, (String)data.get(KEY_KNRI_PLC_CD));
			arg.put(KEY_KNRI_PLC_SLF_CD, (String)data.get(KEY_KNRI_PLC_SLF_CD));
			arg.put(KEY_TK_MDL_CD, (String)data.get(KEY_TK_MDL_CD));
			arg.put(IDOMOTO_KRIPLACE_SKCD, (String)data.get(IDOMOTO_KRIPLACE_SKCD));
			
			args.add(arg);
		}
		// 宅内機器物流在庫一意照会(EKKA0020005)を実行し、在庫情報を得る
		stocks = JDKBPCommon.getStockAmount(args, KEY_KNRI_PLC_CD, KEY_KNRI_PLC_SLF_CD, KEY_TK_MDL_CD, IDOMOTO_KRIPLACE_SKCD, handle, param);

		// 在庫情報が取得できないデータがある可能性があるため
		// 一旦すべて不可にしてから
		for (Map data : dataList) {
			data.put(OUTPUT, 0L);
		}
		
		// 在庫有の分だけ可にする
		for (Map data : dataList) {
			Integer moves = Integer.parseInt(data.get(COUNT).toString());
			String[] keies = new String [] {(String)data.get(KEY_KNRI_PLC_CD)
											, (String)data.get(KEY_KNRI_PLC_SLF_CD)
											, (String)data.get(KEY_TK_MDL_CD)
											, (String)data.get(IDOMOTO_KRIPLACE_SKCD)};
			
			stocks.decrease(moves, keies);
			data.put(OUTPUT, stocks.isNegative(keies) ? 0L : 1L);
		}
		

		return param;
	}

	
}
