/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0524_KKSV0524OPDBMapper
*	ソースファイル名：KKSV0524_KKSV0524OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2012年03月08日
*＜機能概要＞
*	BP（eo光テレビケーブルテレビガイド誌登録_コピー）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/03/08	Fujitsu		新規作成
*	v5.00.00	2013/06/21	Fujitsu		建物名と部屋番号を取得
*	v6.00.00	2013/12/29	FJ）磯俣	【OM-2013-04054】氏名・カナ名・電話番号を取得
*	v18.00.00   2015/08/11  FJ) 原田	【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
**********************************************************************/
package eo.web.webview.mapping;

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.KKA17101SF.KKW00828SFConst;

/**
 * DataBean-BPマッピングをする。
 * 
 * <BR>
 * @author 富士通
 */
public class KKSV0524_KKSV0524OPDBMapper
{
	
	/**
	 * 住所情報選択肢：契約者住所
	 */
	private static final String ADD_INFO_KEISHA = "1";
	
	/**
	 * 住所情報選択肢：回線場所住所（利用場所住所）
	 */
	private static final String ADD_INFO_KAISEN_PLACE = "2";
	
	/**
	 * 住所情報選択肢：請求先住所
	 */
	private static final String ADD_INFO_SOHUS = "3";
	
	/**
	 * コンストラクタ
	 */
	public KKSV0524_KKSV0524OPDBMapper()
	{
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：ｅｏ光テレビガイド誌登録
	 * @param outputMap
	 * @param func_code　機能コード
	 * 
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV052401CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		if(isNull(bean))
		{
			return null;
		}
		
		if(bean.length != 1)
		{
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		// 顧客引継情報
		X31SDataBeanAccessArray arrayBean = bean[0].getDataBeanArray(KKW00828SFConst.CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess subBean = arrayBean.getDataBean(0);
		// 顧客契約引継リスト.SYSID → 住所情報コピーマップ.ＫＥＹ＿SYSID
		parentMap.put("key_sysid", getValue(subBean, KKW00828SFConst.SYSID_04));
		// 顧客契約引継リスト.サービス契約番号 → 住所情報コピーマップ.ＫＥＹ＿サービス契約番号
		parentMap.put("key_svc_kei_no", getValue(subBean, KKW00828SFConst.SVC_KEI_NO_04));
		// 運用日付 → 住所情報コピーマップ.ＫＥＹ＿予約適用年月日
		parentMap.put("key_rsv_aply_ymd", getValue(bean[0], KKW00828SFConst.OPE_DATE));
		// 住所情報.コードタイプコード → 住所情報コピーマップ.住所情報選択値
		parentMap.put("addInfoValue", getSelectedValueAddInf(bean[0]));
		
		outputMap.put("AddInfoCopyCC", parentMap);
						
		return outputMap;
	}
	
	/**
	 * 下りマッピング
	 * @param bean　[0]：ｅｏ光テレビガイド誌登録
	 * @param outputMap
	 * 
	 * @return bean　[0]：ｅｏ光テレビガイド誌登録
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV052401CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		
		if(outputMap.containsKey("AddInfoCopyCC"))
		{
			parentMap = (HashMap)outputMap.get("AddInfoCopyCC");
		}
		
		// チェック対象フラグ
		boolean chkTrgtFlg = false;
		// 住所手動入力登録フラグ
		boolean adManInputFlg = false;
		
		if(!isNull(parentMap))
		{
			// 住所情報選択値
			String selValueAddInfo = getSelectedValueAddInf(bean[0]);
			
			// 契約者住所と同じ
			if(ADD_INFO_KEISHA.equals(selValueAddInfo))
			{
				chkTrgtFlg = true;
			}
			// 利用場所住所情報と同じ
			else if(ADD_INFO_KAISEN_PLACE.equals(selValueAddInfo))
			{
			}
			// 請求書送付先住所情報と同じ
			else if(ADD_INFO_SOHUS.equals(selValueAddInfo))
			{
				chkTrgtFlg = true;
			}
			
			// 住所コード
			X31SDataBeanAccessArray listBean = bean[0].getDataBeanArray(KKW00828SFConst.AD_CD);
			X31SDataBeanAccess subbean = listBean.getDataBean(0);
			// 住所コード.住所コード１ ← 住所情報コピーマップ.住所コード1
			setValue(subbean, KKW00828SFConst.AD_CD1_03, (String)parentMap.get("ad_cd1"));
			// 住所コード.住所コード２ ← 住所情報コピーマップ.住所コード2
			setValue(subbean, KKW00828SFConst.AD_CD2_03, (String)parentMap.get("ad_cd2"));
			// 住所コード.住所コード３ ← 住所情報コピーマップ.住所コード3
			setValue(subbean, KKW00828SFConst.AD_CD3_03, (String)parentMap.get("ad_cd3"));
			// 住所コード.住所コード４ ← 住所情報コピーマップ.住所コード4
			setValue(subbean, KKW00828SFConst.AD_CD4_03, (String)parentMap.get("ad_cd4"));
			
			// 郵便番号
			listBean = bean[0].getDataBeanArray(KKW00828SFConst.PCD);
			subbean = listBean.getDataBean(0);
			// 郵便番号.郵便番号１（上３桁） ← 住所情報コピーマップ.郵便番号1
			setValue(subbean, KKW00828SFConst.PCD_1_02, (String)parentMap.get("pcd1"));
			// 郵便番号.郵便番号２（下４桁） ← 住所情報コピーマップ.郵便番号2
			setValue(subbean, KKW00828SFConst.PCD_2_02, (String)parentMap.get("pcd2"));
			
			// 都道府県 ← 住所情報コピーマップ.都道府県名
			setValue(bean[0], KKW00828SFConst.STATE, (String)parentMap.get("state_nm"));
			// 市区町村 ← 住所情報コピーマップ.市区町村名
			setValue(bean[0], KKW00828SFConst.CITY, (String)parentMap.get("city_nm"));
			// 大字通称名 ← 住所情報コピーマップ.大字通称名
			setValue(bean[0], KKW00828SFConst.OAZTSU, (String)parentMap.get("oaztsu_nm"));
			// 字丁目 ← 住所情報コピーマップ.字丁目名
			setValue(bean[0], KKW00828SFConst.AZCHO, (String)parentMap.get("azcho_nm"));
			// 番地・号 ← 住所情報コピーマップ.番地号
			setValue(bean[0], KKW00828SFConst.BNCHIGO, (String)parentMap.get("bnchigo"));
			// 建物名 ← 住所情報コピーマップ.建物名
			setValue(bean[0], KKW00828SFConst.ADRTTM, (String)parentMap.get("adrttm"));
			// 部屋番号 ← 住所情報コピーマップ.部屋番号
			setValue(bean[0], KKW00828SFConst.ADRRM, (String)parentMap.get("adrrm"));
			
/* ++++++++++ v6.00.00 追加開始 ++++++++++ */
			// 氏名
			setValue(bean[0], KKW00828SFConst.SHS_NM, (String)parentMap.get("name"));
			// カナ名
			setValue(bean[0], KKW00828SFConst.SHS_KANA, (String)parentMap.get("name_kana"));
			// 電話番号
			setValue(bean[0], KKW00828SFConst.TELNO, (String)parentMap.get("telno"));
/* ++++++++++ v6.00.00 追加終了 ++++++++++ */
			
			// 住所手動入力登録フラグ
			if(chkTrgtFlg)
			{
				// 住所手動入力登録フラグ ← 住所情報コピーマップ.送付先住所手動入力フラグ
				if("1".equals((String)parentMap.get("ad_man_input_flg")))
				{
					adManInputFlg = true;
				}
			}
		}
		
		// 送付先住所手動入力登録
		if(adManInputFlg)
		{
			setValue(bean[0], KKW00828SFConst.AD_MAN_INPUT_ADD_FLG, "1");
		}
		else
		{
			setValue(bean[0], KKW00828SFConst.AD_MAN_INPUT_ADD_FLG, "0");
		}
		
		return bean;
	}
	
