/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：DKW02702SFLogic
*   ソースファイル名：DKW02702SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年10月20日
*＜機能概要＞
*   強制機器出荷登録のビューロジックです
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/10/20   FJ）        新規作成
*
**********************************************************************/
package eo.web.webview.DKW02702SF;

import static eo.web.webview.common.JDKWebCommon.appendPrefix;
import static eo.web.webview.common.JDKWebCommon.getBean;
import static eo.web.webview.common.JDKWebCommon.getData;
import static eo.web.webview.common.JDKWebCommon.storePullDown;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCMessageCache;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JDKScreenConst;
import eo.web.webview.mapping.DKSV0107_DKSV0107OPDBMapper;
import eo.web.webview.mapping.DKSV0108_DKSV0108OPDBMapper;

/**
 * 強制機器出荷登録を処理するロジッククラスです。
 * <BR>
 * @author 富士通
 */
public class DKW02702SFLogic extends JCCWebBusinessLogic
{
	/** シリアルバージョン */
	private static final long serialVersionUID = 1L;
	
	/** メッセージ（強制機器出荷登録確認画面用） */
	private static final String MSG_KYOSEI_KKSHKA_TOROKU = "強制機器出荷の登録";
	
	/** メッセージ（強制機器出荷登録完了画面用） */
	private static final String MSG_KYOSEI_KKSHKA_KANRYO = "強制機器出荷登録";
	
