/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW15802SFLogic
*   ソースファイル名：KKW15802SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年9月17日
*＜機能概要＞
*   契約内容変更WEB受付データ反映済削除確認画面を表示します。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v4.00.00    2012/9/17    FJ）辛      新規作成
*
**********************************************************************/

package eo.web.webview.KKW15802SF;

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 com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0678_KKSV0678OPDBMapper;
import eo.web.webview.mapping.KKSV0685_KKSV0685OPDBMapper;

/**
 * 契約内容変更WEB受付データ一覧を表示します。
 * @version  4.0 2012/8/13
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW15802SFLogic extends JCCWebBusinessLogic
{
	
	/** ソート項目ＮＯ_初期値 */
	private static final String SORT_ITEM_NO_INIT_VALUE = "1";
	/** ソート_初期値 降順*/
	private static final String SORT_KBN_INIT_VALUE = "2";
	/** 検索区分："1"(検索) */
	private static final String SEARCH_KBN_1 = "1";
	/** 検索区分："2"(ページ制御) */
	private static final String SEARCH_KBN_2 = "2";
	/** 検索区分："3"(ソート) */
	private static final String SEARCH_KBN_3 = "3";
	/** 機能コード："1" */
	private static final String FUNC_CODE_1 = "1"; 
	/** サービスID(サービスユースケースID）: KKSV0678 */
	private static final String SVC_USECASE_ID_KKSV0678 = "KKSV0678";
	/** サービスID(サービスユースケースID）: KKSV0685 */
	private static final String SVC_USECASE_ID_KKSV0685 = "KKSV0685";
	/** ユーザ定義文字列: KKSV0640 */
	private static final String USER_DEF_STR_KKSV067801CC = "KKSV067801CC";
	/** 定数:0 */
	private static final String STR_VALUE_ZERO = "0";
	/** フラグ OFF */
	private static final String STR_FLAG_OFF = "off";
	/** フラグ ON */
	private static final String STR_FLAG_ON = "on";
	
	
	/**
	 * 初期表示処理を行います。
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 例外が発生した場合
	 */
	public boolean init() throws Exception
	{
		//■ 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
		
		//■ サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		//■ 検索条件を作成する。
		X31SDataBeanAccess[] paramBean = { bean };
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		
		//■ 一覧の初期化
		//反映済削除データリスト
		X31SDataBeanAccessArray delCustList = bean.getDataBeanArray(KKW15802SFConst.DEL_UK_LIST);
		delCustList.clearArray();
		setValue(bean, KKW15802SFConst.DELPAGELINKFLG, STR_FLAG_OFF);
		
		//エラーフラグ初期化
		bean.sendMessageBoolean(KKW15802SFConst.ERRFLG, X31CWebConst.DATABEAN_SET_VALUE, false);
		
		//■ページ情報クリア
		JCCWebCommon.clearPageLinkInfo(this, JKKScreenConst.SCREEN_ID_KKW15802);
		//■「ソート項目
		setValue(bean, KKW15802SFConst.DELSORTITEMNO, SORT_ITEM_NO_INIT_VALUE);//受付年月日
		setValue(bean, KKW15802SFConst.DELSORTKBN, SORT_KBN_INIT_VALUE);//降順
		
		//■ パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_KKSV0678);
		KKSV0678_KKSV0678OPDBMapper mapper = new KKSV0678_KKSV0678OPDBMapper();
		mapper.setKKSV067801CC(paramBean, inputMap, FUNC_CODE_1);
			
		//■ ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, STR_VALUE_ZERO, USER_DEF_STR_KKSV067801CC, inputMap);
		
		//■ サービスの呼び出し
		X31CMessageResult result = invokeService(paramMap, inputMap, outputMap);
		
		//■ エラー処理 
		if(!isNull(result))
		{
			JCCWebCommon.setMessageInfo(this, result);
		}
		
		//■ 検索エラーフラグの取得
		String searchErrFlg = JCCWebCommon.getSearchErrFlg(USER_DEF_STR_KKSV067801CC, outputMap);

		//■ "1" 取得総件数が0件の場合
		if("1".equals(searchErrFlg))
		{	
			bean.sendMessageBoolean(KKW15802SFConst.ERRFLG, X31CWebConst.DATABEAN_SET_VALUE, true);
			
			return true;
		}
		
		//サービス結果の転記
		mapper.getKKSV067801CC(paramBean, outputMap);
		
		// ページリンク情報の表示
		setValue(bean, KKW15802SFConst.DELPAGELINKFLG, STR_FLAG_ON);
		
		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, STR_VALUE_ZERO, USER_DEF_STR_KKSV067801CC, outputMap);
		
		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, "L_CHANGE_PAGE_DEL");
		
		//■ 画面に表示するメッセージを設定する。→ 削除件数を表示する
		X31SDataBeanAccessArray beanArrayDel = bean.getDataBeanArray(KKW15802SFConst.DEL_UK_LIST);
		JCCWebCommon.setMessageInfo(this, "EKBB980--Q", new String[]{Integer.toString(beanArrayDel.getCount())});
		
		// 画面遷移→契約内容変更WEB受付データ削除確認画面
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW15802);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW15802);
		
		return true;
	}
	
	
	/**
	 * 契約内容変更WEB受付データ反映済削除確認画面
	 * ページ制御を行います。
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 例外が発生した場合。
	 */
	public boolean changePageDel() throws Exception
	{
		return delExeSearch(SEARCH_KBN_2);
	}
	
	/**
	 * 契約内容変更WEB受付データ反映済削除確認画面
	 * 反映済削除データ一覧のソート処理を行います。
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 例外が発生した場合。
	 */
	public boolean sortUkDelData() throws Exception
	{
		return delExeSearch(SEARCH_KBN_3);
	}

	/**
	 *  反映済削除データリスト検索を行います。
	 * <br>
	 * @param kbn:検索区分
	 *         "1" : 検索
	 *         "2" : ページ制御
	 *         "3" : ソート
	 * <br>
	 * @return boolean 処理結果
	 */
	private boolean delExeSearch(String kbn)
	{
	
		//■ 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
		
		//■ サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		//■ 検索条件を作成する。
		X31SDataBeanAccess[] paramBean = { bean };
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		
		//■ 一覧の初期化
		//反映済削除データリスト
		X31SDataBeanAccessArray delCustList = bean.getDataBeanArray(KKW15802SFConst.DEL_UK_LIST);
		delCustList.clearArray();
		setValue(bean, KKW15802SFConst.DELPAGELINKFLG, STR_FLAG_OFF);
		
		//■ページ情報クリア
		if(kbn.equals(SEARCH_KBN_1) || kbn.equals(SEARCH_KBN_3))
		{
			JCCWebCommon.clearPageLinkInfo(this, JKKScreenConst.SCREEN_ID_KKW15802);
		}
		//■「ページ制御」以外
		if(!kbn.equals(SEARCH_KBN_2))
		{
			//■「検索」ボタン押下：ソート項目のクリア
			if(kbn.equals(SEARCH_KBN_1))
			{
				setValue(bean, KKW15802SFConst.DELSORTITEMNO, SORT_ITEM_NO_INIT_VALUE);//受付年月日
				setValue(bean, KKW15802SFConst.DELSORTKBN, SORT_KBN_INIT_VALUE);//降順
			}
			else if(kbn.equals(SEARCH_KBN_3)) //■「ソート」キー押下
			{
				setValue(bean, KKW15802SFConst.DELSORTITEMNO, getValue(bean, KKW15802SFConst.DELSORTITEMNO));
				setValue(bean, KKW15802SFConst.DELSORTKBN, getValue(bean, KKW15802SFConst.DELSORTKBN));
			}
		}
		
		//■ パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_KKSV0678);
		KKSV0678_KKSV0678OPDBMapper mapper = new KKSV0678_KKSV0678OPDBMapper();
		mapper.setKKSV067801CC(paramBean, inputMap, FUNC_CODE_1);
			
		//■ ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, STR_VALUE_ZERO, USER_DEF_STR_KKSV067801CC, inputMap);
		
		//■ サービスの呼び出し
		X31CMessageResult result = invokeService(paramMap, inputMap, outputMap);
		
		//■ エラー処理 
		if(!isNull(result))
		{
			JCCWebCommon.setMessageInfo(this, result);
		}
		
		//■ 検索エラーフラグの取得
		String searchErrFlg = JCCWebCommon.getSearchErrFlg(USER_DEF_STR_KKSV067801CC, outputMap);

		//■ "1" 取得総件数が0件の場合
		if("1".equals(searchErrFlg))
		{
			
			// EKB0930-NW：%1%為%2%は行えません。
			JCCWebCommon.setMessageInfo(this, 
					"EKB0930-NW", new String[]{"データ反映処理済のデータが0件の", "削除処理"});
			
			// 画面遷移
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
					X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW15801);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
					X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW15801);
			
			return true;
		}
		
		//サービス結果の転記
		mapper.getKKSV067801CC(paramBean, outputMap);
		
		// ページリンク情報の表示
		setValue(bean, KKW15802SFConst.DELPAGELINKFLG, STR_FLAG_ON);
		
		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, STR_VALUE_ZERO, USER_DEF_STR_KKSV067801CC, outputMap);
		
		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, "L_CHANGE_PAGE_DEL");
		
		//■ 画面に表示するメッセージを設定する。→ 削除件数を表示する
		X31SDataBeanAccessArray beanArrayDel = bean.getDataBeanArray(KKW15802SFConst.DEL_UK_LIST);
		JCCWebCommon.setMessageInfo(this, "EKBB980--Q", new String[]{Integer.toString(beanArrayDel.getCount())});
		
		// 画面遷移→契約内容変更WEB受付データ削除確認画面
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW15802);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW15802);
		
		return true;
		
	}
	
	/**
	 * 「確定」ボタン処理
	 * <br>
	 * @return boolean 処理結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean forwardDelFix() throws Exception
	{
		//■ 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
		//■ サービスフォームBeanの取得
		X31SDataBeanAccess srvBean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = { srvBean };
		
		// ■ サービス呼び出し
		HashMap< String, String > paramMap = new HashMap< String, String >();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_USECASE_ID_KKSV0685);
		
		HashMap< String, Object > inputMap = new HashMap< String, Object >();
		HashMap< String, Object > outputMap = new HashMap< String, Object >();

		KKSV0685_KKSV0685OPDBMapper mapper = new KKSV0685_KKSV0685OPDBMapper();
		mapper.setKKSV068501CC(paramBean, inputMap, FUNC_CODE_1);

		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			// 画面遷移→契約内容変更WEB受付データ削除確認画面
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
					X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW15802);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
					X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW15802);
			
			return true;
		}
		
		//■ 画面に表示するメッセージを設定する。→ 削除件数を表示する
		String kensu = (String)((HashMap)outputMap.get("KKSV068501CC")).get("cnt");
		JCCWebCommon.setMessageInfo(this, "EKBB990--I", new String[]{kensu});
		
		// 画面遷移→契約内容変更WEB受付データ削除確認画面
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW15803);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW15803);
		
		return true;
	}
	
	/**
	 * 「戻る」ボタン押下処理
	 * 前画面に戻ります。
	 * <br>
	 * @throws Exception
	 * @return 処理成否
	 */
	public boolean back() throws Exception
	{
		//■ サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		if(bean.sendMessageBoolean(KKW15802SFConst.ERRFLG, X31CWebConst.DATABEAN_GET_VALUE) == true)
		{
			// EKB0930-NW：%1%為%2%は行えません。
			JCCWebCommon.setMessageInfo(this, 
					"EKB0930-NW", new String[]{"データ反映処理済のデータが0件の", "削除処理"});
		}
		
		
		//共有フォームBeanのアクセスクラス取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		// 遷移先画面ID取得し設定する。
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW15801);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW15801);
		
		return true;
	}
	
	/**
	 * 「一覧照会へ」ボタン押下処理
	 * 契約内容変更WEB受付データ一覧照会画面に戻ります。
	 * <br>
	 * @throws Exception
	 * @return 処理成否
	 */
	public boolean forwardFin() throws Exception
	{
		//共有フォームBeanのアクセスクラス取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		// 遷移先画面ID取得し設定する。
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW15801);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW15801);
		
		return true;
	}
	
	/**
	 * NULL判定処理です。
	 * <br>
	 * @param obj 判定するオブジェクト
	 * <br>
	 * @return 判定結果
	 */
	private boolean isNull(Object obj)
	{
		if(null == obj)
		{
			return true;
		}
		
		return false;
	}
	
	/**
	 * データBeanから指定された項目の値を取得します。
	 * <br>
	 * @param bean 画面情報
	 * @param itemName 項目名
	 * <br>
	 * @return String 選択されているコード値
	 */
	private String getValue(X31SDataBeanAccess bean, String itemName)
	{
		return bean.sendMessageString(itemName, X31CWebConst.DATABEAN_GET_VALUE);
	}
	
	/**
	 * データBeanに指定された項目の値を設定します。
	 * <br>
	 * @param bean 画面情報
	 * @param itemName 項目名
	 * @param value 設定値
	 */
	private void setValue(X31SDataBeanAccess bean, String itemName, String value)
	{
		bean.sendMessageString(itemName, X31CWebConst.DATABEAN_SET_VALUE, value);
	}
	

}
