/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：DKW01405SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年09月08日
*＜機能概要＞
*   棚移動指示基本情報詳細画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/08   FJ）        新規作成
*
**********************************************************************/
package eo.web.webview.DKW01405SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.web.webview.DKW01405SF.DKW01405SFConst.*;
import static eo.web.webview.common.JDKScreenConst.*;

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.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.DKSV0032_DKSV0032OPDBMapper;

/**
 * DKW01405のビューロジック
 * <BR>
 * @author 富士通
 */
public class DKW01405SFLogic extends JCCWebBusinessLogic
{

	/**
	 * 生成シリアルバージョンID
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 初期表示処理を行います。
	 * <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));

		// サービスの呼び出しを行う
		if (!putServiceDKSV0032(serviceFormBean))
		{
			// データが無かった場合、エラーメッセージを設定
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);
			// 各一覧画面に強制転送
			returnSearch();
			return true;
		}

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 遷移先画面IDの設定
		setNextScreen(SCREEN_ID_DKW01405, SCREEN_NAME_DKW01405);

		return true;
	}

	/**
	 * 戻るボタン押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean returnDetail() throws Exception
	{
		// 画面遷移処理
		String screenId = JCCWebCommon.getScreenId(this);
		String screenNm = "";

		// 承認
		if (SCREEN_ID_DKW00802.equals(screenId))
		{
			screenNm = SCREEN_NAME_DKW00802;
		}
		else 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_DKW01405);
		setNextScreen(screenId, screenNm);

		return true;
	}

	/**
	 * サービス（DKSV0032）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @return 成否
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0032(X31SDataBeanAccess sFormBean)
	{
		X31SDataBeanAccess[] paramBean = {sFormBean};

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0032");

		// マッピングクラスのインスタンスを生成
		DKSV0032_DKSV0032OPDBMapper mapper = new DKSV0032_DKSV0032OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		// 棚移動基本情報 ※機能コード１固定
		mapper.setDKSV003201SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップ
		HashMap outputMap = new HashMap();

		// 検索処理呼出
		invokeService(paramMap, dataMap, outputMap);

		// データ未取得時
		HashMap<String, Object> map = (HashMap<String, Object>)outputMap.get("DKSV003201SC");
		int cnt = ((ArrayList)map.get("EDK0111B028CBSMsg1List")).size();
		if (0 == cnt)
		{
			return false;
		}

		mapper.getDKSV003201SC(paramBean, outputMap);

		return true;
	}

	/**
	 * 画面の表示設定を行います。
	 * <br>
	 * @param paramBean 設定する画面のBean情報
	 */
	private void setGamen(X31SDataBeanAccess paramBean)
	{
		// 基本情報部の設定
		X31SDataBeanAccessArray kihonList =  paramBean.getDataBeanArray(KIHON_LIST);
		X31SDataBeanAccess sBean = kihonList.getDataBean(0);

		String mvSbt = sBean.sendMessageString(MV_SBT_01, X31CWebConst.DATABEAN_GET_VALUE);

		// 倉庫棚移動データの場合
		if ("1".equals(mvSbt))
		{
			setSokodna(sBean);
		}
		else
		{
			// 予備機器配送データの場合
			setYbkiki(sBean);
		}
	}

