/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CRW01201SFLogic
 *	ソースファイル名：CRW01201SFLogic.java
 *	作成者			：富士通
 *	日付			：2011年04月25日
 *＜機能概要＞
 *	問合せ対応メインビューロジック
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00
 *	ｖ8.00.00	2013/12/16	FJ)伊藤		ANK-1584-00-00  L2-MVNO(本体)
 * ｖ23.00.00	2015/12/03	FJ)山岡		ANK-2693-00-00  オーダリング対応(STEP2)
 *	v42.00.00	2019/03/29	FJ)三原		【ANK-3593-00-00】オペレータ支援対応に伴うeo顧客機能改修（お客さまカルテ）
 *	v42.00.01	2019/05/08	FJ)三原		【IT1-2019-0000046】対応履歴の実行ボタンでお客様カルテ画面が2重起動しない
 *	v42.00.02	2019/06/18	FJ)三原		【ANK-3593-01-00】カルテ画面２重起動抑止解除
 ********************************************************************************/

/**
 * <DL>
 * <DT>名前
 * <p>
 * <DT>説明: 
 * <DD>データの初期化.
 * <DD> generated by Web Client tool V01/L01.
 * </DL>
*/
package eo.web.webview.CRW01201SF;

import java.util.EventObject;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CID;
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.x33.X33SException;

import eo.common.constant.JCRStrConst;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.ODW00101SF.ODW00101SFConst;
import eo.web.webview.common.JCCAuthorityCtrlCache;
import eo.web.webview.common.JCRGetDataUtil;
import eo.web.webview.common.JCRScreenConst;
import eo.web.webview.common.JCRWebCommon;

