/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：物流管理システム
*   モジュール名    ：DKW03002SFLogic
*   ソースファイル名：DKW03002SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年09月27日
*＜機能概要＞
*   出荷状況詳細画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/27   FJ          新規作成
*
**********************************************************************/
package eo.web.webview.DKW03002SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
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 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.DKSV0099_DKSV0099OPDBMapper;

/**
 * 出荷状況詳細画面のビューロジック処理を行います。
 * @author user
 */
public class DKW03002SFLogic extends JCCWebBusinessLogic
{
	/**
	 * シリアルバージョンＩＤ
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 抽出条件：出荷完了エラーリスト
	 */
	private static final String SHKA_FIN_ERR_LIST = "005";

	/**
	 *  配送ステータス（受付済）
	 */
	private static final String HAISOSTAT_001 = "001";

	/**
	 *  配送ステータス（出荷済）
	 */
	private static final String HAISOSTAT_003 = "003";
	
	/**
	 *  配送ステータス（完了済）
	 */
	private static final String HAISOSTAT_004 = "004";

	/**
	 *  配送区分（手渡し）
	 */
	private static final String HAISODIV_TEWATASHI = "01";

	/**
	 * 初期表示を処理します。
	 * <br>
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean init() throws Exception
	{
		// 画面情報を取得し、サービスフォームBeanに設定
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 運用日付を取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);

		// 運用日付を設定
		serviceFormBean.sendMessageString(DKW03002SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);

		// サービスの呼び出しを行う
		if (!putServiceDKSV0099(serviceFormBean))
		{
			// データが無かった場合、エラーメッセージを設定
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);
			// 一覧画面に強制転送
			setNextScreen(SCREEN_ID_DKW03001, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW03001 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW03001, SCREEN_ID_DKW03002);
			return true;
		}

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 遷移先画面IDの設定
		setNextScreen(SCREEN_ID_DKW03002, SCREEN_NAME_DKW03002);

		return true;
	}

	/**
	 * 戻るボタン押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean returnList() throws Exception
	{
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW03001, SCREEN_ID_DKW03002);
		setNextScreen(SCREEN_ID_DKW03001, SCREEN_NAME_DKW03001);

		return true;
	}

	/**
	 * サービス（DKSV0099）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @return 成否
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0099(X31SDataBeanAccess sFormBean)
	{
		X31SDataBeanAccess[] paramBean = {sFormBean};

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0099");

		// マッピングクラスのインスタンスを生成
		DKSV0099_DKSV0099OPDBMapper mapper = new DKSV0099_DKSV0099OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		String func_code = "";
		String chshtJoken = "";
		chshtJoken = sFormBean.sendMessageString(DKW03002SFConst.CHSHT_JOKEN, X31CWebConst.DATABEAN_GET_VALUE);
		// 機能コードを設定
		// 出荷完了エラーリストが選択された場合、2を設定
		if (SHKA_FIN_ERR_LIST.equals(chshtJoken))
		{
			func_code = JPCModelConstant.FUNC_CD_2;
		}
		// 上記以外の場合、1を設定
		else
		{
			func_code = JPCModelConstant.FUNC_CD_1;
		}

		mapper.setDKSV009901SC(paramBean, dataMap, func_code);

		// 検索結果格納用マップ
		HashMap outputMap = new HashMap();

		// 検索処理呼出
		invokeService(paramMap, dataMap, outputMap);

		// データ未取得時
		HashMap<String, Object> map = (HashMap<String, Object>)outputMap.get("DKSV009901SC");
		int cnt = ((ArrayList)map.get("EDK0011B040CBSMsg1List")).size();
		if (0 == cnt)
		{
			return false;
		}

		mapper.getDKSV009901SC(paramBean, outputMap);

		return true;
	}

	/**
	 * 画面遷移先を設定します。
	 * @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));
	}

	/**
	 * 画面の表示設定を行います。
	 * <br>
	 * @param paramBean 設定する画面のBean情報
	 */
	private void setGamen(X31SDataBeanAccess paramBean)
	{
		X31SDataBeanAccessArray shosaiList =  paramBean.getDataBeanArray(DKW03002SFConst.SHOSAI_LIST);
		X31SDataBeanAccess sFormBean = shosaiList.getDataBean(0);

		// 契約サービス
		String keiSvc = "";
		if (!JDKCommonUtil.isNull(sFormBean.sendMessageString(DKW03002SFConst.PRC_GRP_KEI_SVC_01, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			keiSvc = sFormBean.sendMessageString(DKW03002SFConst.PRC_GRP_KEI_SVC_01, X31CWebConst.DATABEAN_GET_VALUE);
		}
		else if (!JDKCommonUtil.isNull(sFormBean.sendMessageString(DKW03002SFConst.HOJIN_PRC_GRP_KEI_SVC_01, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			keiSvc = sFormBean.sendMessageString(DKW03002SFConst.HOJIN_PRC_GRP_KEI_SVC_01, X31CWebConst.DATABEAN_GET_VALUE);
		}
		sFormBean.sendMessageString(DKW03002SFConst.KEI_SVC_01, X31CWebConst.DATABEAN_SET_VALUE, keiSvc);

		String haisoStat = sFormBean.sendMessageString(DKW03002SFConst.HAISO_STAT_01, X31CWebConst.DATABEAN_GET_VALUE);
		String haisoDiv = sFormBean.sendMessageString(DKW03002SFConst.HAISO_DIV_01, X31CWebConst.DATABEAN_GET_VALUE);
		String pcd = "";
		String state = "";
		String city = "";
		String oaztsu = "";
		String azcho = "";
		String bnchigo = "";
		String adrttm = "";
		String adrrm = "";
		String name = "";
		String telno = "";
		// 配送ステータスが「受付済」の場合、または配送ステータスが「出荷済」かつ配送区分が「"01"：手渡し」の場合
		if ((HAISOSTAT_001.equals(haisoStat)) 
				|| ((HAISOSTAT_003.equals(haisoStat) || HAISOSTAT_004.equals(haisoStat)) && HAISODIV_TEWATASHI.equals(haisoDiv)))
		{
			pcd = sFormBean.sendMessageString(DKW03002SFConst.KIKI_PCD_01, X31CWebConst.DATABEAN_GET_VALUE);
			state = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_STATE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			city = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_CITY_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			oaztsu = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_OAZTSU_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			azcho = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_AZCHO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			bnchigo = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_BNCHIGO_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrttm = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_ADRTTM_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrrm = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);
			name = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			telno = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_TELNO_01, X31CWebConst.DATABEAN_GET_VALUE);
		}
		// 上記以外の場合
		else
		{
			pcd = sFormBean.sendMessageString(DKW03002SFConst.HAISO_PCD_01, X31CWebConst.DATABEAN_GET_VALUE);
			state = sFormBean.sendMessageString(DKW03002SFConst.HISOS_STATE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			city = sFormBean.sendMessageString(DKW03002SFConst.HISOS_CITY_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			oaztsu = sFormBean.sendMessageString(DKW03002SFConst.HISOS_OAZTSU_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			azcho = sFormBean.sendMessageString(DKW03002SFConst.HISOS_AZCHO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			bnchigo = sFormBean.sendMessageString(DKW03002SFConst.HISOS_BNCHIGO_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrttm = sFormBean.sendMessageString(DKW03002SFConst.HISOS_ADRTTM_01, X31CWebConst.DATABEAN_GET_VALUE);
			adrrm = sFormBean.sendMessageString(DKW03002SFConst.HISOS_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);
			name = sFormBean.sendMessageString(DKW03002SFConst.HISOS_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			telno = sFormBean.sendMessageString(DKW03002SFConst.HISOS_TELNO_01, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 「出荷先（配送先）」が取得できない場合
			if (name == null || name.equals("")) 
			{
				pcd = sFormBean.sendMessageString(DKW03002SFConst.KIKI_PCD_01, X31CWebConst.DATABEAN_GET_VALUE);
				state = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_STATE_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
				city = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_CITY_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
				oaztsu = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_OAZTSU_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
				azcho = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_AZCHO_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
				bnchigo = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_BNCHIGO_01, X31CWebConst.DATABEAN_GET_VALUE);
				adrttm = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_ADRTTM_01, X31CWebConst.DATABEAN_GET_VALUE);
				adrrm = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_ADRRM_01, X31CWebConst.DATABEAN_GET_VALUE);
				name = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
				telno = sFormBean.sendMessageString(DKW03002SFConst.KIKI_SOHUS_TELNO_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
		}
		String address = state + city + oaztsu + azcho + bnchigo + adrttm + adrrm;
		// 郵便番号
		sFormBean.sendMessageString(DKW03002SFConst.PCD_01, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.hyhunPcd(pcd));
		// 住所
		sFormBean.sendMessageString(DKW03002SFConst.ADDRESS_01, X31CWebConst.DATABEAN_SET_VALUE, address);
		// 氏名
		sFormBean.sendMessageString(DKW03002SFConst.NAME_01, X31CWebConst.DATABEAN_SET_VALUE, name);
		// 連絡先電話番号
		sFormBean.sendMessageString(DKW03002SFConst.TELNO_01, X31CWebConst.DATABEAN_SET_VALUE, telno);

		// 型番号
		String mdlNo = "";
		if (!JDKCommonUtil.isNull(sFormBean.sendMessageString(DKW03002SFConst.KIKI_MODEL_NO_01, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			mdlNo = sFormBean.sendMessageString(DKW03002SFConst.KIKI_MODEL_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		}
		else if (!JDKCommonUtil.isNull(sFormBean.sendMessageString(DKW03002SFConst.FZK_MODEL_NO_01, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			mdlNo = sFormBean.sendMessageString(DKW03002SFConst.FZK_MODEL_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		}
		else if (!JDKCommonUtil.isNull(sFormBean.sendMessageString(DKW03002SFConst.SET_MODEL_NO_01, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			mdlNo = sFormBean.sendMessageString(DKW03002SFConst.SET_MODEL_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
		}
		sFormBean.sendMessageString(DKW03002SFConst.MODEL_NO_01, X31CWebConst.DATABEAN_SET_VALUE, mdlNo);
	}
}