	/**
	 * 住所情報プルダウンで選択されたコード値を取得します。
	 * <br>
	 * @param bean 画面情報
	 * 
	 * @return String 選択されているコード値
	 * <br>
	 */
	private String getSelectedValueAddInf(X31SDataBeanAccess bean)
	{
		String code = "";
		
		// プルダウン選択値
		X31SDataBeanAccessArray comboArray = bean.getDataBeanArray(KKW00828SFConst.AD_INFO);
		X31SDataBeanAccess subbean = comboArray.getDataBean(0);
		String index = subbean.sendMessageString(KKW00828SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		
		if(index != null && index.length() > 0) 
		{
			code = subbean.sendMessageString(KKW00828SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
		}
		
		return code;
		
	}
	
	/**
	 * データBeanから指定された項目の値を取得します。
	 * <br>
	 * @param bean 画面情報
	 * @param itemName 項目名
	 * <br>
	 * @return String 項目値
	 */
	private String getValue(X31SDataBeanAccess bean, String itemName)
	{
		return bean.sendMessageString(itemName, X31CWebConst.DATABEAN_GET_VALUE);
	}
	
	/**
	 * データBeanに指定された項目の値を設定します。
	 * <br>
	 * @param bean 画面情報
	 * @param itemName 項目名
	 * @param value 設定値
	 */
	private void setValue(X31SDataBeanAccess bean, String itemName, String value)
	{
		bean.sendMessageString(itemName, X31CWebConst.DATABEAN_SET_VALUE, value);
	}
	
	/**
	 * 引数のNULL判定を行います。
	 * @param param
	 * @return 判定結果
	 */
	private boolean isNull(Object param)
	{
		if(param == null)
		{
			return true;
		}
		return false;
	}
}