/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム共通（共通（マスタ））
*   モジュール名    ：ZMW12201SFLogic
*   ソースファイル名：ZMW12201SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年03月26日
*＜機能概要＞
*   業務個別設定組織検索のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v3.00       2012/03/26   FJ) 北島    新規作成
*   v3.00		2012/03/26   FJ) 北島	【SGY-2012-000006】統合認証対応
*   v5.00       2013/03/08   FJ) 岩元   【TAI-2013-0000012】画面設計規約対応
*
**********************************************************************/

package eo.web.webview.ZMW12201SF;

import java.util.HashMap;

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.common.util.JPCUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.ZMW00601SF.ZMW00601SFConst;
import eo.web.webview.ZMW12201SF.ZMW12201SFConst;
import eo.web.webview.common.JCCScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JZMScreenConst;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.ZMSV0096_ZMSV0096OPDBMapper;
import eo.web.webview.mapping.ZMSV0098_ZMSV0098OPDBMapper;

/**
 * 業務個別設定組織検索一覧照会のビューロジックです。
 * @author FJ
 *
 */
@SuppressWarnings("serial")
public class ZMW12201SFLogic extends JCCWebBusinessLogic
{
	
	/** 最大表示件数 */
	private static final String ZMW12201_MAX_SHOW_CNT = "ZMW12201_MAX_SHOW_CNT";
	
	/**
	 * 初期表示処理を行います。<br>
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 予期せぬエラー
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess[] paramBean = {bean};
		
		// 明細表示フラグを"false"(非表示)を設定
		bean.sendMessageBoolean(ZMW12201SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// 設定ボタン表示フラグを"false"(非表示)を設定
		bean.sendMessageBoolean(ZMW12201SFConst.SET_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
		
		// セッション情報取得
		HashMap<String, Object> searchInfo = JZMWebCommon.getScreenInfo(this);
		
		String wkkbtOrgCd = (String)searchInfo.get(ZMW12201SFConst.WKKBT_ORG_CD);
		JZMWebCommon.setSendMessageString(bean, ZMW12201SFConst.DSP_WKKBT_ORG_CD, wkkbtOrgCd);
		
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV98);
		
		// マッピングクラスのインスタンスを生成
		ZMSV0098_ZMSV0098OPDBMapper mapper = new ZMSV0098_ZMSV0098OPDBMapper();
		
		//マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		
		//マッピング処理（上り）
		mapper.setZMSV009801SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		if(dataMap.containsKey(JZMWebConst.SC9801))
		{
			
			//権限適用組織種別コードを取得
			String authorityAplyOrgSbtCd = (String)searchInfo.get(ZMW12201SFConst.AUTHORITY_APLY_ORG_SBT_CD);
			HashMap<String, Object> inDataMap = (HashMap<String, Object>)dataMap.get(JZMWebConst.SC9801);
			inDataMap.put(ZMW12201SFConst.AUTHORITY_APLY_ORG_SBT_CD, authorityAplyOrgSbtCd);
		}
		
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);
		
		// マッピングクラスの呼び出し
		mapper.getZMSV009801SC(paramBean, outputMap);
		
		// 遷移先画面ID、名称を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW12201);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW12201);

		return true;
	}
	
	/**
	 * 検索ボタン押下処理を行います。<br>
	 * 
	 * @return boolean 処理結果
	 * @exception Exception 予期せぬエラー
	 */
	public boolean search() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ページング情報の初期化
		JZMWebCommon.clearPageLinkInfo(this, this.getGamenId());
		
		// 画面に入力された値を取得
		// 表示用適用開始年月日を取得
		String tstaymd = JPCUtilCommon.concatYmd(
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_STA_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_STA_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_STA_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 表示用適用終了年月日を取得
		String tendymd = JPCUtilCommon.concatYmd(
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_END_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_END_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_END_DAY, X31CWebConst.DATABEAN_GET_VALUE));
				
