/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0377_KKSV0377OPDBMapper
*	ソースファイル名：KKSV0377_KKSV0377OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2011年11月08日
*＜機能概要＞
*	BP（訪問対応依頼登録_登録確認確定サービス）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/08	Fujitsu		新規作成
*	v4.00.00	2012/11/08	FJ）宇野	【ANK-1223-00-00】対応
*	v4.01.00	2012/11/21	FJ）庭山	【IT1-2012-0002157】対応
*   v4.02.00	2013/03/27	FJ）辛	    【OT-0000527】対応
*   v4.03.00	2013/05/30	FJ）辛	    【IT1-2013-0001246】対応
*   v8.00.00	2014/02/04	FJ) 起塚	【ANK-1869-00-00】対応
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.util.JPCFomatString;
import eo.web.webview.KKW06301SF.KKW06301SFConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0377_KKSV0377OPDBMapper {
	
	/** 
	 * 改行コード <CR><LF> 
	 */
	private static final String CRLF = "\r\n";
	
	/*---v4.02.00 追加開始-------------*/
	/** 訪問対応依頼コード (2：追加) */
	private static final String VSIT_TAIO_REQ_CD = "2";
	/** DB設定値（固定値）：0 */
	private static final String DB_STATIC_VALUE_ZERO = "0";
	/** DB設定値（固定値）：1 */
	private static final String DB_STATIC_VALUE_ONE = "1";
	/** サポートコード：訪問サポート */
	private static final String SUPPORT_CD_01 = "01";
	/*---v4.02.00 追加終了-------------*/
	
	/**
	 * コンストラクタ
	 */
	public KKSV0377_KKSV0377OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：訪問対応依頼登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV037701SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}


		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// サービス契約番号 → 対応記録登録マップ.サービス契約番号
		parentMap.put("svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// ユーザーＩＤ → 対応記録登録マップ.対応ユーザーID
		parentMap.put("taio_user_id", bean[0].sendMessageString("ユーザーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// システム日付（１４桁） → 対応記録登録マップ.対応開始年月日時分秒
		parentMap.put("taio_sta_dtm", bean[0].sendMessageString("システム日付（１４桁）", X31CWebConst.DATABEAN_GET_VALUE));
		// システム日付（１４桁） → 対応記録登録マップ.受付年月日時分秒
		parentMap.put("uk_dtm", bean[0].sendMessageString("システム日付（１４桁）", X31CWebConst.DATABEAN_GET_VALUE));
		// ユーザーＩＤ → 対応記録登録マップ.ログインユーザーID
		parentMap.put("login_user_id", bean[0].sendMessageString("ユーザーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// ユーザー名 → 対応記録登録マップ.ログインユーザー名
		parentMap.put("login_user_nm", bean[0].sendMessageString("ユーザー名", X31CWebConst.DATABEAN_GET_VALUE));
		// 組織コード → 対応記録登録マップ.業務個別設定組織コード
		parentMap.put("wkkbt_org_cd", bean[0].sendMessageString("組織コード", X31CWebConst.DATABEAN_GET_VALUE));
		// 組織名 → 対応記録登録マップ.業務個別設定組織名
		parentMap.put("wkkbt_org_nm", bean[0].sendMessageString("組織名", X31CWebConst.DATABEAN_GET_VALUE));

		// 一時保存有無
		parentMap.put("tmp_save_um", "1");
		// タイトル
		parentMap.put("title", "訪問設定依頼");

		outputMap.put("KKSV037701SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：訪問対応依頼登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV037702SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}


		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// システム日付（１４桁） → 対応記録明細登録（新規登録）マップ.アクション開始年月日時分秒
		parentMap.put("action_sta_dtm", bean[0].sendMessageString("システム日付（１４桁）", X31CWebConst.DATABEAN_GET_VALUE));
		// システム日付（１４桁） → 対応記録明細登録（新規登録）マップ.アクション完了年月日時分秒
		parentMap.put("action_fin_dtm", bean[0].sendMessageString("システム日付（１４桁）", X31CWebConst.DATABEAN_GET_VALUE));
		// ユーザーＩＤ → 対応記録明細登録（新規登録）マップ.対応ユーザーID
		parentMap.put("taio_user_id", bean[0].sendMessageString("ユーザーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// ユーザーＩＤ → 対応記録明細登録（新規登録）マップ.ログインユーザーID
		parentMap.put("login_user_id", bean[0].sendMessageString("ユーザーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// ユーザー名 → 対応記録明細登録（新規登録）マップ.ログインユーザー名
		parentMap.put("login_user_nm", bean[0].sendMessageString("ユーザー名", X31CWebConst.DATABEAN_GET_VALUE));
		// 組織コード → 対応記録明細登録（新規登録）マップ.業務個別設定組織コード
		parentMap.put("wkkbt_org_cd", bean[0].sendMessageString("組織コード", X31CWebConst.DATABEAN_GET_VALUE));
		// 組織名 → 対応記録明細登録（新規登録）マップ.業務個別設定組織名
		parentMap.put("wkkbt_org_nm", bean[0].sendMessageString("組織名", X31CWebConst.DATABEAN_GET_VALUE));
		// サービス契約番号 → 対応記録明細登録（新規登録）マップ.サービス契約番号
		parentMap.put("svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// 固定値：1 → 対応記録明細登録（新規登録）マップ.クローズ不可コード
		parentMap.put("close_fail_cd", "1");

		outputMap.put("KKSV037702SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：訪問対応依頼登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV037703SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}


		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// サービス契約番号 → サービス契約回線内訳一覧照会（現在利用中）マップ.ＫＥＹ＿サービス契約番号
		parentMap.put("key_svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("KKSV037703SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：訪問対応依頼登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV037704SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}


		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// サービス契約番号 → サポート登録マップ.サービス契約番号
		parentMap.put("svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		
		// 日付・時刻項目の設定
		//訪問サポート第1希望年月日
		parentMap.put("vsit_support_kibo_ymd_1", bean[0].sendMessageString("第１希望年月日＿ＤＢ登録", X31CWebConst.DATABEAN_GET_VALUE));
		//訪問サポート第2希望年月日
		parentMap.put("vsit_support_kibo_ymd_2", bean[0].sendMessageString("第２希望年月日＿ＤＢ登録", X31CWebConst.DATABEAN_GET_VALUE));
		//訪問サポート第3希望年月日
		parentMap.put("vsit_support_kibo_ymd_3", bean[0].sendMessageString("第３希望年月日＿ＤＢ登録", X31CWebConst.DATABEAN_GET_VALUE));
		//サポート年月日
	//	parentMap.put("support_ymd", bean[0].sendMessageString("サポート年月日", X31CWebConst.DATABEAN_GET_VALUE));
		//訪問サポートメモ
		parentMap.put("vsit_support_memo", bean[0].sendMessageString("訪問サポートメモ", X31CWebConst.DATABEAN_GET_VALUE));

		//訪問サポート第1希望時間コード
		X31SDataBeanAccessArray beanAccessArrayKiboTime1 = bean[0].getDataBeanArray(KKW06301SFConst.KIBO_TIME_1_TYPE);
		X31SDataBeanAccess beanAccessKiboTime1 = beanAccessArrayKiboTime1.getDataBean(0);
	//	String idxKiboTime1 = beanAccessKiboTime1.sendMessageString(KKW06301SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("vsit_sprt_kibo_time_cd_1", beanAccessKiboTime1.sendMessageString(KKW06301SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_GET_VALUE));

		//訪問サポート第2希望時間コード
		X31SDataBeanAccessArray beanAccessArrayKiboTime2 = bean[0].getDataBeanArray(KKW06301SFConst.KIBO_TIME_2_TYPE);
		X31SDataBeanAccess beanAccessKiboTime2 = beanAccessArrayKiboTime2.getDataBean(0);
	//	String idxKiboTime2 = beanAccessKiboTime2.sendMessageString(KKW06301SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("vsit_sprt_kibo_time_cd_2", beanAccessKiboTime2.sendMessageString(KKW06301SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_GET_VALUE));

		//訪問サポート第3希望時間コード
		X31SDataBeanAccessArray beanAccessArrayKiboTime3 = bean[0].getDataBeanArray(KKW06301SFConst.KIBO_TIME_3_TYPE);
		X31SDataBeanAccess beanAccessKiboTime3 = beanAccessArrayKiboTime3.getDataBean(0);
	//	String idxKiboTime3 = beanAccessKiboTime3.sendMessageString(KKW06301SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("vsit_sprt_kibo_time_cd_3", beanAccessKiboTime3.sendMessageString(KKW06301SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_GET_VALUE));

		// サポートコード
		parentMap.put("support_cd", SUPPORT_CD_01);
		
		// 訪問サポート会社コード選択値
		X31SDataBeanAccessArray comboArray = bean[0].getDataBeanArray(KKW06301SFConst.VSIT_SPRT_COMP_CD_TYPE);
		X31SDataBeanAccess subbean = comboArray.getDataBean(0);
		parentMap.put("vsit_support_comp_cd", subbean.sendMessageString(KKW06301SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
		
		/*---v4.02.00 追加開始-------------*/
		//■ 訪問対応依頼コード選択値を取得
		X31SDataBeanAccessArray iraiArray = bean[0].getDataBeanArray(KKW06301SFConst.VSIT_TAIO_REQ_CD_TYPE);
		X31SDataBeanAccess subbeanIrai = iraiArray.getDataBean(0);
		String selIraiCD = subbeanIrai.sendMessageString(KKW06301SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
		
		//■「訪問サポート種別コード」設定
		if(VSIT_TAIO_REQ_CD.equals(selIraiCD)) //「2:追加」の場合
		{
			parentMap.put("visit_support_sbt_cd", DB_STATIC_VALUE_ONE);
		}
		else //「3:新規同時」の場合
		{
			parentMap.put("visit_support_sbt_cd", DB_STATIC_VALUE_ZERO);
		}
		
		//■「訪問サポート会社連携状態コード」設定 ⇒ 1:対象（固定値）
		parentMap.put("vsit_sprt_comp_rnk_stat_cd", DB_STATIC_VALUE_ONE);
		
		/*---v4.02.00 追加終了-------------*/
		
		outputMap.put("KKSV037704SC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：訪問対応依頼登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV037705SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// サービス契約番号 → 進捗登録マップ.サービス契約番号
		parentMap.put("svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// システム日付（１７桁） → 進捗登録マップ.異動年月日時分秒
		parentMap.put("ido_dtm", bean[0].sendMessageString("システム日付（１７桁）", X31CWebConst.DATABEAN_GET_VALUE));
		
		// ********** ANK-1223-00-00 進捗対応 str *********
		StringBuilder sb = new StringBuilder();
		
		// ********** ANK-1869-00-00対応 追加開始 *********
		// 訪問サポート会社コード選択インデックス取得
		X31SDataBeanAccessArray comboArray = bean[0].getDataBeanArray(KKW06301SFConst.VSIT_SPRT_COMP_CD_TYPE);
		X31SDataBeanAccess subbean = comboArray.getDataBean(0);
		String index = subbean.sendMessageString(KKW06301SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		// 選択インデックスより訪問サポート会社コード名称を取得して設定
		String comp_cd_nm = getNullToStr(subbean.sendMessageString(KKW06301SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index)));
		if (!"".equals(comp_cd_nm))
		{
			// 訪問サポート会社コード名称からプルダウン用の先頭番号を取除く
			int period = comp_cd_nm.indexOf(".");
			comp_cd_nm = comp_cd_nm.substring(period + 1);
		}
		sb.append("依頼先：");
		sb.append(comp_cd_nm);
		sb.append("　");
		// ********** ANK-1869-00-00対応 追加終了 *********
		
		sb.append("第1希望日：");
		sb.append(JPCFomatString.formatDate(bean[0].sendMessageString("第１希望年月日＿ＤＢ登録", X31CWebConst.DATABEAN_GET_VALUE)));
		sb.append("　");
		sb.append("第1希望時間：");
		sb.append(getPulldownName(bean[0], KKW06301SFConst.KIBO_TIME_1_TYPE, KKW06301SFConst.CD_DIV_NM_01));
//		X31SDataBeanAccessArray beanAccessArrayKiboTime1 = bean[0].getDataBeanArray(KKW06301SFConst.KIBO_TIME_1_TYPE);
//		X31SDataBeanAccess beanAccessKiboTime1 = beanAccessArrayKiboTime1.getDataBean(0);
//		sb.append(beanAccessKiboTime1.sendMessageString(KKW06301SFConst.CD_DIV_NM_01, X31CWebConst.DATABEAN_GET_VALUE));
		
		String ymd2 = bean[0].sendMessageString("第２希望年月日＿ＤＢ登録", X31CWebConst.DATABEAN_GET_VALUE);
		// 第2希望日が入力されていた場合
		if(!"".equals(ymd2))
		{
			sb.append("　第2希望日：");
			sb.append(JPCFomatString.formatDate(ymd2));
			sb.append("　");
			sb.append("第2希望時間：");
			sb.append(getPulldownName(bean[0], KKW06301SFConst.KIBO_TIME_2_TYPE, KKW06301SFConst.CD_DIV_NM_01));
		}
		
		String ymd3 = bean[0].sendMessageString("第３希望年月日＿ＤＢ登録", X31CWebConst.DATABEAN_GET_VALUE);
		// 第3希望日が入力されていた場合
		if(!"".equals(ymd3))
		{
			sb.append("　第3希望日：");
			sb.append(JPCFomatString.formatDate(ymd3));
			sb.append("　");
			sb.append("第3希望時間：");
			sb.append(getPulldownName(bean[0], KKW06301SFConst.KIBO_TIME_3_TYPE, KKW06301SFConst.CD_DIV_NM_01));
		}
		
		String memo = bean[0].sendMessageString("訪問サポートメモ", X31CWebConst.DATABEAN_GET_VALUE);
		// 訪問サポートメモが入力された場合
		if(!"".equals(memo))
		{
			sb.append("　訪問サポートメモ：");
			sb.append(memo.replace(CRLF, ""));
		}
		// 進捗特記事項
		String prg_tkjk = sb.toString();
		if(prg_tkjk.length() <= 128)
		{
			parentMap.put("prg_tkjk_1", prg_tkjk);
			parentMap.put("prg_tkjk_2", "");
		}
		else if(prg_tkjk.length() > 128 && prg_tkjk.length() <= 256)
		{
			parentMap.put("prg_tkjk_1", prg_tkjk.substring(0, 128));
			parentMap.put("prg_tkjk_2", prg_tkjk.substring(128));
		}
		else
		{
			parentMap.put("prg_tkjk_1", prg_tkjk.substring(0, 128));
			parentMap.put("prg_tkjk_2", prg_tkjk.substring(128, 256));
		}
		
		// 異動区分
//		parentMap.put("ido_div", "00023");
		parentMap.put("ido_div", bean[0].sendMessageString(KKW06301SFConst.IDO_DIV, X31CWebConst.DATABEAN_GET_VALUE));
		// ********** ANK-1223-00-00 進捗対応 end *********
		
		// 進捗ステータス
		parentMap.put("prg_stat", "1901");

		// 異動理由明細＜EKK1091D010CBSMsg1List＞
		ArrayList<HashMap<String, Object>> list1 = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> childMap1 = new HashMap<String, Object>();

		// 共通情報のマッピング
		childMap1.put("func_code", func_code);

		// ********** ANK-1223-00-00 進捗対応 str *********
		// 異動理由コード
//		childMap1.put("ido_rsn_cd", "00");
		childMap1.put("ido_rsn_cd", bean[0].sendMessageString(KKW06301SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// ********** ANK-1223-00-00 進捗対応 end *********
		
		// 異動理由メモ
		childMap1.put("ido_rsn_memo", null);
		
		list1.add(childMap1);
		parentMap.put("EKK1091D010CBSMsg1List", list1);

		outputMap.put("KKSV037705SC", parentMap);

		return outputMap;
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：キューBOXMYBOX現在格納数一覧照会マップ
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV037706SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		// key_ユーザID
		
		// ユーザーＩＤ → キューBOXMYBOX現在格納数一覧照会マップ.KEY_
		//ユーザーID
		parentMap.put("key_user_id", bean[0].sendMessageString("ユーザーＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		
		outputMap.put("KKSV037706SC", parentMap);

		return outputMap;
		
	
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：訪問対応依頼登録サーバチェックマップ
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV037707CheckData(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		//サービス契約番号
		parentMap.put("key_svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		
		//サポートコード
		parentMap.put("key_support_cd", "01");
		
		outputMap.put("CHECK_MAP", parentMap);
		
		return outputMap;
		
	
	}
	
	/**
	 * コンボボックスの名称取得メソッド
	 * <br>
	 * プルダウンの名称項目のインデックスを削除した名称を取得する
	 * 
	 * @param subbean 画面データ
	 * @param comboItemId 対象プルダウン名
	 * @param itemNme 取得対象項目名
	 * @return 
	 */
	private String getPulldownName(X31SDataBeanAccess bean, String comboItemId, String itemNme)
	{
		
		X31SDataBeanAccess comboItem = bean.getDataBeanArray(comboItemId).getDataBean(0);
		
		String name = getNullToStr(comboItem.sendMessageString(itemNme, X31CWebConst.DATABEAN_GET_VALUE));
		
		return name.substring(name.indexOf(".") + 1);
		
	}
	
	/**
	 * Nullの場合空白を返却します。
	 * @param bean
	 * @return 連結した住所コード
	 */
	private String getNullToStr(String str)
	{
		
		if(str == null){
			return "";
		}
		
		
		return str.trim();
	}

}
