/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0476_KKSV0476OPDBMapper
*	ソースファイル名：KKSV0476_KKSV0476OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2012年02月22日
*＜機能概要＞
*	BP（リモートサポート実績登録初期表示サービス）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/02/22	Fujitsu		新規作成
*	v4.00.00	2013/02/21	FJ）野口   【OT-2013-0000219】対応
*
**********************************************************************/
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.web.webview.KKW04101SF.KKW04101SFConst;
import eo.web.webview.common.JKKCommonConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0476_KKSV0476OPDBMapper {
	/* リモートサポートプラスコード値 */
	private final static String KEY_OP_SVC_CD_B021 = "B021";
	
	/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
	/* リモートサポートプラス料金コード（対象） */
	private final static String REMORT_RCS_CD_TAISYOU = "2";
	
	/* リモートサポートプラス料金コード（非対象） */
	private final static String REMORT_RCS_CD_HITAISYOU = "1";
	
	/* ++++++++++ v4.00.00 追加終了 ++++++++++ */

	/**
	 * コンストラクタ
	 */
	public KKSV0476_KKSV0476OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：リモートサポート実績登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV047601SC(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);

		// オプションサービス契約一覧取得SCマップ.ＫＥＹ＿オプションサービスコード
		// 固定値で「リモートサポートプラスコード"B021"」をセット
		parentMap.put("key_op_svc_cd", KEY_OP_SVC_CD_B021);

// ▼▼▼▼▼▼▼▼▼▼▼▼階層が違うため手動でセット▼▼▼▼▼▼▼▼▼
		// 引継情報を取得
		X31SDataBeanAccessArray custKeiHktgiList =  bean[0].getDataBeanArray(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInfo = custKeiHktgiList.getDataBean(0);
		parentMap.put("key_svc_kei_no", custKeiHktgiInfo.sendMessageString(JKKCommonConst.HKTGI_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
// ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

		outputMap.put("KKSV047601SC", parentMap);

		return outputMap;

	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：リモートサポート実績登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV047602SC(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("display_num", "1000");
		parentMap.put("display_page_num", "1");
		parentMap.put("total_search_num", "1000");
		parentMap.put("total_page_num", "1");
		parentMap.put("max_search_num", "1000");
// ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲


		// 基準年月日（制御） → リモートサポート作業一覧取得SCマップ.ＫＥＹ＿基準年月日
		parentMap.put("key_base_ymd", bean[0].sendMessageString("基準年月日（制御）", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("KKSV047602SC", parentMap);
						
		return outputMap;
	}


	/**
	 * 下りマッピング (BP -> DataBean)
	 * @param bean　[0]：リモートサポート実績登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV047601SC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV047601SC")){
			parentMap = (HashMap)outputMap.get("KKSV047601SC");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listKKSV047601SC_cust_kei_hktgi_list_EKK0351B010CBSMsg1List = bean[0].getDataBeanArray("顧客契約引継リスト");
		childList = null;
		if(listKKSV047601SC_cust_kei_hktgi_list_EKK0351B010CBSMsg1List != null && parentMap != null && parentMap.containsKey("EKK0351B010CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EKK0351B010CBSMsg1List");
			String opSvcKeiStat = "";
			String kanyuJokyo = "未加入";
			String kanyuJokyoKbn = "0";
			String kanyuTrgt = "1";
			if (childList != null) {
				for(int i = 0; i < childList.size(); i++){
					HashMap childMap = (HashMap)childList.get(i);
					// オプションサービス契約一覧照会で取得したオプションサービス契約ステータスが
					// サービス提供中(100)のデータが存在すれば"加入"、存在しなければ"未加入"を設定。
					if (childMap == null) {
						continue;
					}
					opSvcKeiStat = (String)childMap.get("op_svc_kei_stat");
					if (JKKCommonConst.SVC_KEI_STAT_100.equals(opSvcKeiStat)) {
						kanyuJokyo = "加入";
						kanyuJokyoKbn = "1";
						break;
					}
				}
				bean[0].sendMessageString(KKW04101SFConst.RMT_SPRT_PLS_KANYU_JOKYO, X31CWebConst.DATABEAN_SET_VALUE, kanyuJokyo);
				bean[0].sendMessageString(KKW04101SFConst.RMT_SPRT_PLS_KANYU_JOKYO_KBN, X31CWebConst.DATABEAN_SET_VALUE, kanyuJokyoKbn);
				bean[0].sendMessageString(KKW04101SFConst.RMT_SPRT_PLS_TRGT, X31CWebConst.DATABEAN_SET_VALUE, kanyuTrgt);
			}
		}
		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：リモートサポート実績登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV047602SC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV047602SC")){
			parentMap = (HashMap)outputMap.get("KKSV047602SC");
		}

		ArrayList childList = null;
		

		X31SDataBeanAccessArray listKKSV047602SC_rmt_support_list_EKK0661B001CBSMsg1List = bean[0].getDataBeanArray("リモートサポート作業一覧");
		childList = null;
		if(listKKSV047602SC_rmt_support_list_EKK0661B001CBSMsg1List != null && parentMap != null && parentMap.containsKey("EKK0661B001CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EKK0661B001CBSMsg1List");

			for(int i = 0; i < childList.size(); i++) {
				X31SDataBeanAccess subbean = null;
				if(listKKSV047602SC_rmt_support_list_EKK0661B001CBSMsg1List.getCount() -1 >= i) {
					subbean = listKKSV047602SC_rmt_support_list_EKK0661B001CBSMsg1List.getDataBean(i);
				} else {
					subbean = listKKSV047602SC_rmt_support_list_EKK0661B001CBSMsg1List.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null) {
					continue;
				}
			
				// リモートサポート作業一覧.リモートサポート作業項目コード ← リモートサポート作業一覧取得SCマップ.リモートサポート作業項目一覧照会（基準日指定）明細.リモートサポート作業項目コード
				if (childMap != null) {
					subbean.sendMessageString("リモートサポート作業項目コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("rmt_support_work_kmk_cd"));
				} else {
					subbean.sendMessageString("リモートサポート作業項目コード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// リモートサポート作業一覧.リモートサポート作業項目名 ← リモートサポート作業一覧取得SCマップ.リモートサポート作業項目一覧照会（基準日指定）明細.リモートサポート作業項目名
				if (childMap != null) {
					subbean.sendMessageString("リモートサポート作業項目名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("rmt_support_work_kmk_nm"));
				} else {
					subbean.sendMessageString("リモートサポート作業項目名", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 作業金額
				String amnt = (String)childMap.get("rmt_support_work_amnt");
				if (childMap != null) {
					String prcCd = (String)childMap.get("rmt_support_prc_cd");
					// リモートサポート作業一覧の料金コードが"2"の場合
					
					/* ++++++++++ v4.00.00 修正開始 ++++++++++ */
//					if ("1".equals(prcCd)) {
					if (REMORT_RCS_CD_TAISYOU.equals(prcCd)) {
					/* ++++++++++ v4.00.00 修正終了 ++++++++++ */
						
						// リモートサポート作業一覧.作業金額（対象） ← リモートサポート作業一覧取得SCマップ.リモートサポート作業項目一覧照会（基準日指定）明細.リモートサポート作業金額
						subbean.sendMessageString("作業金額（対象）", X31CWebConst.DATABEAN_SET_VALUE, amnt);
					// リモートサポート作業一覧の料金コードが"1"の場合
						
					/* ++++++++++ v4.00.00 修正開始 ++++++++++ */
//					} else if ("2".equals(prcCd)) {
					} else if (REMORT_RCS_CD_HITAISYOU.equals(prcCd)) {
					/* ++++++++++ v4.00.00 修正終了 ++++++++++ */
						
						// リモートサポート作業一覧.作業金額（非対象） ← リモートサポート作業一覧取得SCマップ.リモートサポート作業項目一覧照会（基準日指定）明細.リモートサポート作業金額
						subbean.sendMessageString("作業金額（非対象）", X31CWebConst.DATABEAN_SET_VALUE, amnt);
					}
				}

				// 作業金額（対象）が空の場合
				if ("".equals(subbean.sendMessageString("作業金額（対象）", X31CWebConst.DATABEAN_GET_VALUE))) {
					// "0"で初期化する
					subbean.sendMessageString("作業金額（対象）", X31CWebConst.DATABEAN_SET_VALUE, "0");
				}
				// 作業金額（非対象）が空の場合
				if ("".equals(subbean.sendMessageString("作業金額（非対象）", X31CWebConst.DATABEAN_GET_VALUE))) {
					// "0"で初期化する
					subbean.sendMessageString("作業金額（非対象）", X31CWebConst.DATABEAN_SET_VALUE, "0");
				}
			}
		}
		return bean;
	}
}