	/**
	 * サービスフォームBeanの初期化処理を行います
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {serviceFormBean};

		// セッションからのデータ取得
		HashMap<String, Object> map = JCCWebCommon.getScreenInfo(this);
		String keyKktkSvcKeiNo = (String)map.get(DKW02702SFConst.KEY_KKTK_SVC_KEI_NO);
		String kikiChgNo = (String)map.get(DKW02702SFConst.KEY_KIKI_CHG_NO);
		String svcKeiNo = (String)map.get(DKW02702SFConst.SVC_KEI_NO);
		String custNm = (String)map.get(DKW02702SFConst.CUST_NM);
		String keiSvcNm = (String)map.get(DKW02702SFConst.KEI_SVC_NM);
		String keiStatNm = (String)map.get(DKW02702SFConst.KEI_STAT_NM);
		String modelNo = (String)map.get(DKW02702SFConst.MODEL_NO);
		String sokoCd = (String)map.get(DKW02702SFConst.SOKO_CD);
		String sokoNm = (String)map.get(DKW02702SFConst.SOKO_NM);
		String shelfNm = (String)map.get(DKW02702SFConst.SHELF_NM);

		// 運用日付を取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);

		paramBean[0].sendMessageString(DKW02702SFConst.KEY_KKTK_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, keyKktkSvcKeiNo);
		paramBean[0].sendMessageString(DKW02702SFConst.KEY_KIKI_CHG_NO, X31CWebConst.DATABEAN_SET_VALUE, kikiChgNo);
		paramBean[0].sendMessageString(DKW02702SFConst.KEY_UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
		paramBean[0].sendMessageString(DKW02702SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svcKeiNo);
		paramBean[0].sendMessageString(DKW02702SFConst.CUST_NM, X31CWebConst.DATABEAN_SET_VALUE, custNm);
		paramBean[0].sendMessageString(DKW02702SFConst.KEI_SVC_NM, X31CWebConst.DATABEAN_SET_VALUE, keiSvcNm);
		paramBean[0].sendMessageString(DKW02702SFConst.KEI_STAT_NM, X31CWebConst.DATABEAN_SET_VALUE, keiStatNm);
		paramBean[0].sendMessageString(DKW02702SFConst.MODEL_NO, X31CWebConst.DATABEAN_SET_VALUE, modelNo);
		paramBean[0].sendMessageString(DKW02702SFConst.SOKO_CD, X31CWebConst.DATABEAN_SET_VALUE, sokoCd);
		paramBean[0].sendMessageString(DKW02702SFConst.SOKO_NM, X31CWebConst.DATABEAN_SET_VALUE, sokoNm);
		paramBean[0].sendMessageString(DKW02702SFConst.SHELF_NM, X31CWebConst.DATABEAN_SET_VALUE, shelfNm);

		// サービスの呼び出しを行う
		if (!putServiceDKSV0107(paramBean))
		{
			return true;
		}
		
		appendPrefix(getBean(this, DKW02702SFConst.TTM_INFO), DKW02702SFConst.TTM_NM_LIST_05);
		
		// 建物プルダウンの初期表示設定
		String ttmCd = getData(this, DKW02702SFConst.SOKO_CD);
		if (!"".equals(ttmCd))
		{
			long index = getCdIndex(DKW02702SFConst.TTM_INFO, DKW02702SFConst.TTM_CD_LIST_05, ttmCd);
			X31SDataBeanAccess sokoInfoList = getServiceFormBean().getDataBeanArray(DKW02702SFConst.TTM_INFO).getDataBean(0);
			sokoInfoList.sendMessageString(DKW02702SFConst.TTM_INDEX_05, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(index));
		}
		// 宅内機器セット品型コード存在時、メッセージ表示
		String taknkikiSethinModelCd = getData(this, DKW02702SFConst.KYOSEI_KIKI_SHKA_DTL_INFO, DKW02702SFConst.TAKNKIKI_SETHIN_MODEL_CD_01);
		if (!"".equals(taknkikiSethinModelCd))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB8170__I);
		}
		
		// 画面遷移処理
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW02702, JDKScreenConst.SCREEN_NAME_DKW02702);
		
		return true;
	}

	/**
	 * サービス（DKSV0107）の呼び出しを行います
	 * <br>
	 * @param paramBean パラメータとなるBean情報
	 * @return 成否
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0107(X31SDataBeanAccess[] paramBean) throws Exception
	{
		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0107");
		
		// マッピングクラスのインスタンスを生成
		DKSV0107_DKSV0107OPDBMapper mapper = new DKSV0107_DKSV0107OPDBMapper();
		HashMap<String, String> dataMap = new HashMap<String, String>();
		
		mapper.setDKSV010701SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setDKSV010702SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		mapper.setDKSV010703SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		// 検索結果格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// 検索処理呼出
		X31CMessageResult msgResult = invokeService(paramMap, dataMap, outputMap);
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}
		
		// データ未取得時
		HashMap<String, Object> map = (HashMap<String, Object>)outputMap.get("DKSV010701SC");
		int cnt = ((ArrayList)map.get("EKK0341B505CBSMsg1List")).size();
		if (0 == cnt)
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);
			
			// 一覧画面に強制転送
			setNextScreen(JDKScreenConst.SCREEN_ID_DKW02701, JDKScreenConst.SCREEN_NAME_DKW02701);
			setTransferPageId(JDKScreenConst.SCREEN_ID_DKW02701 + "0PJP");
			return false;
		}
		
		JCCMessageCache.setMessageCache();
		mapper.getDKSV010701SC(paramBean, outputMap);
		mapper.getDKSV010702SC(paramBean, outputMap);
		mapper.getDKSV010703SC(paramBean, outputMap);
		
		return true;
	}

	/**
	 * 確認ボタン押下処理
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean confirmCreate() throws Exception
	{
		
		// 建物
		storePullDown(this, DKW02702SFConst.TTM_INFO,
							DKW02702SFConst.TTM_INDEX_05,
							DKW02702SFConst.TTM_CD_05,
							DKW02702SFConst.TTM_NM_05,
							DKW02702SFConst.TTM_CD_LIST_05,
							DKW02702SFConst.TTM_NM_LIST_05);
		
		// サービスインターフェイス機能呼び出し
		String  func_code = JPCModelConstant.FUNC_CD_2;
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {serviceFormBean};
		
		// サービスの呼び出しを行う
		if (!putServiceDKSV0108(paramBean, func_code))
		{
			return false;
		}
		
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String [] { MSG_KYOSEI_KKSHKA_TOROKU});
		
		// 遷移先画面IDの設定
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW02703, JDKScreenConst.SCREEN_NAME_DKW02703);
		
		return true;
	}
	
	/**
	 * サービス（DKSV0108）の呼び出しを行います
	 * <br>
	 * @param paramBean パラメータとなるBean情報
	 * @param func_code 機能コード
	 * @return 成否
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	private boolean putServiceDKSV0108(X31SDataBeanAccess[] paramBean, String func_code) throws Exception
	{
		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0108");
		
		// マッピングクラスのインスタンスを生成
		DKSV0108_DKSV0108OPDBMapper mapper = new DKSV0108_DKSV0108OPDBMapper();
		HashMap<String, String> dataMap = new HashMap<String, String>();
		
		mapper.setDKSV010801CC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		mapper.setDKSV010802CC(paramBean, dataMap, func_code);
		mapper.setDKSV010803SC(paramBean, dataMap, func_code);
		
		// 更新結果格納用マップ
		HashMap<String, String> outputMap = new HashMap<String, String>();
		
		// 更新処理呼出
		X31CMessageResult msgResult = invokeService(paramMap, dataMap, outputMap);
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 戻るボタン押下処理
	 * @author 富士通
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean returnList() throws Exception
	{
		// 遷移先画面IDの設定
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW02701, JDKScreenConst.SCREEN_NAME_DKW02701);
		return true;
	}
	
	/**
	 * 画面遷移先を設定します
	 * <br>
	 * @param nextScreenId 遷移先画面ID
	 * @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);
	}
	
	/**
	 * 確定ボタン押下処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	public boolean fix() throws Exception
	{
		
		// サービスインターフェイス機能呼び出し
		String  func_code = JPCModelConstant.FUNC_CD_1;
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {serviceFormBean};
		
		// サービスの呼び出しを行う
		if (!putServiceDKSV0108(paramBean, func_code))
		{
			setNextScreen(JDKScreenConst.SCREEN_ID_DKW02702, JDKScreenConst.SCREEN_NAME_DKW02702);
			return true;
		}
		
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0380__I, new String [] { MSG_KYOSEI_KKSHKA_KANRYO});
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW02704, JDKScreenConst.SCREEN_NAME_DKW02704);
		return true;
	}
	
	/**
	 * 修正ボタン押下処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	public boolean modify() throws Exception
	{
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW02702, JDKScreenConst.SCREEN_NAME_DKW02702);
		return true;
	}
	
	/**
	 * 指定されたドロップダウンリストのコードにてインデックス値を取得します
	 * @param info ドロップダウンリスト情報
	 * @param cdList ドロップダウンリスト情報内のコードリスト
	 * @param cd コード
	 * @return コードに対するインデックス値
	 */
	private int getCdIndex(String info, String cdList, String cd)
	{
		X31SDataBeanAccess list = getBean(this, info);
		int count = (Integer)list.sendMessage(cdList, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0 ; i < count ; i++)
		{
			if (list.sendMessageString(cdList, X31CWebConst.DATABEAN_GET_VALUE, i).equals(cd))
			{
				return i;
			}
		}
		return -1;
	}

	/**
	 * 完了ボタン押下処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	public boolean complete() throws Exception
	{
		// 遷移先画面IDの設定
		setNextScreen(JDKScreenConst.SCREEN_ID_DKW02701, JDKScreenConst.SCREEN_NAME_DKW02701);
		return true;
	}
}
