/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：顧客契約
*	モジュール名	：KKW00822SFLogic
*	ソースファイル名：KKW00822SFLogic.java
*	作成者			：竹内
*	日付			：2011年04月01日
*＜機能概要＞
*	リモートサポートプラス登録機能のビューロジッククラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2011/04/01	竹内		新規作成
*	v4.00		2012/10/18	FJ) 清崎	[ANK-1223-00-00]進捗補足事項編集対応
*	v4.01		2013/01/11	FJ) 鷲塚	[IT1-2013-0000035] 異動年月日へのシステム日付設定対応
*	v4.02       2013/01/28  FJ) 清崎   【IT1-2013-0000167】キャンセルSOD発行対応
*	v5.00		2013/06/20  FJ) 近藤	【LT-2013-0000012】異動年月日時分秒対応
**********************************************************************/
package eo.web.webview.KKW00822SF;

import java.util.HashMap;

import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW00822SF.KKW00822SFConst;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.mapping.KKSV0740_KKSV0740OPDBMapper;
import eo.web.webview.mapping.KKSV0010_KKSV0010OPDBMapper;
import eo.web.webview.JCCWebBusinessLogic;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JPCDateUtil;

import com.fujitsu.futurity.common.JSYwebLog;
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;


/**
 * <dd>クラス名：リモートサポートプラス登録ビューロジック
 * <dd>クラス説明：画面上のボタン押下時の各処理を記述します。
 * <dd>備考：
 * @version  1.0 2011/04/01
 * @author   富士通)竹内祥悟
 */
@SuppressWarnings("serial")
public class KKW00822SFLogic extends JCCWebBusinessLogic
{

	// 2012/10/18 [ANK-1223-00-00]進捗補足事項編集対応 ADD START
	/** 進捗特記事項1：リモートサポートプラス情報登録 */
	private static final String PRG_TKJK_1_VAL_RMTSPTPRS_INFO_ADD = "リモートサポートプラス情報登録";
	// 2012/10/18 [ANK-1223-00-00]進捗補足事項編集対応 ADD END
	
	/**
	 * 登録画面初期表示処理
	 * @return 正常終了:true 異常終了:false
	 * @throws Exception 
	 */
	public boolean action_Init() throws Exception
	{
		///// 共有フォームBean設定（画面名設定） /////
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		String screenId = commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		if (JKKScreenConst.SCREEN_ID_KKW00822.equals(screenId))
		{
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00822);
		}
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		if (bean == null)
		{
			throw new Exception();
		}
		
		///// セッション情報取得 /////
		JCCWebCommon.getScreenInfo(this);
		
		// IT1-2013-0000167 2013/01/28 ADD START
		// 顧客契約引継リストの取得
		X31SDataBeanAccess[] paramBean = {bean};
		setHktgiBean(paramBean);
		
		// 初期表示サービス呼出処理
		executeInitSvc(paramBean);
		// IT1-2013-0000167 2013/01/28 ADD END
		