/**
 * 問合せ対応メインビューロジック.<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class CRW01201SFLogic extends JCCWebBusinessLogic
{
	// ANK-3593-00-00 ADD START
	/**
	 * 置き換え文字列：ワンタイムパスワード
	 */
	private static final String REPLACE_ONET_PWD = "%ONET_PWD%";
	// ANK-3593-00-00 ADD END
	/**
	 * 親クラスX31BWebBusinessLogicのreceiveMessageWebを
	 * オーバーライドして自動生成されたメソッドです。
	 * @param arg0 (I) イベント情報
	 * @param arg1 (I) WebFWでは使用しません
	 * @param arg2 (I) WebFWでは使用しません
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws X33SException X33SException
	 */
	@Override
	protected boolean receiveMessageWeb(X31CID arg0, Object arg1,
			EventObject arg2) throws X33SException
	{
		return false;
	}

	/**
	 * 初期表示を行う。<br>
	 * <br>
	 * 問合せ対応メイン（初期表示）サービスを呼び出し、
	 * 問合せ対応メイン画面の初期表示を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean init() throws Exception
	{

		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		HashMap<String, Object> map = JCRWebCommon.getScreenInfo(this);
		
		// ANK-3593-00-00 ADD START
		// セッション情報マップをセッションから取得する
		HashMap<String, String> sessionInfoMap = JCRWebCommon.getSessionInfo(this);
		
		// セッションから取得したePOPの情報をbeanに設定する
		if (sessionInfoMap != null)
		{
			// カルテ起動コード
			if (sessionInfoMap.get(JCRStrConst.KRT_KIDOU_CD) != null)
			{
				bean.sendMessageString(CRW01201SFConst.KRT_KIDOU_CD, X31CWebConst.DATABEAN_SET_VALUE, sessionInfoMap.get(JCRStrConst.KRT_KIDOU_CD));
			}
			// ＯＰ担当業務コード
			if (sessionInfoMap.get(JCRStrConst.OP_TNT_WORK_CD) != null)
			{
				bean.sendMessageString(CRW01201SFConst.OP_TNT_WORK_CD, X31CWebConst.DATABEAN_SET_VALUE, sessionInfoMap.get(JCRStrConst.OP_TNT_WORK_CD));
			}
		}
		// ANK-3593-00-00 ADD END

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		if (map != null && map.containsKey("svcKeiNo"))
		{
			bean.sendMessageString(CRW01201SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, map.get("svcKeiNo").toString());
		}
		//*--<< ANK-2693-00-00 ADD START >>--*//
		if (map != null && map.containsKey("外部システムコード")){
			//外部システムコード
			bean.sendMessageString(CRW01201SFConst.OUT_SYS_CD, X31CWebConst.DATABEAN_SET_VALUE, map.get("外部システムコード").toString());
		}
		if (map != null && map.containsKey(CRW01201SFConst.SYSID)){
			//SYSID
			bean.sendMessageString(CRW01201SFConst.OUT_SYS_CD, X31CWebConst.DATABEAN_SET_VALUE, map.get(CRW01201SFConst.SYSID).toString());
		}
		JCRWebCommon.setScreenInfo(this, JCRScreenConst.SCREEN_ID_CRW01201, map);
		//*--<< ANK-2693-00-00 ADD  END  >>--*//

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean, commoninfoBean};

		// 問合せ対応メイン画面の初期表示データ取得処理
		JCRWebCommon.getToiawaseMainInitData(paramBean, this);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// 権限制御定義ファイルに設定する画面ID、イベントID、イベント番号の設定値（例："CRW034010PJP;B_OPEN_CRW00101_INS;0"という形式の文字列）より
		// ログインユーザーが、タブを表示する権限を有するかどうか判定し、業務個別設定組織別タブ一覧照会明細を編集する。
		editTabListByAuthority(bean);
		
		// ANK-3593-00-00 ADD START
		// ＳＹＳＩＤ
		String sysid = bean.sendMessageString(CRW01201SFConst.SYSID, X31CWebConst.DATABEAN_GET_VALUE);
		// カルテ起動コード
		String krtKidouCd = bean.sendMessageString(CRW01201SFConst.KRT_KIDOU_CD, X31CWebConst.DATABEAN_GET_VALUE);
		// ＯＰ担当業務コード
		String opTntWorkCd = bean.sendMessageString(CRW01201SFConst.OP_TNT_WORK_CD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// ＳＹＳＩＤ、カルテ起動コードがnullではないかつ空文字ではない、かつ、
		// カルテ起動コードが"1"(要)である場合以下を実行する
		if (sysid != null && krtKidouCd != null &&
			!"".equals(sysid) && JCRStrConst.KRT_KIDOU_CD_NECESSARY.equals(krtKidouCd))
		{
			// ワンタイムパスワード（お客さまカルテ画面起動用）
			String onetPwdCustKrtKidou = bean.sendMessageString(CRW01201SFConst.ONET_PWD_CUST_KRT_KIDOU, X31CWebConst.DATABEAN_GET_VALUE);
			// 対応履歴外部接続ＵＲＬ（お客さまカルテ画面起動用）
			String taiorrkOutUrlCustKrtKidou = bean.sendMessageString(CRW01201SFConst.TAIORRK_OUT_URL_CUST_KRT_KIDOU, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 対応履歴外部接続ＵＲＬ（お客さまカルテ画面起動用）の置き換え文字列を置換しパラメータを設定する
			String ckanUrl = JCRGetDataUtil.urlCkan(taiorrkOutUrlCustKrtKidou, sysid, opTntWorkCd, onetPwdCustKrtKidou);
			// 置換したurlを対応履歴外部接続ＵＲＬ（お客さまカルテ画面起動用）に設定する
			bean.sendMessageString(CRW01201SFConst.TAIORRK_OUT_URL_CUST_KRT_KIDOU, X31CWebConst.DATABEAN_SET_VALUE, ckanUrl);
			
			// お客さまカルテ起動フラグに"1"(起動する)を設定する
			bean.sendMessageString(CRW01201SFConst.CUST_KRT_KIDOU_FLG, X31CWebConst.DATABEAN_SET_VALUE, "1");
		}
		else
		{
			// お客さまカルテ起動フラグに"0"(起動しない)を設定する
			bean.sendMessageString(CRW01201SFConst.CUST_KRT_KIDOU_FLG, X31CWebConst.DATABEAN_SET_VALUE, "0");
		}
		// ANK-3593-00-00 ADD END
		// IT1-2019-0000046 ADD START
		// ZMW06901SFLogicで設定した引継ぎマップのCRW10401TransferFlgが"1"の場合(遷移元画面がお客様選択画面である場合)
		// お客さまカルテ起動フラグに"0"を設定し、初期表示処理でお客様カルテ画面を起動させない
		if (map != null && map.containsKey("CRW10401TransferFlg") && "1".equals(map.get("CRW10401TransferFlg")))
		{
			// お客さまカルテ起動フラグに"0"(起動しない)を設定する
			bean.sendMessageString(CRW01201SFConst.CUST_KRT_KIDOU_FLG, X31CWebConst.DATABEAN_SET_VALUE, "0");
		}
		// IT1-2019-0000046 ADD END
		// ANK-3593-01-00 ADD START
		// 問合せ客情報一覧照会から遷移してきた場合のみ初期表示処理でお客様カルテ画面を起動させる。
		// CRW01201SFLogicで設定した引継ぎマップのCRW02401TransferFlgが存在しない、
		// または、CRW02401TransferFlgが"1"以外の場合(遷移元画面が問合せ客情報一覧照会ではない場合)、
		// お客さまカルテ起動フラグに"0"を設定し、初期表示処理でお客様カルテ画面を起動させない
		if (map != null)
		{
			// mapに"CRW02401TransferFlg"が存在しない場合(遷移元が問合せ客情報一覧照会ではない場合)
			if (!map.containsKey("CRW02401TransferFlg"))
			{
				// お客さまカルテ起動フラグに"0"(起動しない)を設定する
				bean.sendMessageString(CRW01201SFConst.CUST_KRT_KIDOU_FLG, X31CWebConst.DATABEAN_SET_VALUE, "0");
			}
			else
			{
				// "CRW02401TransferFlg"が"1"ではない場合(遷移元が問合せ客情報一覧照会ではない場合)
				if (!"1".equals(map.get("CRW02401TransferFlg")))
				{
					// お客さまカルテ起動フラグに"0"(起動しない)を設定する
					bean.sendMessageString(CRW01201SFConst.CUST_KRT_KIDOU_FLG, X31CWebConst.DATABEAN_SET_VALUE, "0");
				}
			}
		}
		// ANK-3593-01-00 ADD END

		// URLの文字列を置換しパラメータを設定する
		JCRWebCommon.editUrlList(bean, commoninfoBean);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW01201);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW01201);

		return true;
	}

	/**
	 * 画面遷移を行う。<br>
	 * <br>
	 * 問合せ対応メインの業務個別設定組織別タブ一覧照会明細より、遷移先画面を設定し
	 * 指定された画面への遷移を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean transfer() throws Exception
	{

		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		//*--<< ANK-2693-00-00 ADD START >>--*//
		JCRWebCommon.getScreenInfo(this);
		//*--<< ANK-2693-00-00 ADD  END  >>--*//		
		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// 共有フォームBeanの遷移先画面情報を設定し、遷移先画面IDを取得する
		String nextPgID = JCRWebCommon.transferToNextPage(bean, commoninfoBean);

		// 問合せ対応メインのサービスフォームBeanをコピー
		HashMap dataMap = JCRWebCommon.copyToiawaseMainBean(bean);

		// 画面情報を設定
		JCRWebCommon.setScreenInfo(this, nextPgID, dataMap);

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// なし。

		return true;
	}

	/**
	 * 業務個別設定組織別タブ一覧照会明細処理。
	 * <br>
	 * 権限制御定義ファイルに設定する画面ID、イベントID、イベント番号の設定値（例："CRW012010PJP;CRW03401;0"という形式の文字列）より
	 * ログインユーザーが、タブを表示する権限を有するかどうか判定し、業務個別設定組織別タブ一覧照会明細を編集する。
	 * 
	 * @param bean サービスフォームBean
	 */
	private void editTabListByAuthority(X31SDataBeanAccess bean)
	{
		// 表示権限がないタブのScreenIdをキーとして保持するmap
		HashMap<String, String> authNothing = new HashMap<String, String>();

		// 権限制御定義ファイルに設定しているタブの表示権限有無をすべてチェックし、
		// 権限がないタブのScreenIdをmapのキーにセットする。
		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW03401_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW03401, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW03409_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW03409, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW03402_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW03402, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW03403_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW03403, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW03405_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW03405, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW03406_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW03406, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW03407_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW03407, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW02101_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW02101, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW02701_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW02701, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW02801_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW02801, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW02901_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW02901, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW03101_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW03101, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW01901_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW01901, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW02301_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW02301, null);
		}

		if (!JCRWebCommon.checkAuthority(this,
				this.getGamenId() + JCCAuthorityCtrlCache.KEY_DELIMITERS + JCRStrConst.AUTHORITY_KEY_TAB_CRW09001_DISPLAY_FLG))
		{
			authNothing.put(JCRScreenConst.SCREEN_ID_CRW09001, null);
		}

		X31SDataBeanAccessArray tabList = bean.getDataBeanArray(CRW01201SFConst.ECR0301B010CBSMSG1LIST);

		int startIndex = tabList.getCount() - 1;
		for (int i = startIndex; i >= 0; i--)
		{
			// 業務個別設定組織別タブ一覧照会明細よりPGIDを取得
			X31SDataBeanAccess tabBean = tabList.getDataBean(i);
			String pgId = tabBean.sendMessageString(CRW01201SFConst.L1_PG_ID_02, X31CWebConst.DATABEAN_GET_VALUE);

			// 表示権限がない場合、一覧から削除
			if (authNothing.containsKey(pgId))
			{
				tabList.removeDataBean(i);
			}
		}

	}

}
