/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：KKW00404SFLogic
 *   ソースファイル名：KKW00404SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2023年01月16日
 *＜機能概要＞
 *   ONU交換工事情報入力のビューロジック部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 * v61.00.00	2023/01/04	FJ)澤田		【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
 **********************************************************************/
package eo.web.webview.KKW00404SF;

import java.util.HashMap;

import com.fujitsu.futurity.model.common.check.EmsizeCharCheck;
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.JZM0171Constant;
import eo.common.util.JKKStringConverter;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW00401SF.KKW00401SFConst;
import eo.web.webview.KKW00404SF.KKW00404SFConst;
import eo.web.webview.common.JCCScreenConst;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHPageTransferUtil;
import eo.web.webview.common.JCHWebCommon;
import eo.web.webview.mapping.KKSV1017_KKSV1017OPDBMapper;

@SuppressWarnings({"serial"})
public class KKW00404SFLogic extends JCCWebBusinessLogic {
	
	/**
	 * ONU交換工事情報入力の初期表示処理を行います。 <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 (JKKScreenConst.SCREEN_ID_KKW00404.equals(screenId))
		{
			initScreen();
		}

		return true;
	}
	
	/**
	 * 画面の初期表示処理を行います。 <br>
	 * 
	 * @throws Exception 例外が発生した場合
	 */
	private void initScreen() throws Exception
	{
		// (1)	セッション情報取得
		// 画面間引継情報を設定する
		HashMap<String, Object> parameterMap = JCCWebCommon.getScreenInfo(this);

		// サービスフォーム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, "KKSV1017");

		// マッピングクラスの結果を格納するHashMap
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// (2)	サービス呼出処理
		KKSV1017_KKSV1017OPDBMapper mapper = new KKSV1017_KKSV1017OPDBMapper();
		mapper.setKKSV1017ComboBox(paramBeans, inputMap, JKKCommonConst.FUNC_CODE_1, "KKSV101701SC", JZM0171Constant.CD00560, JCCWebCommon.getOpeDate(this, null));// 電話連絡希望時間帯
		mapper.setKKSV1017ComboBox(paramBeans, inputMap, JKKCommonConst.FUNC_CODE_1, "KKSV101702SC", JZM0171Constant.CD00254, JCCWebCommon.getOpeDate(this, null));// 工事アポ連絡先

		// サービスの呼び出し
		invokeService(paramMap, inputMap, outputMap);
		
		mapper.getKKSV101701SC(paramBeans, outputMap);	// 電話連絡希望時間帯
		mapper.getKKSV101702SC(paramBeans, outputMap);	// 工事アポ連絡先
		
		bean.sendMessageString(KKW00404SFConst.RRK_WAY_HOKI, X31CWebConst.DATABEAN_SET_VALUE, (String)parameterMap.get("rrk_way_hoki"));
		bean.sendMessageString(KKW00404SFConst.KOJIAK_BIKO_1, X31CWebConst.DATABEAN_SET_VALUE, (String)parameterMap.get("kojiak_biko"));
		bean.sendMessageString(KKW00404SFConst.KOJIAK_BIKO_2, X31CWebConst.DATABEAN_SET_VALUE, (String)parameterMap.get("kojiak_biko_2"));
		String tnkjKiboApoKigenYmd = (String)parameterMap.get("tnkj_kibo_apo_kigen_ymd");
		if(!JCHWebCommon.isNullOrEmpty(tnkjKiboApoKigenYmd)) 
		{
			bean.sendMessageString(KKW00404SFConst.TNKJ_KIBO_APO_KIGEN_YEAR, X31CWebConst.DATABEAN_SET_VALUE, tnkjKiboApoKigenYmd.substring(0, 4));
			bean.sendMessageString(KKW00404SFConst.TNKJ_KIBO_APO_KIGEN_MON, X31CWebConst.DATABEAN_SET_VALUE, tnkjKiboApoKigenYmd.substring(4, 6));
			bean.sendMessageString(KKW00404SFConst.TNKJ_KIBO_APO_KIGEN_DAY, X31CWebConst.DATABEAN_SET_VALUE, tnkjKiboApoKigenYmd.substring(6, 8));
			// 工事希望アポ期限年月日
			StringBuffer tnkj_kibo_apo_kigen_ymd = new StringBuffer();
			tnkj_kibo_apo_kigen_ymd.append(bean.sendMessageString(KKW00401SFConst.TNKJ_KIBO_APO_KIGEN_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
			tnkj_kibo_apo_kigen_ymd.append(bean.sendMessageString(KKW00401SFConst.TNKJ_KIBO_APO_KIGEN_MON, X31CWebConst.DATABEAN_GET_VALUE));
			tnkj_kibo_apo_kigen_ymd.append(bean.sendMessageString(KKW00401SFConst.TNKJ_KIBO_APO_KIGEN_DAY, X31CWebConst.DATABEAN_GET_VALUE));
			bean.sendMessageString(KKW00401SFConst.TNKJ_KIBO_APO_KIGEN_YMD, X31CWebConst.DATABEAN_SET_VALUE, tnkj_kibo_apo_kigen_ymd.toString());
		}
		
		setSelectIndex(bean, KKW00404SFConst.TEL_RRK_KIBO_TIME, (String)parameterMap.get("tel_rrk_kibo_time"));
		setSelectIndex(bean, KKW00404SFConst.KOJI_APO_RRKS, (String)parameterMap.get("koji_apo_rrks"));
		bean.sendMessageString(KKW00404SFConst.CUST_RRKS_TELNO, X31CWebConst.DATABEAN_SET_VALUE, (String)parameterMap.get("cust_rrks_telno"));
		// オンライン運用日付取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW00404SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);	// 基準日
		
		return;
	}
	
	/**
	 * 設定ボタン押下処理です。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	public boolean set() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
	
		//エラーフラグ
		boolean errFlg = false;
		//半角文字を全角文字に変換
		if (convertFull(KKW00404SFConst.RRK_WAY_HOKI, "rrk_way_hoki"))
		{
			errFlg = true;
		}
		//半角文字を全角文字に変換
		if (convertFull(KKW00404SFConst.KOJIAK_BIKO_1, "kojiak_biko_1"))
		{
			errFlg = true;
		}
		//半角文字を全角文字に変換
		if (convertFull(KKW00404SFConst.KOJIAK_BIKO_2, "kojiak_biko_2"))
		{
			errFlg = true;
		}
		
		// エラーがあった場合、遷移しない。
		if (errFlg)
		{
			return false;
		}
		
		// 連絡手段補記
		String rrk_way_hoki = bean.sendMessageString(KKW00404SFConst.RRK_WAY_HOKI, X31CWebConst.DATABEAN_GET_VALUE);
		// 工事案件備考
		String kojiak_biko_1 = bean.sendMessageString(KKW00404SFConst.KOJIAK_BIKO_1, X31CWebConst.DATABEAN_GET_VALUE);
		// 工事案件備考
		String kojiak_biko_2 = bean.sendMessageString(KKW00404SFConst.KOJIAK_BIKO_2, X31CWebConst.DATABEAN_GET_VALUE);

		// 工事希望アポ期限年月日
		StringBuffer tnkj_kibo_apo_kigen_ymd = new StringBuffer();
		tnkj_kibo_apo_kigen_ymd.append(bean.sendMessageString(KKW00404SFConst.TNKJ_KIBO_APO_KIGEN_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		tnkj_kibo_apo_kigen_ymd.append(bean.sendMessageString(KKW00404SFConst.TNKJ_KIBO_APO_KIGEN_MON, X31CWebConst.DATABEAN_GET_VALUE));
		tnkj_kibo_apo_kigen_ymd.append(bean.sendMessageString(KKW00404SFConst.TNKJ_KIBO_APO_KIGEN_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(KKW00404SFConst.TNKJ_KIBO_APO_KIGEN_YMD, X31CWebConst.DATABEAN_SET_VALUE, tnkj_kibo_apo_kigen_ymd.toString());
		// 電話連絡希望時間帯
		String[] tel_rrk_kibo_time = getSelectCdNmComboBox(bean.getDataBeanArray(KKW00404SFConst.TEL_RRK_KIBO_TIME));
		// 工事アポ連絡先
		String[] koji_apo_rrks = getSelectCdNmComboBox(bean.getDataBeanArray(KKW00404SFConst.KOJI_APO_RRKS));
		// お客様連絡先番号
		String cust_rrks_telno = bean.sendMessageString(KKW00404SFConst.CUST_RRKS_TELNO, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 引継ぎ情報の作成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		paramMap.put("ret_rrk_way_hoki", rrk_way_hoki);
		paramMap.put("ret_kojiak_biko", kojiak_biko_1);
		paramMap.put("ret_kojiak_biko_2", kojiak_biko_2);
		paramMap.put("ret_tnkj_kibo_apo_kigen_ymd", tnkj_kibo_apo_kigen_ymd.toString());
		paramMap.put("ret_tel_rrk_kibo_time", tel_rrk_kibo_time[0]);
		paramMap.put("ret_tel_rrk_kibo_time_nm", tel_rrk_kibo_time[1]);
		paramMap.put("ret_koji_apo_rrks", koji_apo_rrks[0]);
		paramMap.put("ret_koji_apo_rrks_nm", koji_apo_rrks[1]);
		paramMap.put("ret_cust_rrks_telno", cust_rrks_telno);
		
		// 引継ぎ情報の設定
		JCCWebCommon.setScreenInfo(this, JCCWebCommon.getScreenId(this), paramMap);
		
		// モーダル反映画面へ画面遷移
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_ID_CCW00105);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JCCScreenConst.SCREEN_NAME_CCW00105);
		return true;
	}
	
	/**
	 * 閉じるボタンを押下した場合、画面をクローズ。<br>
	 * 
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean close() throws Exception
	{
		// 遷移先画面IDを取得し、子画面を閉じる共通処理を呼出す
		return JCHPageTransferUtil.closeTransfer(this, JCCWebCommon.getScreenId(this));
	}
	
	/**
	 * コンボボックスで選択されたコードと名称を返却します。
	 * <br>
	 * @param arraybean
	 * @return 選択されたコードと名称
	 */
	private String[] getSelectCdNmComboBox(X31SDataBeanAccessArray arraybean)
	{
		String select_cd = "";
		String select_nm = "";
		
		if (0 < arraybean.getCount())
		{
			X31SDataBeanAccess subbean = arraybean.getDataBean(0);
			
			// 選択インデックスから対応するコードと名称を取得
			String index = subbean.sendMessageString(KKW00404SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
			if (index != null && !"".equals(index))
			{
				select_cd = subbean.sendMessageString(KKW00404SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
				select_nm = subbean.sendMessageString(KKW00404SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
				subbean.sendMessageString(KKW00404SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_SET_VALUE, select_cd);
				subbean.sendMessageString(KKW00404SFConst.CD_DIV_NM_01, X31CWebConst.DATABEAN_SET_VALUE, select_nm);
			}
		}
		return new String[]{select_cd, select_nm};
	}
	
	/**
	 * コンボボックスから対応するコード値のインデックスを設定します。
	 * <br>
	 * @param tempBean
	 * @param componentID
	 * @param cdValue
	 */
	private void setSelectIndex(X31SDataBeanAccess tempBean, String componentID, String cdValue)
	{
		if (cdValue != null)
		{
			X31SDataBeanAccessArray arraybean = tempBean.getDataBeanArray(componentID);
			if (0 < arraybean.getCount())
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(0);
				// コードタイプコード値リストの件数
				Integer count = (Integer)subbean.sendMessage(KKW00401SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);
				String str = "";
				String strNm = "";
				for (int i = 0; i < count.intValue(); i++)
				{
					str = subbean.sendMessageString(KKW00401SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
					strNm = subbean.sendMessageString(KKW00401SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
					if (cdValue.equals(str))
					{
						// 一致した場合、インデックスを設定
						subbean.sendMessageString(KKW00401SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(i));
						subbean.sendMessageString(KKW00401SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_SET_VALUE, str);
						subbean.sendMessageString(KKW00401SFConst.CD_DIV_NM_01, X31CWebConst.DATABEAN_SET_VALUE, strNm);
						return;
					}
				}
				// 一致しない場合は"0"を設定
				subbean.sendMessageString(KKW00401SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, "0");
			}
		}
	}

	/**
	 * 半角文字を全角文字に変換し、変換できない文字があった場合はエラーとします。
	 * <dl>
	 * <dd>備考：変換できない文字は、下記表の通りです。<br>
	 * <FONT FACE="ＭＳ ゴシック">
	 * <table border=0>
	 * <tr>
	 * <td valign=left>
	 * <table border="2">
	 * <tr><th colspan=1>表1 変換できない文字<th></tr>
	 * <tr><td>ﾜﾞ<br>&#92;\uFF9C,\uFF9E</td><td>
	 * <tr><td>ｦﾞ<br>&#92;\uFF66,\uFF9E</td><td>
	 * </table>
	 * </td></tr>
	 * </table>
	 * </dl>
	 * @param dataBeanValue DataBean項目名
	 * @param id 画面項目ID
	 * @return エラーの場合:true
	 * <br>エラーでない場合:false
	 */
	private boolean convertFull(String dataBeanValue,String id)
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 対象項目の半角文字を全角文字に変換する。
		if (null != bean.sendMessageString(dataBeanValue, X31CWebConst.DATABEAN_GET_VALUE))
		{
			String con_String = JKKStringConverter.convertFullMark(bean.sendMessageString(dataBeanValue, X31CWebConst.DATABEAN_GET_VALUE));
			// エラーチェック
			if (EmsizeCharCheck.isEmsize1Check(con_String))
			{
				bean.sendMessageString(dataBeanValue, X31CWebConst.DATABEAN_SET_VALUE, con_String);
				return false;
			}
			else
			{
				JCCWebCommon.setMessageInfo(this, "EKBE760-NW", new String[]{dataBeanValue}, id);
				return true;
			}
		}
		return false;
	}
}
