/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：DKW01406SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年09月14日
*＜機能概要＞
*   数量指定詳細画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/14   FJ）        新規作成
*
**********************************************************************/
package eo.web.webview.DKW01406SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.web.webview.DKW01406SF.DKW01406SFConst.*;
import static eo.web.webview.common.JDKScreenConst.*;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SWebLog;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JDKCommonUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JDKWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.DKSV0055_DKSV0055OPDBMapper;

/**
 * DKW01406のビューロジック
 * <BR>
 * @author 富士通
 */
public class DKW01406SFLogic extends JCCWebBusinessLogic
{

	/**
	 * 生成シリアルバージョンID
	 */
	private static final long serialVersionUID = 1L;

	/** VARB */
	private static final String L_PAG = "L_PAG";

	/**
	 * 初期表示処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 画面情報を取得し、サービスフォームBeanに設定
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 運用日付を設定
		serviceFormBean.sendMessageString(UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, 
											JCCWebCommon.getOpeDate(this, null));

		// 一覧を初期化
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();
		// ページング情報を初期化
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW01406);

		// サービスの呼び出しを行う
		if (!putServiceDKSV0055(serviceFormBean))
		{
			// データが無かった場合、エラーメッセージを設定
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);
			// 各詳細画面に強制転送
			String screenId = JCCWebCommon.getScreenId(this);
			setNextScreen(screenId, JZMWebConst.BLANK);
			setTransferPageId(screenId + JZMWebConst.PJP);
			return true;
		}

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG);

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 遷移先画面IDの設定
		setNextScreen(SCREEN_ID_DKW01406, SCREEN_NAME_DKW01406);

		return true;
	}

	/**
	 * ページングを処理します。
	 * <br>
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean paging() throws Exception
	{
		// 画面情報を取得し、サービスフォームBeanに設定
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 一覧を初期化
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();

		// サービスの呼び出しを行う
		if (!putServiceDKSV0055(serviceFormBean))
		{
			// データが無かった場合、エラーメッセージを設定
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);
			// 各詳細画面に強制転送
			String screenId = JCCWebCommon.getScreenId(this);
			setNextScreen(screenId, JZMWebConst.BLANK);
			setTransferPageId(screenId + JZMWebConst.PJP);
			return true;
		}

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG);

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 遷移先画面IDの設定
		setNextScreen(SCREEN_ID_DKW01406, SCREEN_NAME_DKW01406);

		return true;
	}

	/**
	 * 戻るボタン押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean returnDetail() throws Exception
	{
		// 画面遷移処理
		String screenId = JCCWebCommon.getScreenId(this);
		String screenNm = "";

		if (SCREEN_ID_DKW01102.equals(screenId))
		{
			// 出荷完了
			screenNm = SCREEN_NAME_DKW01102;
		}
		else if (SCREEN_ID_DKW01302.equals(screenId))
		{
			// 入荷完了
			screenNm = SCREEN_NAME_DKW01302;
		}
		else if (SCREEN_ID_DKW01402.equals(screenId))
		{
			// 照会
			screenNm = SCREEN_NAME_DKW01402;
		}

		JCCWebCommon.setScreenId(this, screenId, SCREEN_ID_DKW01406);
		setNextScreen(screenId, screenNm);

		return true;
	}

	/**
	 * サービス（DKSV0055）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @return 成否
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0055(X31SDataBeanAccess sFormBean) throws Exception
	{
		X31SDataBeanAccess[] paramBean = {sFormBean};

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0055");

		// マッピングクラスのインスタンスを生成
		DKSV0055_DKSV0055OPDBMapper mapper = new DKSV0055_DKSV0055OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		// 棚移動種別区分
		String mvSbt = sFormBean.sendMessageString(MV_SBT, X31CWebConst.DATABEAN_GET_VALUE);
		String funcCd = JPCModelConstant.FUNC_CD_1;
		if (!JDKCommonUtil.isNull(mvSbt) && "2".equals(mvSbt))
		{
			// 予備機器配送データ時は機能コード２を設定
			funcCd = JPCModelConstant.FUNC_CD_2;
		}

		// 数量指定詳細情報
		mapper.setDKSV005501SC(paramBean, dataMap, funcCd);

		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, "DKSV005501SC", dataMap, SCREEN_ID_DKW01406);

		// 検索結果格納用マップ
		HashMap outputMap = new HashMap();

		// 検索処理呼出
		invokeService(paramMap, dataMap, outputMap);

		// データ未取得時
		HashMap<String, Object> map = (HashMap<String, Object>)outputMap.get("DKSV005501SC");
		int cnt = ((ArrayList)map.get("EDK0111B027CBSMsg1List")).size();
		if (0 == cnt)
		{
			return false;
		}

		mapper.getDKSV005501SC(paramBean, outputMap);

		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, "DKSV005501SC", outputMap, SCREEN_ID_DKW01406);

		return true;
	}

	/**
	 * 画面の表示設定を行います。
	 * <br>
	 * @param serviceFormBean 設定する画面のServiceFormBean
	 * @throws UnsupportedEncodingException 例外
	 */
	private void setGamen(X31SDataBeanAccess serviceFormBean) throws UnsupportedEncodingException
	{
		// 基本情報部の設定
		X31SDataBeanAccess[] paramBean = {serviceFormBean};
		X31SDataBeanAccessArray shosaiList =  paramBean[0].getDataBeanArray(SHOSAI_LIST);
		X31SDataBeanAccess sbean = shosaiList.getDataBean(0);

		// 移動元
		String mtNm = "";
		String mtSokoNm = sbean.sendMessageString(MV_MT_SOKO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String mtKojiNm = sbean.sendMessageString(MV_MT_KOJI_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String mtOfcNm  = sbean.sendMessageString(MV_MT_OFFICE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JDKCommonUtil.isNull(mtSokoNm))
		{
			mtNm = mtSokoNm;
		}
		else if (!JDKCommonUtil.isNull(mtKojiNm))
		{
			mtNm = mtKojiNm;
		}
		else if (!JDKCommonUtil.isNull(mtOfcNm))
		{
			mtNm = mtOfcNm;
		}
		sbean.sendMessageString(MV_MT_TTM_NM_01, X31CWebConst.DATABEAN_SET_VALUE, mtNm);

		// 移動先
		String skNm = "";
		String skSokoNm = sbean.sendMessageString(MV_SK_SOKO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String skKojiNm = sbean.sendMessageString(MV_SK_KOJI_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String skOfcNm  = sbean.sendMessageString(MV_SK_OFFICE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JDKCommonUtil.isNull(skSokoNm))
		{
			skNm = skSokoNm;
		}
		else if (!JDKCommonUtil.isNull(skKojiNm))
		{
			skNm = skKojiNm;
		}
		else if (!JDKCommonUtil.isNull(skOfcNm))
		{
			skNm = skOfcNm;
		}
		sbean.sendMessageString(MV_SK_TTM_NM_01, X31CWebConst.DATABEAN_SET_VALUE, skNm);

		// 名細部の設定
		setList(paramBean[0], serviceFormBean);
	}

	/**
	 * リストの表示設定を行います。
	 * <br>
	 * @param paramBean 設定する一覧のBean情報
	 * @param serviceFormBean 設定する画面のServiceFormBean
	 * @throws UnsupportedEncodingException 例外
	 */
	private void setList(X31SDataBeanAccess paramBean, X31SDataBeanAccess serviceFormBean) throws UnsupportedEncodingException
	{
		X31SDataBeanAccessArray shosaiList = paramBean.getDataBeanArray(SHOSAI_LIST);

		for (int i = 0; i < shosaiList.getCount(); i++)
		{
			X31SDataBeanAccess subbean = shosaiList.getDataBean(i);
			// 背景色の設定
			if (i % 2 == 1)
			{
				subbean.sendMessageString(L_COLOR_01, X31CWebConst.DATABEAN_SET_VALUE, "even");
			}
			else
			{
				subbean.sendMessageString(L_COLOR_01, X31CWebConst.DATABEAN_SET_VALUE, "odd");
			}

			// 項番の設定
			subbean.sendMessageString(L_NO_01, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(i + 1));

			// 型番号、商品名の設定
			String mdlNo = "";
			String shohinNm = "";
			String takunaiCd = subbean.sendMessageString(L_TKKIKI_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String setCd     = subbean.sendMessageString(L_TKKIKI_SETHIN_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String huzokuCd  = subbean.sendMessageString(L_HUZOKUHIN_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			if (!JDKCommonUtil.isNull(takunaiCd))
			{
				mdlNo = takunaiCd;
				shohinNm = subbean.sendMessageString(L_TKKIKI_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			else if (!JDKCommonUtil.isNull(setCd))
			{
				mdlNo = setCd;
				shohinNm = subbean.sendMessageString(L_TKKIKI_SETHIN_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			else if (!JDKCommonUtil.isNull(huzokuCd))
			{
				mdlNo = huzokuCd;
				shohinNm = subbean.sendMessageString(L_HUZOKUHIN_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			subbean.sendMessageString(L_MDL_NO_01, X31CWebConst.DATABEAN_SET_VALUE, mdlNo);

			// 商品名 20桁
			subbean.sendMessageString(L_SHOHIN_NM_01, X31CWebConst.DATABEAN_SET_VALUE, 
										JDKWebCommon.substr(shohinNm, 0, 20));
			subbean.sendMessageString(L_SHOHIN_NM_DISP_01, 
										X31CWebConst.DATABEAN_SET_VALUE, shohinNm);

			// 製造番号
			String seizoNo = "";
			String kikiSeizoNm = subbean.sendMessageString(L_KIKI_SEIZO_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
			String setSeizoNm = subbean.sendMessageString(L_TKKIKI_SETHIN_SEIZO_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
			// 存在する名称を設定する
			if (!JDKCommonUtil.isNull(kikiSeizoNm))
			{
				seizoNo = kikiSeizoNm;
			}
			else if (!JDKCommonUtil.isNull(setSeizoNm))
			{
				seizoNo = setSeizoNm;
			}
			subbean.sendMessageString(L_SEIZO_NO_01, X31CWebConst.DATABEAN_SET_VALUE, seizoNo);

			// 移動数 ※固定１
			subbean.sendMessageString(L_MV_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, "1");
		}
	}

	/**
	 * 画面遷移先を設定します。
	 * @param nextScreenId 遷移先画面ＩＤ
	 * @param nextScreenName 遷移先画面名
	 */
	private void setNextScreen(String nextScreenId, String nextScreenName)
	{
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, 
											X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, 
											X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);

		DEBUG_LOG.debug(String.format("遷移先 CD：%s NM：%s", nextScreenId, nextScreenName));
	}
}
