/*********************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KUW00505SFLogic
*	ソースファイル名：KUW00505SFLogic.java
*	作成者			：富士通
*	日付			：2012年04月23日
*＜機能概要＞
*	工事作業項目更新のロジックです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/04/23	FJ)高橋		新規作成
*	v3.00.00	2012/04/23	FJ)高橋		【ANK-0377-00-00】（OPMS連携）工事費連携における連携機能追加変更
*
**********************************************************************/
package eo.web.webview.KUW00505SF;

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.common.constant.JKUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKUCommonUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KUW00505SF.KUW00505SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKUScreenConst;
import eo.web.webview.mapping.KUSV0020_KUSV0020OPDBMapper;
import eo.web.webview.mapping.KUSV0021_KUSV0021OPDBMapper;
import eo.web.webview.mapping.KUSV0024_KUSV0024OPDBMapper;

/**
 * 工事作業項目更新のロジッククラスです。
 * @author 富士通
 */
public class KUW00505SFLogic extends JCCWebBusinessLogic
{
	/**
	 * 更新ユースケースID01
	 */
	private static final String UPD_USECASE_ID_01 = "KUSV0020";
	
	/**
	 * 初期表示ユースケースID01
	 */
	private static final String INIT_USECASE_ID_01 = "KUSV0021";
	
	/**
	 * 名称検索ユースケースID01
	 */
	private static final String NMSEARCH_USECASE_ID_01 = "KUSV0024";
	
