/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW02102SFLogic
*   ソースファイル名：KKW02102SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年06月28日
*＜機能概要＞
*   eoTV機器設置補正対象一覧画面 Viewロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/06/28   FJ）磯俣    新規作成
*   v2.00.00    2011/12/07   FJ）馬場    SUB修正
*   v3.00.00    2012/05/03   FJ）馬場    巻@修正
*   v5.00.00    2013/02/06   FJ）野口   【IT1-2013-0000208】対応
**********************************************************************/

package eo.web.webview.KKW02102SF;

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.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCMessageCache;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0174_KKSV0174OPDBMapper;
import eo.web.webview.mapping.KKSV0175_KKSV0175OPDBMapper;

/**
 * eoTV機器設置補正対象一覧画面のビューロジック処理を行います。
 * @author user
 *
 */
public class KKW02102SFLogic extends JCCWebBusinessLogic
{
	
	
	/**
	 * eoTV機器設置補正対象一覧画面 初期表示処理。
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean init() throws Exception
	{
		
		// 画面情報を取得する
		HashMap<String, Object> parameterMap = JCCWebCommon.getScreenInfo(this);
		
		// サービスフォームBeanのアクセスクラス取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
		
		// 遷移元より工事案件番号を取得する
		serviceBean.sendMessageString(KKW02102SFConst.KOJI_ANKEN_NO_SELECT,
				X31CWebConst.DATABEAN_SET_VALUE, (String)parameterMap.get("工事案件番号"));
		
		// 遷移元よりサービス契約番号を取得する
		serviceBean.sendMessageString(KKW02102SFConst.SVC_KEI_NO_SELECT,
				X31CWebConst.DATABEAN_SET_VALUE, (String)parameterMap.get("サービス契約番号"));
		
		// サービス契約、料金コース一意照会のために運用日付を設定する
		serviceBean.sendMessageString(KKW02102SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		
		// サービス呼び出処理を行う
		callServiceKKSV0174(serviceBean);
		
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02102);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02102);
		
		return true;
	}
	
	/**
	 * 更新確認ボタン押下処理
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean forwardUpdCfm() throws Exception
	{
		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		
		// 入力チェック
//		if(!kakuninInputCheck(serviceBean)){
//			return false;
//		}
		
		// 申込、申込明細登録のために、運用日付を設定する
		serviceBean.sendMessageString(KKW02102SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		serviceBean.sendMessageString(KKW02102SFConst.OPE_DATE_TIME, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDateTimeStamp(this, null));
		
		// 接続機器情報を取得
		X31SDataBeanAccessArray connectList = serviceBean.getDataBeanArray(KKW02102SFConst.CONNECT_KIKI_INFO);
		
		X31SDataBeanAccessArray tvArray = serviceBean.getDataBeanArray(KKW02102SFConst.CONNECT_KIKI_TV_COSE);
		X31SDataBeanAccess tvBean = tvArray.getDataBean(0);
		
		for(int i=0; i<5; i++){
			X31SDataBeanAccess connectbean = connectList.getDataBean(i);
			String code = connectbean.sendMessageString(KKW02102SFConst.CONNECT_TVCORCE_CD_04, X31CWebConst.DATABEAN_GET_VALUE);
			String index = getSelectNameFromCode(serviceBean, code);
			String name = "";
			if(!"".equals(index))
			{
				name = tvBean.sendMessageString(KKW02102SFConst.CD_DIV_CD_LIST2_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
				connectbean.sendMessageString(KKW02102SFConst.CONNECT_PPLAN_CD_04, X31CWebConst.DATABEAN_SET_VALUE, name);
				name = tvBean.sendMessageString(KKW02102SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
				connectbean.sendMessageString(KKW02102SFConst.CONNECT_KIKI_TV_COSE, X31CWebConst.DATABEAN_SET_VALUE, name);
			}
		}
		
		// マッピングクラスに渡すために配列にする
		X31SDataBeanAccess[] paramBean = {serviceBean};
		
		// 検索処理のユースケースID格納用マップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 共通情報の設定
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		// 更新のデータBeanとBPをマッピングするインスタンスを生成
		KKSV0175_KKSV0175OPDBMapper mapper = new KKSV0175_KKSV0175OPDBMapper();
		
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0175");
		
		// チェックのみを行うためfunc_cdは"2"を設定
		mapper.setKKSV017507SC(paramBean, inputMap, "1");
		mapper.setKKSV017508SC(paramBean, inputMap, "1");
		mapper.setKKSV017509CC(paramBean, inputMap, "1");
		mapper.setKKSV017504SC(paramBean, inputMap, "2");
		mapper.setKKSV017505SC(paramBean, inputMap, "2");
		mapper.setKKSV017501CC(paramBean, inputMap, "2");
		mapper.setKKSV017506SC(paramBean, inputMap, "2");
		
		// サービスの呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// サービス結果の転記
		mapper.getKKSV017507SC(paramBean, outputMap);
		mapper.getKKSV017508SC(paramBean, outputMap);
		mapper.getKKSV017509CC(paramBean, outputMap);
		
		// エラーが設定されているかチェック
		boolean errFlg = false;
		X31SDataBeanAccessArray kikiList = serviceBean.getDataBeanArray(KKW02102SFConst.CONNECT_KIKI_INFO);
		for(int i = 0; i < kikiList.getCount(); i++)
		{
			X31SDataBeanAccess subbean = kikiList.getDataBean(i);
			String connectErrFlgStb = subbean.sendMessageString(KKW02102SFConst.CONNECT_ERR_FLG_STB_04, X31CWebConst.DATABEAN_GET_VALUE);
			String connectErrFlgBcas = subbean.sendMessageString(KKW02102SFConst.CONNECT_ERR_FLG_BCAS_04, X31CWebConst.DATABEAN_GET_VALUE);
			String connectErrFlgCcas = subbean.sendMessageString(KKW02102SFConst.CONNECT_ERR_FLG_CCAS_04, X31CWebConst.DATABEAN_GET_VALUE);
			
			// DataBeanのエラーフラグをクリア
			subbean.sendMessageString(KKW02102SFConst.CONNECT_ERR_FLG_STB_04, X31CWebConst.DATABEAN_SET_VALUE, "");
			subbean.sendMessageString(KKW02102SFConst.CONNECT_ERR_FLG_BCAS_04, X31CWebConst.DATABEAN_SET_VALUE, "");
			subbean.sendMessageString(KKW02102SFConst.CONNECT_ERR_FLG_CCAS_04, X31CWebConst.DATABEAN_SET_VALUE, "");
			
			// エラーフラグが一つでも設定されていた場合、処理を中断する
			if(!"".equals(connectErrFlgStb) || !"".equals(connectErrFlgBcas) || !"".equals(connectErrFlgCcas))
			{
				errFlg = true;
			}
			
			// 宅内機器管理Ｓ存在チェック
			if("tkniErr".equals(connectErrFlgStb))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0300_KW, new String[]{"宅内機器管理システム","STB-ID"}, "l_stb_id_input" + i);
			}
			if("tkniErr".equals(connectErrFlgBcas))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0300_KW, new String[]{"宅内機器管理システム","ＢＣＡＳ−ＩＤ"}, "l_bcas_id_input" + i);
			}
			if("tkniErr".equals(connectErrFlgCcas))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0300_KW, new String[]{"宅内機器管理システム","ＣＣＡＳ−ＩＤ"}, "l_ccas_id_input" + i);
			}
			
			// 宅内機器管理Ｓ型式チェック
			if("tkMdlErr".equals(connectErrFlgStb))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5020_KW, new String[]{"STB-ID"}, "l_stb_id_input" + i);
			}
			
			// 機器提供サービス契約登録チェック
			if("kktkErr".equals(connectErrFlgStb))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5030_KW, new String[]{"STB-ID"}, "l_stb_id_input" + i);
			}
			if("kktkErr".equals(connectErrFlgBcas))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5030_KW, new String[]{"ＢＣＡＳ−ＩＤ"}, "l_bcas_id_input" + i);
			}
			if("kktkErr".equals(connectErrFlgCcas))
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5030_KW, new String[]{"ＣＣＡＳ−ＩＤ"}, "l_ccas_id_input" + i);
			}
		}
		
		// エラーフラグが一つでも設定されていた場合、処理を中断する
		if(errFlg)
		{
			return true;
		}
		
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[]{"eoTV機器設置情報の変更"});
		
		// 遷移先画面IDを設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02103);
		// 遷移先画面名を設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02103);
		
		
		return true;
	}
	
	/**
	 * 確定ボタン押下処理
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean forwardFix() throws Exception
	{
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanのアクセスクラスを取得
		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 申込、申込明細登録のために、運用日付を設定する
		serviceBean.sendMessageString(KKW02102SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		serviceBean.sendMessageString(KKW02102SFConst.OPE_DATE_TIME, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDateTimeStamp(this, null));
		
		// サービス呼び出し登録処理を行う
		// マッピングクラスに渡すために配列にする
		X31SDataBeanAccess[] paramBean = {serviceBean};
		
		// 検索処理のユースケースID格納用マップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 共通情報の設定
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		// 更新のデータBeanとBPをマッピングするインスタンスを生成
		KKSV0175_KKSV0175OPDBMapper mapper = new KKSV0175_KKSV0175OPDBMapper();
		
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0175");
		
		mapper.setKKSV017504SC(paramBean, inputMap, "2");
		mapper.setKKSV017505SC(paramBean, inputMap, "1");
		mapper.setKKSV017501CC(paramBean, inputMap, "1");
		mapper.setKKSV017506SC(paramBean, inputMap, "1");
		
		// サービスの呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
/* ++++++++++ v5.00.00 修正開始 ++++++++++ */
//		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0380__I, new String[]{"eoTV機器設置情報の変更"});
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I, new String[]{"eoTV機器設置情報の変更"});
/* ++++++++++ v5.00.00 修正終了 ++++++++++ */
		// 遷移先画面IDを設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02104);
		// 遷移先画面名を設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02104);
		
		return true;
	}
	
	/**
	 * 戻るボタン押下処理
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean back() throws Exception
	{
		// サービスフォームBeanのアクセスクラスを取得
//		X31SDataBeanAccess serviceBean = super.getServiceFormBean();
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// どの画面からの戻りか設定する
//		JCCWebCommon.setScreenId(this, JKKScreenConst.SCREEN_ID_KKW02101, JKKScreenConst.SCREEN_ID_KKW02102);
		
		// 遷移先画面IDを設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		
		return true;
	}
	
	/**
	 * 修正ボタン押下処理
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean forwardShusei() throws Exception
	{
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// 遷移先画面IDを設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02102);
		// 遷移先画面名を設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW02102);
		
		return true;
	}
	
	/**
	 * 完了ボタン押下処理
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean forwardFin() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// どの画面からの戻りか設定する
		JCCWebCommon.setScreenId(this, JKKScreenConst.SCREEN_ID_KKW02101, JKKScreenConst.SCREEN_ID_KKW02104);
		
		// 遷移先画面IDを設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		return true;
	}
	
	/**
	 * 工事案件番号詳細情報の取得処理を行います。
	 * <br>
	 * @param serviceBean 設定する画面のBean
	 * 
	 * @return boolean サービス呼び出し結果
	 * @throws Exception
	 */
	private boolean callServiceKKSV0174(X31SDataBeanAccess serviceBean)throws Exception
	{
		
		// マッピングクラスに渡すために配列にする
		X31SDataBeanAccess[] paramBean = {serviceBean};
		
		// 検索処理のユースケースID格納用マップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0174");
		
		// データBeanとBPをマッピングするインスタンスを生成
		KKSV0174_KKSV0174OPDBMapper mapper = new KKSV0174_KKSV0174OPDBMapper();
		
		// 共通情報の設定
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		mapper.setKKSV017402SC(paramBean, inputMap, "2");
		mapper.setKKSV017403SC(paramBean, inputMap, "2");
		mapper.setKKSV017401CC(paramBean, inputMap, "1");
		mapper.setKKSV0174CC(paramBean, inputMap, "1");
		mapper.setKKSV017404SC(paramBean, inputMap, "1");
		
		// サービスの呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}
		
		// メッセージ定義ファイルを読み込む
		JCCMessageCache.setMessageCache();
		
		// サービス結果の転記
		mapper.getKKSV017401CC(paramBean, outputMap);
		mapper.getKKSV0174CC(paramBean, outputMap);
		mapper.getKKSV017404SC(paramBean, outputMap);
		
		// 背景色の設定を行う
		setColorListKojiAnken(paramBean[0]);
		
		// 検索エラーフラグの取得
		String searchErrFlg = JCCWebCommon.getSearchErrFlg("KKSV0174CC", outputMap);
		
		if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			// 検索結果が0件の場合の処理
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
			
		}
		
		return true;
	}
	
	/**
	 * eoTV機器設置情報(KKW02102)一覧表のバックカラー設定を行います。
	 * <br>
	 * @param paramBean 設定する一覧のBean情報
	 * @param serviceFormBean 設定する画面のServiceFormBean
	 */
	private void setColorListKojiAnken(X31SDataBeanAccess paramBean)
	{
		X31SDataBeanAccessArray yoteiList = paramBean.getDataBeanArray(KKW02102SFConst.KOJI_INFO);
		X31SDataBeanAccessArray jissekiList = paramBean.getDataBeanArray(KKW02102SFConst.KOJI_JSEKI_INFO);
		X31SDataBeanAccessArray kikiList = paramBean.getDataBeanArray(KKW02102SFConst.CONNECT_KIKI_INFO);
		
		for (int i = 0; i < 5; i++)	
		{
			X31SDataBeanAccess yoteibean = yoteiList.getDataBean(i);
			X31SDataBeanAccess jissekibean = jissekiList.getDataBean(i);
			X31SDataBeanAccess kikibean = kikiList.getDataBean(i);
			
			if (i % 2 == 0)
			{
				yoteibean.sendMessageString(KKW02102SFConst.L_COLOR_02, X31CWebConst.DATABEAN_SET_VALUE, "odd");
				jissekibean.sendMessageString(KKW02102SFConst.L_COLOR_02, X31CWebConst.DATABEAN_SET_VALUE, "odd");
				kikibean.sendMessageString(KKW02102SFConst.CONNECT_COLOR_04, X31CWebConst.DATABEAN_SET_VALUE, "odd");
			}
			else
			{
				yoteibean.sendMessageString(KKW02102SFConst.L_COLOR_02, X31CWebConst.DATABEAN_SET_VALUE, "even");
				jissekibean.sendMessageString(KKW02102SFConst.L_COLOR_02, X31CWebConst.DATABEAN_SET_VALUE, "even");
				kikibean.sendMessageString(KKW02102SFConst.CONNECT_COLOR_04, X31CWebConst.DATABEAN_SET_VALUE, "even");
			}
		}
	}
	
	/**
	 * 引数に値が設定されているか判定します。
	 * <br>
	 * @param arg0 判定する引数
	 * @return 引数に値が設定されていない場合はtrue
	 */
	private boolean isNull(String arg0) 
	{
		if (arg0 == null) 
		{
			return true;
		}

		return 0 == arg0.toString().length();
	}
	
	/**
	 * TVコースプルダウンから対応するコード値のインデックスを取得します。
	 * 
	 * @param serviceBean サービスフォームビーン
	 * @param ctrPlnDiv 電波障害対策区分コード
	 * @param kindSelect コンボ種類
	 * @return 取得したインデックス
	 */
	private String getSelectNameFromCode(X31SDataBeanAccess serviceBean, String code)
	{
		// コードリストを取得
		X31SDataBeanAccessArray codeArray = serviceBean.getDataBeanArray(KKW02102SFConst.CONNECT_KIKI_TV_COSE);
		X31SDataBeanAccess cdBean = codeArray.getDataBean(0);
		
		int cdList = Integer.valueOf(cdBean.sendMessage(KKW02102SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT).toString());
		
		String retIndex = "";

		for (int i = 0; i < cdList; i++)
		{
			if (code.equals(cdBean.sendMessageString(KKW02102SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i)))
			{
				retIndex = i + "";
				break;
			}
		}
		
		return retIndex;
	}
	
}
