/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：CHW01304SFLogic
 *   ソースファイル名：CHW01304SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2011年11月8日
 *＜機能概要＞
 *   記事登録のビューロジック部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/11/8                新規作成
 *	 v1.01.00	 2013/05/08	  FJ)大塚     メッセージ領域の背景色の設定対応
 *	 v5.00.00	 2013/08/02	  FJ)早崎	【IT1-2013-0001528】
 **********************************************************************/
package eo.web.webview.CHW01304SF;

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.JACStrConst;
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.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHCommonServiceUtil;
import eo.web.webview.common.JCHPageTransferUtil;
import eo.web.webview.mapping.CHSV0034_CHSV0034OPDBMapper;
import eo.web.webview.mapping.CHSV0035_CHSV0035OPDBMapper;

/**
 * 記事登録のビューロジックを提供します。
 * <p>
 * <BR>
 * 
 * @author 富士通
 */
public class CHW01304SFLogic extends JCCWebBusinessLogic
{

	/** ユースケースID(記事登録画面情報取得) */
	private static final String USECASE_ID_CHSV0034 = "CHSV0034";

	/** ユースケースID(記事登録) */
	private static final String USECASE_ID_CHSV0035 = "CHSV0035";

	/** ユースケースID(ページリンクサービスID) */
	private static final String PAGE_LNK_SC_ID_PRC = JACStrConst.PRCTAIOKIROKICRNSTKUCC_MAP_ID;
	
	/** ページング区分 */
	private static final String PAGING_KBN_PRC = "2";

	/** ページングテーブルインデックス */
	private static final String PAGING_TABLE_INDEX_PRC = "0";

	/** 料金対応記録ページング_最大検索件数取得キー */
	private static final String PRC_TAIO_KIROK_KEY_PAGING_MAX_SHOW_CNT = "CHW01304_TAIORRKI_MAX_SHOW_CNT";

	/** 料金対応記録ページング_表示件数取得キー */
	private static final String PRC_TAIO_KIROK_KEY_PAGING_ROW_PER_PAGE = "CHW01304_TAIORRKI_ROW_PER_PAGE";

	/**
	 * 記事登録画面の初期表示処理を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean init() throws Exception
	{

		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面IDを判定して画面IDに対応する初期表示処理を呼び出す
		String screenId = commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		if (screenId.equals(JACScreenConst.SCREEN_ID_CHW01304))
		{
			initAddScreen();
		}

		return true;
	}

	/**
	 * 記事登録確認画面に遷移します。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean addCfm() throws Exception
	{

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean, commoninfoBean };

		// 対応履歴へ表示のCheckがOFFの場合、問い合わせタイトルをクリアする。
		boolean rendoFlg = paramBeans[0].sendMessageBoolean(CHW01304SFConst.TAIO_RIREKI_DSP, X31CWebConst.DATABEAN_GET_VALUE);
		if (!rendoFlg)
		{
			paramBeans[0].sendMessageString(CHW01304SFConst.TOIAWASE_TITLE, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.KARA_MOJI);
		}

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0035);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0035_CHSV0035OPDBMapper mapper = new CHSV0035_CHSV0035OPDBMapper();

		mapper.setTAIOKIROKADDCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2, this); // TAIOKIROKADDCC : 顧客対応記録登録CC
		mapper.setADDHOTVOICCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2, this); // ADDHOTVOICCC : ホットボイスCC
		mapper.setPRCTAIOKIROKADDCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_2); // PRCTAIOKIROKADDCC : 料金対応記録登録CC

		// 結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);
		
		// メッセージ領域の背景色の設定
		JCCWebCommon.setMessageAreaBackColor(this, "1");

		// メッセージの設定
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[] {"登録"});

		// 遷移先画面を設定する 
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_CHW01305);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_CHW01305);

		return true;
	}

	/**
	 * モーダル反映画面に遷移して画面を閉じます。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean close() throws Exception
	{
		// 遷移先画面IDを取得し、子画面を閉じる共通処理を呼出す
		return JCHPageTransferUtil.closeTransfer(this, JCCWebCommon.getScreenId(this));
	}

	/**
	 * 修正を処理します。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean shusei() throws Exception
	{

		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先画面を設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_CHW01304);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_CHW01304);

		return true;
	}

	/**
	 * 確定完了を処理します。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean fixFin() throws Exception
	{

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean, commoninfoBean };

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0035);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0035_CHSV0035OPDBMapper mapper = new CHSV0035_CHSV0035OPDBMapper();

		mapper.setTAIOKIROKADDCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1, this); // TAIOKIROKADDCC : 顧客対応記録登録CC
		mapper.setADDHOTVOICCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1, this); // ADDHOTVOICCC : ホットボイスCC
		mapper.setPRCTAIOKIROKADDCC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // PRCTAIOKIROKADDCC : 料金対応記録登録CC

		// 結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 閉じる処理の呼出し
		this.close();

		return true;
	}

	/**
	 * 料金履歴のページング処理を行います。 <br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean paging() throws Exception
	{
		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0034);

		/* ◇対応履歴情報 */
		paramBeans[0].getDataBeanArray(CHW01304SFConst.PRC_RIREKI_INFO).clearArray();

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();