		// サービスフォームBeanの設定
		// 業務個別設定組織コード（表示用）→業務個別設定組織コード
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.WKKBT_ORG_CD, ZMW12201SFConst.DSP_WKKBT_ORG_CD);
		
		// 業務個別設定組織名（表示用）→業務個別設定組織名
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.WKKBT_ORG_NM, ZMW12201SFConst.DSP_WKKBT_ORG_NM);

		// 適用開始年（表示用）→適用開始年
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_STA_YEAR, ZMW12201SFConst.DSP_APLY_PRD_STA_YEAR);
		
		// 適用開始月（表示用）→適用開始月
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_STA_MON, ZMW12201SFConst.DSP_APLY_PRD_STA_MON);
		
		// 適用開始日（表示用）→適用開始日
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_STA_DAY, ZMW12201SFConst.DSP_APLY_PRD_STA_DAY);
		
		// 適用開始年月日（表示用）→適用開始年月日
		bean.sendMessageString(ZMW12201SFConst.APLY_PRD_STA, X31CWebConst.DATABEAN_SET_VALUE, JZMWebCommon.nullToBlank(tstaymd));

		// 適用終了年（表示用）→適用終了年
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_END_YEAR, ZMW12201SFConst.DSP_APLY_PRD_END_YEAR);
		
		// 適用終了月（表示用）→適用終了月
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_END_MON, ZMW12201SFConst.DSP_APLY_PRD_END_MON);
		
		// 適用終了日（表示用）→適用終了日
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_END_DAY, ZMW12201SFConst.DSP_APLY_PRD_END_DAY);		
		
		// 適用終了年月日（表示用）→適用終了年月日
		bean.sendMessageString(ZMW12201SFConst.APLY_PRD_END, X31CWebConst.DATABEAN_SET_VALUE, JZMWebCommon.nullToBlank(tendymd));
		
		// サービス呼出処理
		callSearchSrv(bean, paramBean);
		
		// 遷移先画面ID、名称を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW12201);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME	, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW12201);
		
		
		return true;
	}
	
	/**
	 * ページング押下処理を行います。<br>
	 * 
	 * @return boolean 処理結果
	 * @exception Exception 予期せぬエラー
	 */
	public boolean paging() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};
		
		// 画面に入力された値を取得
		// 表示用適用開始年月日を取得
		String tstaymd = JPCUtilCommon.concatYmd(
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_STA_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_STA_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_STA_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 表示用適用終了年月日を取得
		String tendymd = JPCUtilCommon.concatYmd(
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_END_YEAR, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_END_MON, X31CWebConst.DATABEAN_GET_VALUE),
				bean.sendMessageString(ZMW12201SFConst.DSP_APLY_PRD_END_DAY, X31CWebConst.DATABEAN_GET_VALUE));
				
		// サービスフォームBeanの設定
		// 業務個別設定組織コード（表示用）→業務個別設定組織コード
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.WKKBT_ORG_CD, ZMW12201SFConst.DSP_WKKBT_ORG_CD);
		
		// 業務個別設定組織名（表示用）→業務個別設定組織名
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.WKKBT_ORG_NM, ZMW12201SFConst.DSP_WKKBT_ORG_NM);

		// 適用開始年（表示用）→適用開始年
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_STA_YEAR, ZMW12201SFConst.DSP_APLY_PRD_STA_YEAR);
		
		// 適用開始月（表示用）→適用開始月
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_STA_MON, ZMW12201SFConst.DSP_APLY_PRD_STA_MON);
		
		// 適用開始日（表示用）→適用開始日
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_STA_DAY, ZMW12201SFConst.DSP_APLY_PRD_STA_DAY);
		
		// 適用開始年月日（表示用）→適用開始年月日
		bean.sendMessageString(ZMW12201SFConst.APLY_PRD_STA, X31CWebConst.DATABEAN_SET_VALUE, JZMWebCommon.nullToBlank(tstaymd));

		// 適用終了年（表示用）→適用終了年
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_END_YEAR, ZMW12201SFConst.DSP_APLY_PRD_END_YEAR);
		
		// 適用終了月（表示用）→適用終了月
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_END_MON, ZMW12201SFConst.DSP_APLY_PRD_END_MON);
		
		// 適用終了日（表示用）→適用終了日
		JZMWebCommon.shiftBeanValue(bean, ZMW12201SFConst.APLY_PRD_END_DAY, ZMW12201SFConst.DSP_APLY_PRD_END_DAY);		
		
		// 適用終了年月日（表示用）→適用終了年月日
		bean.sendMessageString(ZMW12201SFConst.APLY_PRD_END, X31CWebConst.DATABEAN_SET_VALUE, JZMWebCommon.nullToBlank(tendymd));
		
		// 先頭行の選択を選択状態にする
		bean.sendMessageString(ZMW12201SFConst.CHOICE_ROW, X31CWebConst.DATABEAN_SET_VALUE, JZMWebConst.ZERO);
		
		
		// サービス呼出処理
		callSearchSrv(bean, paramBean);
		
		// 遷移先画面ID、名称を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW12201);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME	, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW12201);
		
		
		return true;
	}
	
	/**
	 * 検索サービスを呼び出します。
	 * @param bean
	 * @param paramBean
	 */
	private void callSearchSrv(X31SDataBeanAccess bean, X31SDataBeanAccess[] paramBean)
	{
		
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV96);
		
		// マッピングクラスのインスタンスを生成
		ZMSV0096_ZMSV0096OPDBMapper mapper = new ZMSV0096_ZMSV0096OPDBMapper();
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		
		mapper.setZMSV009601CC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		// ページング情報の設定
		JZMWebCommon.upmapperPageLinkInfo(this, JZMWebConst.CC9601, dataMap);
		
		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);
		
		// 一覧の初期化
		bean.getDataBeanArray(ZMW12201SFConst.EZM0151B011CBSMSG1LIST).clearArray();
		
		// マッピングクラスの呼び出し
		mapper.getZMSV009601CC(paramBean, outputMap);
		
		// 明細表示フラグに"false"(非表示)を設定
		bean.sendMessageBoolean(ZMW12201SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
		
		// 設定ボタン表示フラグに"false"(非表示)を設定
		bean.sendMessageBoolean(ZMW12201SFConst.SET_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
		
		// 検索エラーフラグの取得
		String searchErrFlg = JZMWebCommon.getSearchErrFlg(JZMWebConst.CC9601, outputMap);
		
		if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			
			// 検索結果が0件の場合、エラーメッセージを表示
			if(!JZMWebCommon.hasMsgList(commoninfoBean))
			{
				JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
			}
		}
		else if(JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			
			// 検索結果が最大検索件数を超える場合、エラーメッセージを表示
			if(!JZMWebCommon.hasMsgList(commoninfoBean))
			{
				String[] item = {JZMWebCommon.getSearchConst(ZMW12201_MAX_SHOW_CNT)};
				JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0340__I, item);
			}
		}
		else
		{
			if(JPCModelConstant.SEARCH_ERR_FLG_NODATA.equals(searchErrFlg))
			{
				
				// 表示ページに該当するデータが存在しない場合、エラーメッセージを表示
				if(!JZMWebCommon.hasMsgList(commoninfoBean))
				{
					JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0350__I);
				}
			}
			
			// 検索エラーがない場合、明細表示フラグに"true"(表示)を設定
			bean.sendMessageBoolean(ZMW12201SFConst.DTL_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
			
			// 先頭行の選択を選択状態にする
			bean.sendMessageString(ZMW12201SFConst.CHOICE_ROW, X31CWebConst.DATABEAN_SET_VALUE, JZMWebConst.ZERO);
			
			// 背景色のスタイルクラスを設定
			JZMWebCommon.setRowStyleClass(bean, ZMW12201SFConst.EZM0151B011CBSMSG1LIST, ZMW12201SFConst.ROW_STYLE_CLASS_02);

			// 設定ボタン表示フラグに"true"を設定(設定ボタン表示)
			bean.sendMessageBoolean(ZMW12201SFConst.SET_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
		}
		
		// ページング情報の設定
		JZMWebCommon.downmapperPageLinkInfo(this, JZMWebConst.CC9601, outputMap);
		
		// 検索のコマンドIDを設定する。
		JZMWebCommon.setSearchCommand(this, JZMWebConst.EVENT_ID_PAGING);
	}
	
	/**
	 * 設定ボタン押下処理を行います。<br>
	 * 
	 * @return boolean 処理結果
	 * @exception Exception 予期せぬエラー
	 */
	public boolean set() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// 戻り先IDの取得
		String screenId = JZMWebCommon.getScreenId(this);
		
		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();
		
		String index = JZMWebCommon.getSendMessageString(bean, ZMW12201SFConst.CHOICE_ROW);
		String choiceWkkbtOrgCd = JZMWebCommon.getBeanArrayValue(
				bean,
				ZMW12201SFConst.EZM0151B011CBSMSG1LIST,
				Integer.parseInt(index),
				ZMW12201SFConst.WKKBT_ORG_CD_02);
		String choiceWkkbtOrgNm = JZMWebCommon.getBeanArrayValue(
				bean,
				ZMW12201SFConst.EZM0151B011CBSMSG1LIST,
				Integer.parseInt(index),
				ZMW12201SFConst.WKKBT_ORG_NM_02);
		
		// 返却用mapに選択行データをセット
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		
		if(JZMScreenConst.SCREEN_ID_ZMW00601.equals(screenId))
		{
			dataMap.put(ZMW00601SFConst.DSP_WKKBT_ORG_CD, choiceWkkbtOrgCd);
		}
		else
		{
			dataMap.put(ZMW12201SFConst.WKKBT_ORG_CD_02, choiceWkkbtOrgCd);
			dataMap.put(ZMW12201SFConst.WKKBT_ORG_NM_02, choiceWkkbtOrgNm);
		}
		
		JCCWebCommon.setScreenInfo(this, screenId, dataMap);
		
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_ID_CCW00105);
		
		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_NAME_CCW00105);

		return true;
	}
}