	/**
	 * 初期化処理
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean action_Init() throws Exception
	{
		return kuw00505_Init();
	}
	
	/**
	 * 初期表示処理
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean kuw00505_Init() throws Exception
	{
		// 遷移元画面IDの設定
		JCCWebCommon.setScreenId(this, JKUScreenConst.SCREEN_ID_KUW00501, JKUScreenConst.SCREEN_ID_KUW00505);
		
		// 検索処理
		search();
		
		return true;
	}
	
	/**
	 * 戻るボタン押下イベント
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean action_Rtrn() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		//遷移元画面IDの設定
		JCCWebCommon.setScreenId(this, JKUScreenConst.SCREEN_ID_KUW00501, JKUScreenConst.SCREEN_ID_KUW00505);
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_ID_KUW00501);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_NAME_KUW00501);
		
		return true;
	}
	
	/**
	 * 更新確認ボタン押下イベント
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean action_UpdCfm() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		
		// 名称検索成功時に更新確認画面に遷移する
		if(nmSearch())
		{
			// 日時の設定
			String year = bean.sendMessageString(KUW00505SFConst.RSV_APLY_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
			String month = bean.sendMessageString(KUW00505SFConst.RSV_APLY_MONTH, X31CWebConst.DATABEAN_GET_VALUE);
			String day = bean.sendMessageString(KUW00505SFConst.RSV_APLY_DAY, X31CWebConst.DATABEAN_GET_VALUE);
			String ymd = year + month + day;
			
			bean.sendMessageString(KUW00505SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE, ymd);
			
			// 更新確認処理
			update(JPCModelConstant.FUNC_CD_2);
			
			// メッセージの設定
			String[] msgRp = new String[]{"更新"};
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", msgRp);
			
			// 背景色の設定
			JCCWebCommon.setMessageAreaBackColor(this, "1");
			
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
					X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_ID_KUW00506);
			
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
					X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_NAME_KUW00506);
		}
			
		return true;
	}
	
	/**
	 *名称検索ボタン押下イベント
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean action_NmSearch() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// 検索処理
		nmSearch();
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_ID_KUW00505);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_NAME_KUW00505);
		
		return true;
	}	
	
	/**
	 * 修正ボタン押下イベント
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean action_Shusei() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_ID_KUW00505);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_NAME_KUW00505);
		
		return true;
	}
	
	/**
	 * 確定ボタン押下イベント
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean action_Fix() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// 更新処理
		update(JPCModelConstant.FUNC_CD_1);
		
		// メッセージの設定
		String[] msgRp = new String[]{"更新"};
		JCCWebCommon.setMessageInfo(this, "EKB0380--I", msgRp);
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_ID_KUW00507);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_NAME_KUW00507);
		
		return true;
	}
	
	/**
	 * 完了ボタン押下イベント
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean action_Fin() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		//遷移元画面IDの設定
		JCCWebCommon.setScreenId(this, JKUScreenConst.SCREEN_ID_KUW00501, JKUScreenConst.SCREEN_ID_KUW00507);
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_ID_KUW00501);
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JKUScreenConst.SCREEN_NAME_KUW00501);
		
		return true;
	}
	
	/**
	 * 更新処理サービスの呼び出し
	 * @param funcCd 機能コード
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean update(String funcCd) throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// マッピングクラスのインスタンスを生成
		KUSV0020_KUSV0020OPDBMapper mapper = new KUSV0020_KUSV0020OPDBMapper();
		
		// ユースケースＩＤを設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, UPD_USECASE_ID_01);
		mapper.setKUSV002001SC(paramBean, inputMap, funcCd);
		
		// サービス呼出
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
			
		}
		
		return true;
	}
	
	/**
	 * 名称取得サービスの呼び出し
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean nmSearch() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		X31SDataBeanAccessArray beanList = paramBean[0].getDataBeanArray(KUW00505SFConst.EKK0721A010CBSMSG1LIST);
		
		if(beanList.getCount() != 0)
		{
			beanList.clearArray();
		}
		
		// サービス呼出処理
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// マッピングクラスのインスタンスを生成
		KUSV0024_KUSV0024OPDBMapper mapper = new KUSV0024_KUSV0024OPDBMapper();
		
		// ユースケースＩＤを設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, NMSEARCH_USECASE_ID_01);
		
		// 上りマッピング
		// マッピングクラスの呼び出し
		mapper.setKUSV002401SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		// サービス呼出
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}
		
		// 下りマッピング
		// マッピングクラスの呼び出し
		mapper.getKUSV002401SC(paramBean, outputMap);
		
		beanList = paramBean[0].getDataBeanArray(KUW00505SFConst.EKK0721A010CBSMSG1LIST);
		
		if(beanList.getCount() == 0)
		{
			String[] msgRp1 = new String[]{"一時支払料金", "データ"};
			
			JCCWebCommon.setMessageInfo(this, "EKB0300-KW", msgRp1);
			
			// 一時支払料金名をクリア
			bean.sendMessageString(KUW00505SFConst.TMP_PAY_PRC_NM, X31CWebConst.DATABEAN_SET_VALUE, "");
			
			return false;
		}
		else
		{
			// 一時支払料金一意照会明細の一時支払料金名を一時支払料金名に転記
			X31SDataBeanAccess listDataBean = bean.getDataBeanArray(KUW00505SFConst.EKK0721A010CBSMSG1LIST).getDataBean(0);
			
			bean.sendMessageString(KUW00505SFConst.TMP_PAY_PRC_NM, X31CWebConst.DATABEAN_SET_VALUE,
					listDataBean.sendMessageString(KUW00505SFConst.TMP_PAY_PRC_NM_01, X31CWebConst.DATABEAN_GET_VALUE));
		}
		
		return true;
	}
	
	/**
	 * 検索実行処理
	 * @return boolean
	 * @throws Exception 例外発生時
	 */
	public boolean search() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		// 引き継ぎ情報の取得
		JCCWebCommon.getScreenInfo(this);
		