	/**
	 * 倉庫棚移動データ時の画面表示設定を行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 */
	private void setSokodna(X31SDataBeanAccess sFormBean)
	{
		String mtSokoNm = 
			sFormBean.sendMessageString(MV_MT_SOKO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String mtKojiNm = 
			sFormBean.sendMessageString(MV_MT_KOJI_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String mtOfcNm = 
			sFormBean.sendMessageString(MV_MT_OFFICE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String mtTtmNm = "";	// 移動元建物名
		String pcd = "";		// 郵便番号
		String state = "";		// 都道府県
		String city = "";		// 市区町村
		String oaztsu = "";		// 大字
		String azcho = "";		// 字丁目
		String bnchigo = "";	// 番地・号
		String adrttm = "";		// 建物
		String adrrm = "";		// 部屋番号
		String nm1 = "";		// 出荷先名１
		String telno = "";		// 電話番号

		// 倉庫の場合
		if (!JDKCommonUtil.isNull(mtSokoNm))
		{
			mtTtmNm = mtSokoNm;
			pcd = sFormBean.sendMessageString(SOKO_PCD_01, X31CWebConst.DATABEAN_GET_VALUE);
			state = sFormBean.sendMessageString(SOKO_STATE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			city = sFormBean.sendMessageString(SOKO_CITY_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			oaztsu = sFormBean.sendMessageString(SOKO_OAZTSU_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			azcho = sFormBean.sendMessageString(SOKO_AZCHO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			bnchigo = sFormBean.sendMessageString(SOKO_BNCHIGO_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrttm = sFormBean.sendMessageString(SOKO_ADRTTM_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrrm = sFormBean.sendMessageString(SOKO_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);
			nm1 = mtSokoNm;
			telno = sFormBean.sendMessageString(SOKO_TELNO_01, X31CWebConst.DATABEAN_GET_VALUE);
		}
		else if (!JDKCommonUtil.isNull(mtKojiNm))
		{
			// 工事会社の場合
			mtTtmNm = mtKojiNm;
			pcd = sFormBean.sendMessageString(KOJI_PCD_01, X31CWebConst.DATABEAN_GET_VALUE);
			state = sFormBean.sendMessageString(KOJI_STATE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			city = sFormBean.sendMessageString(KOJI_CITY_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			oaztsu = sFormBean.sendMessageString(KOJI_OAZTSU_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			azcho = sFormBean.sendMessageString(KOJI_AZCHO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			bnchigo = sFormBean.sendMessageString(KOJI_BNCHIGO_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrttm = sFormBean.sendMessageString(KOJI_ADRTTM_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrrm = sFormBean.sendMessageString(KOJI_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);
			nm1 = mtKojiNm;
			telno = sFormBean.sendMessageString(KOJI_TELNO_01, X31CWebConst.DATABEAN_GET_VALUE);
		}
		else if (!JDKCommonUtil.isNull(mtOfcNm))
		{
			// 預託先オフィスの場合
			mtTtmNm = mtOfcNm;
			pcd = sFormBean.sendMessageString(OFFICE_PCD_01, X31CWebConst.DATABEAN_GET_VALUE);
			state = sFormBean.sendMessageString(OFFICE_STATE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			city = sFormBean.sendMessageString(OFFICE_CITY_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			oaztsu = sFormBean.sendMessageString(OFFICE_OAZTSU_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			azcho = sFormBean.sendMessageString(OFFICE_AZCHO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			bnchigo = sFormBean.sendMessageString(OFFICE_BNCHIGO_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrttm = sFormBean.sendMessageString(OFFICE_ADRTTM_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrrm = sFormBean.sendMessageString(OFFICE_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);
			nm1 = mtOfcNm;
			telno = sFormBean.sendMessageString(OFFICE_TELNO_01, X31CWebConst.DATABEAN_GET_VALUE);
		}

		// ■移動元
		// 建物名
		sFormBean.sendMessageString(MV_MT_TTM_NM_01, X31CWebConst.DATABEAN_SET_VALUE, mtTtmNm);

		// ■移動先
		// 建物名
		sFormBean.sendMessageString(MV_SK_TTM_NM_01, X31CWebConst.DATABEAN_SET_VALUE, mtTtmNm);
		// 出荷先郵便番号（ハイフン付与）
		sFormBean.sendMessageString(PCD_01, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.hyhunPcd(pcd));
		// 出荷先住所（都道府県）
		sFormBean.sendMessageString(STATE_NM_01, X31CWebConst.DATABEAN_SET_VALUE, state);
		// 出荷先住所（市区町村）
		sFormBean.sendMessageString(CITY_NM_01, X31CWebConst.DATABEAN_SET_VALUE, city);
		// 出荷先住所（大字通称名）
		sFormBean.sendMessageString(OAZTSU_NM_01, X31CWebConst.DATABEAN_SET_VALUE, oaztsu);
		// 出荷先住所（字丁目）
		sFormBean.sendMessageString(AZCHO_NM_01, X31CWebConst.DATABEAN_SET_VALUE, azcho);
		// 出荷先住所（番地・号）
		sFormBean.sendMessageString(BNCHIGO_01, X31CWebConst.DATABEAN_SET_VALUE, bnchigo);
		// 出荷先住所（建物名）
		sFormBean.sendMessageString(ADRTTM_01, X31CWebConst.DATABEAN_SET_VALUE, adrttm);
		// 出荷先住所（部屋番号）
		sFormBean.sendMessageString(ADRRM_01, X31CWebConst.DATABEAN_SET_VALUE, adrrm);
		// 出荷先名１
		sFormBean.sendMessageString(NM_1_01, X31CWebConst.DATABEAN_SET_VALUE, nm1);
		// 出荷先電話番号
		sFormBean.sendMessageString(TELNO_01, X31CWebConst.DATABEAN_SET_VALUE, telno);
	}

	/**
	 * 予備機器配送データ時の画面表示設定を行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 */
	private void setYbkiki(X31SDataBeanAccess sFormBean)
	{
		String mtSokoNm = 
			sFormBean.sendMessageString(MV_MT_SOKO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String mtKojiNm = 
			sFormBean.sendMessageString(MV_MT_KOJI_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String mtOfcNm  = 
			sFormBean.sendMessageString(MV_MT_OFFICE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String skSokoNm = 
			sFormBean.sendMessageString(MV_SK_SOKO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String skKojiNm = 
			sFormBean.sendMessageString(MV_SK_KOJI_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String skOfcNm  = 
			sFormBean.sendMessageString(MV_SK_OFFICE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
		String mtTtmNm = "";	// 移動元建物名
		String skTtmNm = "";	// 移動先建物名

		// 倉庫の場合（移動元）
		if (!JDKCommonUtil.isNull(mtSokoNm))
		{
			mtTtmNm = mtSokoNm;
		}
		else if (!JDKCommonUtil.isNull(mtKojiNm))
		{
			// 工事会社の場合（移動元）
			mtTtmNm = mtKojiNm;
		}
		else if (!JDKCommonUtil.isNull(mtOfcNm))
		{
			// 預託先オフィスの場合（移動元）
			mtTtmNm = mtOfcNm;
		}

		// 倉庫の場合（移動先）
		if (!JDKCommonUtil.isNull(skSokoNm))
		{
			skTtmNm = skSokoNm;
		}
		else if (!JDKCommonUtil.isNull(skKojiNm))
		{
			// 工事会社の場合（移動先）
			skTtmNm = skKojiNm;
		}
		else if (!JDKCommonUtil.isNull(skOfcNm))
		{
			// 預託先オフィスの場合（移動先）
			skTtmNm = skOfcNm;
		}

		// ■移動元
		// 建物名
		sFormBean.sendMessageString(MV_MT_TTM_NM_01, X31CWebConst.DATABEAN_SET_VALUE, mtTtmNm);

		// ■移動先
		// 建物名
		sFormBean.sendMessageString(MV_SK_TTM_NM_01, X31CWebConst.DATABEAN_SET_VALUE, skTtmNm);
		// 出荷先郵便番号（ハイフン付与）
		sFormBean.sendMessageString(PCD_01, X31CWebConst.DATABEAN_SET_VALUE, 
									JPCUtilCommon.hyhunPcd(sFormBean.sendMessageString(YBKIKI_HISOS_PCD_01, X31CWebConst.DATABEAN_GET_VALUE)));
		// 出荷先住所（都道府県）
		sFormBean.sendMessageString(STATE_NM_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_STATE_NM_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 出荷先住所（市区町村）
		sFormBean.sendMessageString(CITY_NM_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_CITY_NM_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 出荷先住所（大字通称名）
		sFormBean.sendMessageString(OAZTSU_NM_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_OAZTSU_NM_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 出荷先住所（字丁目）
		sFormBean.sendMessageString(AZCHO_NM_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_AZCHO_NM_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 出荷先住所（番地・号）
		sFormBean.sendMessageString(BNCHIGO_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_BNCHIGO_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 出荷先住所（建物名）
		sFormBean.sendMessageString(ADRTTM_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_ADRTTM_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 出荷先住所（部屋番号）
		sFormBean.sendMessageString(ADRRM_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 出荷先名１
		sFormBean.sendMessageString(NM_1_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_NM_1_01, X31CWebConst.DATABEAN_GET_VALUE));
		// 出荷先電話番号
		sFormBean.sendMessageString(TELNO_01, X31CWebConst.DATABEAN_SET_VALUE, 
									sFormBean.sendMessageString(YBKIKI_HISOS_TELNO_01, X31CWebConst.DATABEAN_GET_VALUE));
	}

	/**
	 * 画面遷移先を設定します。
	 * @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));
	}

	/**
	 * 検索画面回帰処理
	 */
	public void returnSearch()
	{
		// 画面遷移処理
		String screenId = JCCWebCommon.getScreenId(this);
		String retScrId = "";

		// 承認
		if (SCREEN_ID_DKW00802.equals(screenId))
		{
			retScrId = SCREEN_ID_DKW00801;
		}
		else if (SCREEN_ID_DKW01102.equals(screenId))
		{
			// 出荷完了
			retScrId = SCREEN_ID_DKW01101;
		}
		else if (SCREEN_ID_DKW01302.equals(screenId))
		{
			// 入荷完了
			retScrId = SCREEN_ID_DKW01301;
		}
		else if (SCREEN_ID_DKW01402.equals(screenId))
		{
			// 照会
			retScrId = SCREEN_ID_DKW01401;
		}

		setNextScreen(retScrId, JZMWebConst.BLANK);
		setTransferPageId(retScrId + JZMWebConst.PJP);
	}
}