		JCHCommonServiceUtil.setPrcTaioKirokIcrnStkuCC(paramBeans, inDataMap,
				PAGING_KBN_PRC, PRC_TAIO_KIROK_KEY_PAGING_MAX_SHOW_CNT, PRC_TAIO_KIROK_KEY_PAGING_ROW_PER_PAGE); // PRCTAIOKIROKICRNSTKUCC : 料金履歴情報取得CC

		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, PAGING_TABLE_INDEX_PRC, PAGE_LNK_SC_ID_PRC, inDataMap);

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		JCHCommonServiceUtil.getPrcTaioKirokIcrnStkuCC(paramBeans, outputMap);

		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, PAGING_TABLE_INDEX_PRC, PAGE_LNK_SC_ID_PRC, outputMap);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, PAGING_TABLE_INDEX_PRC, "paging", JACScreenConst.SCREEN_ID_CHW01304);

		// 表示色設定
		this.setCtrlValueInPrcRirekiIcrn(paramBeans);

		return true;
	}

	/**
	 * 記事登録画面の初期表示処理を行います。 <br>
	 * 
	 * @throws Exception 例外が発生した場合
	 */
	private void initAddScreen() throws Exception
	{

		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = { bean };

		// ページング情報の削除
		JCCWebCommon.clearPageLinkInfo(this, JACScreenConst.SCREEN_ID_CHW01304);

		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_CHSV0034);

		// サービスに渡すMapを生成する
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		CHSV0034_CHSV0034OPDBMapper mapper = new CHSV0034_CHSV0034OPDBMapper();

		mapper.setCHSV003402SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1); // サービス契約番号(オーナー情報)一覧照会

		JCHCommonServiceUtil.setPrcTaioKirokIcrnStkuCC(paramBeans, inDataMap,
				PAGING_KBN_PRC, PRC_TAIO_KIROK_KEY_PAGING_MAX_SHOW_CNT, PRC_TAIO_KIROK_KEY_PAGING_ROW_PER_PAGE); // PRCTAIOKIROKICRNSTKUCC : 料金履歴情報取得CC

		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, PAGING_TABLE_INDEX_PRC, PAGE_LNK_SC_ID_PRC, inDataMap);

		// 検索結果格納用マップを生成。
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getCHSV003402SC(paramBeans, outputMap); // サービス契約番号(オーナー情報)一覧照会

		JCHCommonServiceUtil.getPrcTaioKirokIcrnStkuCC(paramBeans, outputMap);

		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, PAGING_TABLE_INDEX_PRC, PAGE_LNK_SC_ID_PRC, outputMap);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, PAGING_TABLE_INDEX_PRC, "paging", JACScreenConst.SCREEN_ID_CHW01304);

		// 表示色設定
		this.setCtrlValueInPrcRirekiIcrn(paramBeans);

		return;
	}

	/**
	 * 料金履歴一覧情報の制御値を設定します。 <br>
	 * 
	 * @param bean 記事登録サービスフォームBean
	 */
	private void setCtrlValueInPrcRirekiIcrn(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray prcRirekiIcrnInfo = bean[0].getDataBeanArray(CHW01304SFConst.PRC_RIREKI_INFO);
		for (int idx = 0; idx < prcRirekiIcrnInfo.getCount().intValue(); idx++)
		{
			// 表示制御値、記事表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			String kijiDspCntrlValue = JACStrConst.CLASS_TEXT_READONLY_EVEN;
			if (idx % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
				kijiDspCntrlValue = JACStrConst.CLASS_TEXT_READONLY_ODD;
			}
			prcRirekiIcrnInfo.getDataBean(idx).sendMessageString(CHW01304SFConst.DSP_CNTRL_VALUE_01, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
			prcRirekiIcrnInfo.getDataBean(idx).sendMessageString(CHW01304SFConst.DSP_CNTRL_VALUE_KIJI_01, X31CWebConst.DATABEAN_SET_VALUE, kijiDspCntrlValue);
		}
	}
}