		///// DataBean内容編集 /////
		// 運用年月日 ← オンライン運用日付
		String unyo_ymd = bean.sendMessageString(KKW00822SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		
		// 利用開始日（年） ← 運用年月日1-4桁目
		bean.sendMessageString(KKW00822SFConst.USE_STAYMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, unyo_ymd.substring(0, 4));
		// 利用開始日（年） ← 運用年月日5-6桁目
		bean.sendMessageString(KKW00822SFConst.USE_STAYMD_MON,  X31CWebConst.DATABEAN_SET_VALUE, unyo_ymd.substring(4, 6));
		// 利用開始日（年） ← 運用年月日7-8桁目
		bean.sendMessageString(KKW00822SFConst.USE_STAYMD_DAY,  X31CWebConst.DATABEAN_SET_VALUE, unyo_ymd.substring(6, 8));
		
		
		return true;
	}
	
	
	/**
	 * 登録画面「登録確認」ボタン押下時処理
	 * @return 正常終了:true 異常終了:false
	 * @throws Exception 
	 */
	public boolean action_Cfm() throws Exception
	{
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		try
		{
			// サービスフォームBeanのデータBeanアクセスクラスを取得
			X31SDataBeanAccess bean = super.getServiceFormBean();
			if (bean == null)
			{
				throw new Exception();
			}
			
			
			paramMap = new HashMap<String, Object>();
			inputMap = new HashMap<String, Object>();
			outputMap = new HashMap<String, Object>();
			
			
			///// DataBean内容編集 /////
			// リモートサポートプラス登録サービスフォームBeanのデータの取得・設定を行う
			if (!editDataSFBeanForCfm(bean))
			{
				throw new Exception();
			}
			
			
			///// パラメータ設定処理 /////
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0010);
			paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0010);
			
			
			///// DataBean-サービスマッピング処理（上り） /////
			// 登録確認ボタン押下時は照会系サービスIFを除いてすべて機能コード"2"（チェックのみ）を設定
			mappingForDB_BP(bean, inputMap, JKKCommonConst.FUNC_CODE_2);
			
			
			///// サービス呼出処理 /////
			X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
			
			
			///// サービス呼出後エラー判定処理 /////
			if (msgResult != null)
			{
				JCCWebCommon.setMessageInfo(this, msgResult);
				return true;
			}
			
			
			///// メッセージ表示処理 /////
			String[] str = {"リモートサポートプラスオプションの登録"};
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", str);
			
			
			///// 遷移先画面の設定 /////
			X31SDataBeanAccess commonBean = super.getCommonInfoBean();
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00823);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00823);
		}
		finally
		{
			paramMap = null;
			inputMap = null;
			outputMap = null;
		}
		return true;
	}
	
	
	/**
	 * 登録画面「戻る」ボタン押下時処理
	 * @return 正常終了:true 異常終了:false
	 * @throws Exception 
	 */
	public boolean action_Back() throws Exception
	{
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		return true;
	}
	
	
	/**
	 * 登録確認画面「確定」ボタン押下時処理
	 * @return 正常終了:true 異常終了:false
	 * @throws Exception
	 */
	public boolean action_Fix() throws Exception
	{
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		try
		{
			// サービスフォームBeanのデータBeanアクセスクラスを取得
			X31SDataBeanAccess bean = super.getServiceFormBean();
			if (bean == null)
			{
				throw new Exception();
			}
			
			
			paramMap = new HashMap<String, Object>();
			inputMap = new HashMap<String, Object>();
			outputMap = new HashMap<String, Object>();
			
			
			///// DataBean内容編集 /////
			// リモートサポートプラス登録サービスフォームBeanのデータの取得・設定を行う
			if (!editDataSFBeanForFix(bean))
			{
				throw new Exception();
			}
			
			
			///// パラメータ設定処理 /////
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0010);
			paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0010);
			
			
			///// DataBean-サービスマッピング処理（上り） /////
			// 確定ボタン押下時は照会系サービスIFを除いてすべて機能コード"1"（チェック＆登録）を設定
			mappingForDB_BP(bean, inputMap, JKKCommonConst.FUNC_CODE_1);
			
			
			///// サービス呼出処理 /////
			X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
			
			
			///// サービス呼出後エラー判定処理 /////
			if (msgResult != null)
			{
				JCCWebCommon.setMessageInfo(this, msgResult);
				return true;
			}
			
			
			///// 共有フォームBean設定（遷移先画面） /////
			X31SDataBeanAccess commonBean = super.getCommonInfoBean();
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00824);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00824);
			
			
			///// メッセージ表示処理 /////
			String[] str = {"リモートサポートプラスオプションの登録"};
			JCCWebCommon.setMessageInfo(this, "EKB4390--I", str);
		}
		finally
		{
			paramMap = null;
			inputMap = null;
			outputMap = null;
		}
		return true;
	}
	
	
	/**
	 * 登録確認画面「修正」ボタン押下時処理
	 * @return 正常終了:true 異常終了:false
	 */
	public boolean action_Syuse()
	{
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00822);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00822);
		
		return true;
	}
	
	
	/**
	 * 登録完了画面「完了」ボタン押下時処理
	 * @return 正常終了:true 異常終了:false
	 * @throws Exception 
	 */
	public boolean action_Fin() throws Exception
	{
		///// 共有フォームBean設定（遷移先画面） /////
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		return true;
	}
	
	
	/**
	 * 登録画面「登録確認」ボタン押下時に、リモートサポートプラス登録サービスフォームBeanのデータの取得・設定を行う
	 * @param  bean  DataBeanアクセスクラス
	 * @throws Exception
	 * @return 正常終了:true 異常終了:false
	 */
	public boolean editDataSFBeanForCfm(X31SDataBeanAccess bean) throws Exception
	{
		// 運用年月日 ← オンライン運用日付
		bean.sendMessageString(KKW00822SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		// 運用年月日時分秒 ← オンライン運用日時
		bean.sendMessageString(KKW00822SFConst.UNYO_DTM, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDateTimeStamp(this, null));
		
		// 画面入力値の取得：利用開始日（年）、利用開始日（月）、利用開始日（日）
		// サービス課金開始年月日 = 利用開始日の翌月１日
		String use_staymd_year = bean.sendMessageString(KKW00822SFConst.USE_STAYMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		String use_staymd_mon  = bean.sendMessageString(KKW00822SFConst.USE_STAYMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		String use_staymd_day  = bean.sendMessageString(KKW00822SFConst.USE_STAYMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 利用開始日
		String use_staymd = use_staymd_year + use_staymd_mon + use_staymd_day;
		
		// IT1-2013-0000167 2013/01/28 MOD START
		String svc_chrg_staymd = "";
		if (!"".equals(use_staymd))
		{
			// 利用開始日の当月１日
			String use_sta_mon = use_staymd_year + use_staymd_mon + "01";
			// 利用開始日の翌月１日
			svc_chrg_staymd = JPCDateUtil.addMonth(use_sta_mon, 1);
		}
		// IT1-2013-0000167 2013/01/28 MOD END
		
		// 利用開始日 ← 利用開始日（年） + 利用開始日（月） + 利用開始日（日）
		bean.sendMessageString(KKW00822SFConst.USE_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, use_staymd);
		// サービス課金開始年月日 ← 利用開始日の翌月１日
		bean.sendMessageString(KKW00822SFConst.SVC_CHRG_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, svc_chrg_staymd);
		
		// start FJ)森本 v3.00.00 申込画面入力支援ワーク情報更新CC対応
		// ネットタブオプション情報制御コードに"1"を設定
		bean.sendMessageString(KKW00822SFConst.NET_TAB_OP_IF_CTL_CD, X31CWebConst.DATABEAN_SET_VALUE, "1");
		// end FJ)森本 v3.00.00　申込画面入力支援ワーク情報更新CC対応
		
		// 2012/10/16 [ANK-1223-00-00]進捗補足事項編集対応 ADD START
		// 進捗特記事項１
		bean.sendMessageString(KKW00822SFConst.PRG_TKJK_1, X31CWebConst.DATABEAN_SET_VALUE, PRG_TKJK_1_VAL_RMTSPTPRS_INFO_ADD);
		// 2012/10/16 [ANK-1223-00-00]進捗補足事項編集対応 ADD END

		// IT1-2013-0000035 2013/01/11 ADD START
		// 異動年月日時分秒にシステム日付を設定
		String sysDateDtms = JCCWebCommon.getSysDateTimeStamp();
		bean.sendMessageString(KKW00822SFConst.IDO_DTM, X31CWebConst.DATABEAN_SET_VALUE, sysDateDtms);
		// IT1-2013-0000035 2013/01/11 ADD END

		return true;
	}
	
	
	/**
	 * 登録確認画面「確定」ボタン押下時に、リモートサポートプラス登録サービスフォームBeanのデータの取得・設定を行う
	 * @param  bean  DataBeanアクセスクラス
	 * @throws Exception
	 * @return 正常終了:true 異常終了:false
	 */
	public boolean editDataSFBeanForFix(X31SDataBeanAccess bean) throws Exception
	{
		// 運用年月日 ← オンライン運用日付
		bean.sendMessageString(KKW00822SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		// 運用年月日時分秒 ← オンライン運用日時
		bean.sendMessageString(KKW00822SFConst.UNYO_DTM, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDateTimeStamp(this, null));
		
		// IT1-2013-0000035 2013/01/11 ADD START
		// 異動年月日時分秒にシステム日付を設定
		String sysDateDtms = JCCWebCommon.getSysDateTimeStamp();
		bean.sendMessageString(KKW00822SFConst.IDO_DTM, X31CWebConst.DATABEAN_SET_VALUE, sysDateDtms);
		// IT1-2013-0000035 2013/01/11 ADD END

		return true;
	}
	
	
	/**
	 * リモートサポートプラス登録サービスフォームBean項目とサービス項目のマッピングを行う
	 * @param  bean       DataBean
	 * @param  inputMap   上りデータマップ
	 * @param  func_code  機能コード
	 * @return boolean    
	 */
	public boolean mappingForDB_BP(X31SDataBeanAccess bean, HashMap<String, Object> inputMap, String func_code)
	{
		X31SDataBeanAccess[] paramBean = {bean};
		
		// DataBean-BPマッピングクラス生成
		KKSV0010_KKSV0010OPDBMapper mapper = new KKSV0010_KKSV0010OPDBMapper();
		
		// サービス契約一意照会マップ
		mapper.setKKSV001001SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		
		// 課金先一覧照会（請求契約番号／サービス契約番号）マップ
		mapper.setKKSV001002SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		
		// 申込内容承認登録マップ
		mapper.setKKSV001003SC(paramBean, inputMap, func_code);
		
		// オプションサービス契約＜サポート＞登録マップ
		mapper.setKKSV001004SC(paramBean, inputMap, func_code);
		
		// 申込明細照査・後続業務依頼マップ
		mapper.setKKSV001005SC(paramBean, inputMap, func_code);
		
		// オプションサービス契約＜サポート＞照査マップ
		mapper.setKKSV001006SC(paramBean, inputMap, func_code);
		
		// オプションサービス契約＜サポート＞照査締結マップ
		mapper.setKKSV001007SC(paramBean, inputMap, func_code);
		
		// オプションサービス契約＜サポート＞開始マップ
		mapper.setKKSV001008SC(paramBean, inputMap, func_code);
		
// v5.00 2013/06/20 LT-2013-0000012 ADD START
		// 進捗一覧照会マップ
		mapper.setKKSV001010SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
// v5.00 2013/06/20 LT-2013-0000012 ADD END
		
		// 進捗登録マップ
		mapper.setKKSV001009SC(paramBean, inputMap, func_code);
		
		// start FJ)森本 v3.00.00 申込画面入力支援ワーク情報更新CC対応
		// 申込画面入力支援ワーク情報更新CC
		mapper.setUpdMkmScinsprtWkCC(paramBean, inputMap, func_code);	
		// end FJ)森本 v3.00.00　申込画面入力支援ワーク情報更新CC対応
		
		return true;
	}
	
	// IT1-2013-0000167 2013/01/28 ADD START
	/**
	 * リモートサポートプラス登録初期表示サービス実行処理
	 * <br>
	 * @param paramBean DataBean項目の配列
	 * @exception Exceptionがスローされます。
	 */
	private void executeInitSvc(X31SDataBeanAccess[] paramBean) throws Exception
	{
		
		// 変数の定義
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		// リモートサポートプラス登録初期表示サービス
		paramMap = new HashMap<String, Object>();		// パラメタ設定用マップ
		inputMap = new HashMap<String, Object>();		// 入力用マップ
		outputMap = new HashMap<String, Object>();		// 結果格納用マップ
		
		
		// パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0740");
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "KKSV0740OP");
		
		// 運用年月日の設定
		paramBean[0].sendMessageString(KKW00822SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, 
				JCCWebCommon.getOpeDate(this, null));
		
		// 上りマッピング(サービス項目-DataBean項目マッピング)
		KKSV0740_KKSV0740OPDBMapper mapper = new KKSV0740_KKSV0740OPDBMapper();
		
		// サービス契約一意照会SC
		mapper.setKKSV074001SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);

		// リモートサポートプラス登録初期表示サービス
		invokeService(paramMap, inputMap, outputMap);
		
		// サービス契約一意照会取得下りマッピング
		mapper.getKKSV074001SC(paramBean, outputMap);
		

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
	}
	
	// IT1-2013-0000167 2013/01/28 ADD END
	
	// IT1-2013-0000167 2013/01/28 ADD START
	/**
	 * 顧客契約引継リスト設定処理
	 * <br>
	 * @param paramBean DataBean項目の配列
	 * @exception Exceptionがスローされます。
	 */
	private void setHktgiBean(X31SDataBeanAccess[] paramBean) throws Exception
	{
		
		// 顧客契約引継リストの取得
		X31SDataBeanAccessArray cust_kei_hktgi_list = paramBean[0].getDataBeanArray(KKW00822SFConst.CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess subbean = cust_kei_hktgi_list.getDataBean(0);
		
		String svc_kei_no = subbean.sendMessageString(KKW00822SFConst.SVC_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);

		// 個別引継ぎ情報に格納
		paramBean[0].sendMessageString(KKW00822SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svc_kei_no);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

	}
	// IT1-2013-0000167 2013/01/28 ADD END
}