		// 予約適用年月日
		String rsvAplyYmd  = bean.sendMessageString(KUW00505SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 予約適用年月日がNULLの場合は"20991231"をセット
		if(JKUCommonUtil.isNull(rsvAplyYmd))
		{
			bean.sendMessageString(KUW00505SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE, JKUStrConst.MAX_YMD);
		}
		
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// マッピングクラスのインスタンスを生成
		KUSV0021_KUSV0021OPDBMapper mapper = new KUSV0021_KUSV0021OPDBMapper();
		
			// ユースケースＩＤを設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, INIT_USECASE_ID_01);
		mapper.setKUSV002101SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		
		// サービス呼出
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		mapper.getKUSV002101SC(paramBean, outputMap);
		
		// 検索結果がない場合は工事作業項目一覧照会画面に遷移する。
		X31SDataBeanAccessArray beanList = paramBean[0].getDataBeanArray(KUW00505SFConst.EKU0131A010CBSMSG1LIST);
		if(beanList.getCount() == 0)
		{
			setTransferPageId("KUW005010PJP");
			
			return true;
		}
		else
		{
			// 工事作業項目一意照会明細の内容を転記
			X31SDataBeanAccess listDataBean = bean.getDataBeanArray(KUW00505SFConst.EKU0131A010CBSMSG1LIST).getDataBean(0);
			
			// 世代登録年月日時分秒
			bean.sendMessageString(KUW00505SFConst.GENE_ADD_DTM, X31CWebConst.DATABEAN_SET_VALUE,
					listDataBean.sendMessageString(KUW00505SFConst.GENE_ADD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));
			
			// 更新前更新年月日時分秒
			bean.sendMessageString(KUW00505SFConst.UPD_DTM_BF, X31CWebConst.DATABEAN_SET_VALUE,
					listDataBean.sendMessageString(KUW00505SFConst.LAST_UPD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));
			
			// 一時支払料金番号
			bean.sendMessageString(KUW00505SFConst.TMP_PAY_PRC_NO, X31CWebConst.DATABEAN_SET_VALUE,
					listDataBean.sendMessageString(KUW00505SFConst.TMP_PAY_PRC_NO_02, X31CWebConst.DATABEAN_GET_VALUE));
			
			// 一時支払料金名
			bean.sendMessageString(KUW00505SFConst.TMP_PAY_PRC_NM, X31CWebConst.DATABEAN_SET_VALUE,
					listDataBean.sendMessageString(KUW00505SFConst.TMP_PAY_PRC_NM_02, X31CWebConst.DATABEAN_GET_VALUE));
			
			if(!JKUCommonUtil.isNull(rsvAplyYmd))
			{
				bean.sendMessageString(KUW00505SFConst.RSV_APLY_YEAR, X31CWebConst.DATABEAN_SET_VALUE, rsvAplyYmd.substring(0, 4));
				bean.sendMessageString(KUW00505SFConst.RSV_APLY_MONTH, X31CWebConst.DATABEAN_SET_VALUE, rsvAplyYmd.substring(4, 6));
				bean.sendMessageString(KUW00505SFConst.RSV_APLY_DAY, X31CWebConst.DATABEAN_SET_VALUE, rsvAplyYmd.substring(6, 8));
			}
		}
		
		return true;
	}
	
	/**
	 * セッションから検索条件を取得する
	 * @param bean
	 */
	private void getSessionInfo(X31SDataBeanAccess bean)
	{
		// セッション情報取得
		HashMap<String, Object> searchInfo = JCCWebCommon.getScreenInfo(this);
		
		if(searchInfo != null)
		{
			// 工事分類コード
			bean.sendMessageString(KUW00505SFConst.KOJI_BUNRUI_CD, X31CWebConst.DATABEAN_SET_VALUE
					, searchInfo.get(KUW00505SFConst.KOJI_BUNRUI_CD).toString());
			// 工事費項目コード
			bean.sendMessageString(KUW00505SFConst.KOJIHI_KMK_CD, X31CWebConst.DATABEAN_SET_VALUE
					, searchInfo.get(KUW00505SFConst.KOJIHI_KMK_CD).toString());
			// 工事費単価コード
			bean.sendMessageString(KUW00505SFConst.KOJIHI_TANKA_CD, X31CWebConst.DATABEAN_SET_VALUE
					, searchInfo.get(KUW00505SFConst.KOJIHI_TANKA_CD).toString());
			// 予約適用年月日
			bean.sendMessageString(KUW00505SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE
					, searchInfo.get(KUW00505SFConst.RSV_APLY_YMD).toString());
		}
	}

}
