/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：DKW00301SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年07月20日
*＜機能概要＞
*   返品機器承認を処理するロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/07/20   FJ          新規作成
*   v5.00.00    2013/10/29   FJ          取消処理修正(OM-2013-0003584)
*   v7.00.00    2014/02/24   FJ          EKK0341B514修正に伴うエラーメッセージ出力追加(OM-2014-0000707)
*   v10.00.00	2014/08/06   FJ          ANK-2141-00-00（STB交換方法の変更）
*   v10.00.01	2014/08/22   FJ)横田     IT1-2014-0000292（STB交換方法の変更）
*   v10.00.02	2014/10/08   FJ)中野     IT1-2014-0000320
*   v13.00.00	2015/03/10   FJ)舩橋     ANK-2406-00-00（返品承認一覧画面）
*	v13.00.01	2015/04/03   FJ)窪田     OM-2015-0000671対応
*   v33.00.00   2017/08/23   FJ)周藤     【ANK-3080-00-00】返品承認時の自動アンリンク処理追加
**********************************************************************/
package eo.web.webview.DKW00301SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.web.x00.JCCWebServiceException;
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 com.fujitsu.futurity.web.x33.X33SException;

import eo.common.constant.JDKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JDKCommonUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.DKW00305SF.DKW00305SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JDKScreenConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.DKSV0078_DKSV0078OPDBMapper;
import eo.web.webview.mapping.DKSV0079_DKSV0079OPDBMapper;
import eo.web.webview.mapping.DKSV0081_DKSV0081OPDBMapper;
//import eo.web.webview.mapping.DKSV0082_DKSV0082OPDBMapper;
import eo.web.webview.mapping.DKSV0084_DKSV0084OPDBMapper;
import static eo.common.constant.JPCModelConstant.*;
import static eo.common.constant.JPCOnlineMessageConstant.*;
import static eo.common.util.JDKCommonUtil.join;
import static eo.web.webview.common.JDKScreenConst.*;
import static eo.web.webview.common.JDKWebCommon.*;
import static eo.web.webview.DKW00301SF.DKW00301SFConst.*;


/**
 * 返品機器承認画面を処理するロジッククラスです。
 * @author 富士通
 */
public class DKW00301SFLogic extends JCCWebBusinessLogic
{
	
	/** シリアルNo */
	private static final long serialVersionUID = 1L;

	// CSV関連
	/** データ行 */
	private static final String RECORD_TRAILER = "83";
	/** トレーラ行 */
	private static final String RECORD_DATA = "81";
	
	// 画面モード
	/** 検索機能 */
	private static final int SEARCH_MODE = 0;
	/** 一覧機能 */
	private static final int SEARCH_RESULT_MODE = 1;
	/** 承認機能 */
	private static final int APPROVE_MODE = 2;
	/** 取消機能 */
	private static final int CANCEL_MODE = 3;
	
	// サービス
	/** 返品承認一覧照会初期表示 */
	private static final String DKSV0078 = "DKSV0078";
	/** 返品承認一覧照会 */
	private static final String DKSV0079 = "DKSV0079";
	/** 返品機器承認 */
	private static final String DKSV0081 = "DKSV0081";
//	/** 返品機器取消 */
//	private static final String DKSV0082 = "DKSV0082";
	/** 提供種別コード取得 */
	private static final String DKSV0084 = "DKSV0084";
	
	// メッセージ
	/** 返品承認登録 */
	private static final String MSG_APPROVE = "返品承認登録";
	/** 返品受入取消 */
	private static final String MSG_CANCEL = "返品受入取消";
	
	// CSVファイル名
	/** ファイル名 */
	private static final String CSV_FILE_NAME = "返品データ.csv";
	
	// CSS
	/** 承認のスタイル */
	private static final String CSS_SYONIN = "TableScrollMainDkw00302Syonin";
	/** 取消のスタイル */
	private static final String CSS_TORIKESHI = "TableScrollMainDkw00302Torikeshi";

	/** セッションに保管する文字列データのキー */
	private static final String [] SEARCH_CONDITION_KEIES = {SEARCH_SVKEI_NO
																	, SEARCH_ANKEN_NO
																	, SEARCH_SEIZO_NO
																	, SEARCH_YMD_STA
																	, SEARCH_YMD_END
																	, SEARCH_SHONIN_YMD_STA
																	, SEARCH_SHONIN_YMD_END
																	, SEARCH_HMPIN_KIKI_NO
																	, SEARCH_HMPIN_CHSHT_JOKEN
																	, SEARCH_UKEIRE_SK
																	, SEARCH_HMPIN_SBT
																	, SEARCH_MDL_NO
																	, SEARCH_SEARCH_YMD_CHOICE
																	};
	

// ANK-2406-00-00 ADD START
	/** 機器提供サービスステータス名一覧 */
	private static final String[][] KIKI_STAT_LIST = 
	{
		{"020", "照査済み"},
		{"030", "締結済み"},
		{"100", "契約中"},
		{"110", "契約変更中"},
		{"210", "休止・中断中"},
		{"220", "停止中"}
	};
// ANK-2406-00-00 ADD END
	
	/**
	 * 初期化処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0078);
		DKSV0078_DKSV0078OPDBMapper mapper = new DKSV0078_DKSV0078OPDBMapper();
		mapper.setDKSV0078SC(paramBean, inputMap, FUNC_CD_1);

		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		mapper.getDKSV007801SC(paramBean, outputMap);
		mapper.getDKSV007802SC(paramBean, outputMap);
		mapper.getDKSV007803SC(paramBean, outputMap);
		mapper.getDKSV007804SC(paramBean, outputMap);
		mapper.getDKSV007805SC(paramBean, outputMap);
		
//		pushEmptyToTopOfPulldown(I_HMPIN_CHSHT_JOKEN, I_CD_CD_LIST_02, I_CD_NM_LIST_02);
		pushEmptyToTopOfPulldown(I_UKEIRE_SK, I_UKEIRE_SK_CD_LIST_01, I_UKEIRE_SK_NM_LIST_01, "");
		pushEmptyToTopOfPulldown(I_HMPIN_SBT, I_CD_CD_LIST_02, I_CD_NM_LIST_02, "");
		pushEmptyToTopOfPulldown(I_SEARCH_YMD_CHOICE, I_CD_CD_LIST_02, I_CD_NM_LIST_02, "検索日付選択");
		pushEmptyToTopOfPulldown(I_MDL_NO, I_MDL_CD_LIST_03, I_MDL_NM_LIST_03, "");

		appendPrefix(getBean(this, I_HMPIN_CHSHT_JOKEN), I_CD_NM_LIST_02);

		setNextScreen(SCREEN_ID_DKW00301, SCREEN_NAME_DKW00301);
		
		if (!restoreConditionFromSession())
		{
			return true;
		}
		
		restoreSearchCondition();
		if (!innerSearch(FUNC_CD_1, SEARCH_RSLT_LIST, true))
		{
			return true;
		}
		setScreenMode(SEARCH_RESULT_MODE);
		
		String selectedNo = getData(this, SEARCH_HMPIN_KIKI_NO);
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int length = list.getCount();
		for (int i = 0;i < length;i++)
		{
			String noOnLine = getData(list.getDataBean(i), L_HMPIN_KIKI_NO_05);
			if (noOnLine.equals(selectedNo))
			{
				setData(list.getDataBean(i), true, L_CHOICE_05);
				break;
			}
		}
		bean.sendMessage(SEARCH_HMPIN_KIKI_NO, X31CWebConst.DATABEAN_CLEAR);
		
		return true;
	}
	
	/**
	 * 検索ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	public boolean search() throws Exception
	{
		storeSearchCondition();
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW00301);
		boolean errorOnSearch = innerSearch(FUNC_CD_1, SEARCH_RSLT_LIST, true);
		setScreenMode(errorOnSearch ? SEARCH_RESULT_MODE : SEARCH_MODE);
		setNextScreen(SCREEN_ID_DKW00301, SCREEN_NAME_DKW00301);
		return true;
	}
	
	
	/**
	 * ページング処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	public boolean paging() throws Exception
	{
		innerSearch(FUNC_CD_1, SEARCH_RSLT_LIST, true);
		setNextScreen(SCREEN_ID_DKW00301, SCREEN_NAME_DKW00301);
		return true;
	}
	
	
	/**
	 * 承認ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean approve() throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();
		
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0084);
		
		DKSV0084_DKSV0084OPDBMapper mapper = new DKSV0084_DKSV0084OPDBMapper();
		mapper.setDKSV008401SC(paramBean, inputMap, FUNC_CD_1);

		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		mapper.getDKSV008401SC(paramBean, outputMap);
		
		setData(this, CSS_SYONIN, STYLE);
		transportSelectedData(true);
		setScreenMode(APPROVE_MODE);
		setNextScreen(SCREEN_ID_DKW00302, SCREEN_NAME_DKW00302);
		JCCWebCommon.setMessageInfo(this, EKB1220__I, new String [] { MSG_APPROVE});
		
		X31SDataBeanAccessArray list = bean.getDataBeanArray(SEARCH_RSLT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++)
		{
			X31SDataBeanAccess data = list.getDataBean(i);
			
			X31SDataBeanAccessArray selections = data.getDataBeanArray(KIKI_TEIKYO_CD_LIST);
			makeKikiTeikyoSelection(selections);
		}
		
		return true;
	}
	
	
	/**
	 * 取消ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	public boolean cancel() throws Exception
	{
		setData(this, CSS_TORIKESHI, STYLE);
		transportSelectedData(false);
		setScreenMode(CANCEL_MODE);
		setNextScreen(SCREEN_ID_DKW00302, SCREEN_NAME_DKW00302);
		JCCWebCommon.setMessageInfo(this, EKB1220__I, new String [] { MSG_CANCEL});
		
		return true;
	}
	
	
	/**
	 * 受入詳細ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean detail() throws Exception
	{
		HashMap detailMap = new HashMap();
		detailMap.put(DKW00305SFConst.HMPIN_KIKI_NO, getSelectedHmpinKikiCd());
		
		JCCWebCommon.setScreenInfo(this, JDKScreenConst.SCREEN_ID_DKW00305, detailMap);
		JCCWebCommon.setScreenId(this, JDKScreenConst.SCREEN_ID_DKW00305, SCREEN_ID_DKW00301);

		HashMap myMap = new HashMap();
		setData(this, getSelectedHmpinKikiCd(), SEARCH_HMPIN_KIKI_NO);
		for (String key : SEARCH_CONDITION_KEIES)
		{
			myMap.put(key, getData(this, key));
		}
		myMap.put(SEARCH_HMPIN_KIKI_NO, getSelectedHmpinKikiCd());
		JCCWebCommon.setScreenInfo(this, JDKScreenConst.SCREEN_ID_DKW00301 + "0PJP", myMap);
		
		setNextScreen(SCREEN_ID_DKW00305, SCREEN_NAME_DKW00305);
		return true;
	}
	
	
	/**
	 * クリアボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	public boolean clear() throws Exception
	{
		setData(this, 0L, I_HMPIN_CHSHT_JOKEN, I_CD_INDEX_02);
		setData(this, 0L, I_UKEIRE_SK, I_UKEIRE_SK_INDEX_01);
		setData(this, 0L, I_HMPIN_SBT, I_CD_INDEX_02);
		setData(this, "", I_SVKEI_NO);
		setData(this, "", I_ANKEN_NO);
		setData(this, 0L, I_MDL_NO, I_MDL_INDEX_03);
		setData(this, "", I_SEIZO_NO);
		setData(this, 0L, I_SEARCH_YMD_CHOICE, I_CD_INDEX_02);
		setData(this, "", I_YMD_STA, YEAR_04);
		setData(this, "", I_YMD_STA, MONTH_04);
		setData(this, "", I_YMD_STA, DAY_04);
		setData(this, "", I_YMD_STA, YMD_04);
		setData(this, "", I_YMD_END, YEAR_04);
		setData(this, "", I_YMD_END, MONTH_04);
		setData(this, "", I_YMD_END, DAY_04);
		setData(this, "", I_YMD_END, YMD_04);
		setData(this, "", I_SHONIN_YMD_STA, YEAR_04);
		setData(this, "", I_SHONIN_YMD_STA, MONTH_04);
		setData(this, "", I_SHONIN_YMD_STA, DAY_04);
		setData(this, "", I_SHONIN_YMD_STA, YMD_04);
		setData(this, "", I_SHONIN_YMD_END, YEAR_04);
		setData(this, "", I_SHONIN_YMD_END, MONTH_04);
		setData(this, "", I_SHONIN_YMD_END, DAY_04);
		setData(this, "", I_SHONIN_YMD_END, YMD_04);
		
		getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST).clearArray();

		storeSearchCondition();
		
		setScreenMode(SEARCH_MODE);
		setNextScreen(SCREEN_ID_DKW00301, SCREEN_NAME_DKW00301);
		
		init();
		
		return true;
	}
	
	
	/**
	 * CSV出力ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	public boolean outputCsv() throws Exception
	{
		innerSearch(FUNC_CD_2, SEARCH_RSLT_LIST_CSV, false);
		JCCWebCommon.setTempDownloadFile(this, buildFile().getBytes(JDKStrConst.CHAR_SET_WIN31J), CSV_FILE_NAME);
		getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST_CSV).clearArray();
		return true;
	}

	
	/**
	 * 登録確認ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean confirm() throws Exception
	{
		boolean inApproveMode = getDataL(this, SCREEN_MODE) == APPROVE_MODE;
		if (inApproveMode)
		{
			X31SDataBeanAccess teikyoKbList = getBean(this, L_KIKI_KEI_DIV);
			X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
			int size = list.getCount();
			for (int i = 0 ; i < size ; i++)
			{
				X31SDataBeanAccess data = list.getDataBean(i);
				int index = getDataL(data, L_KIKI_KEI_DIV_SELECT_INDEX_05).intValue();
	
				String cd = teikyoKbList.sendMessageString(I_CD_CD_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, index);
				String nm = teikyoKbList.sendMessageString(I_CD_NM_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, index);
	
				setData(data, cd, L_KIKI_KEI_DIV_05);
				setData(data, nm, L_KIKI_KEI_DIV_NM_05);
				String inputSvcKeino = getData(data, L_SVKEI_NO_INPUT_05);
				if (!JDKCommonUtil.isNull(inputSvcKeino))
				{
					setData(data, inputSvcKeino, L_SVKEI_NO_05);
				}
			}
		}
		else
		{
			X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
			int size = list.getCount();
			for (int i = 0 ; i < size ; i++)
			{
				X31SDataBeanAccess data = list.getDataBean(i);
				String inputSvcKeino = getData(data, L_SVKEI_NO_INPUT_05);
				// お客さまID(画面入力)
				if (!JDKCommonUtil.isNull(inputSvcKeino))
				{
					setData(data, inputSvcKeino, L_SVKEI_NO_05);
				}
				
				String teikyoCd = getData(data, L_KIKI_KEI_DIV_05);
				// 機器契約区分(提供種別コード)
				if (JDKCommonUtil.isNull(teikyoCd))
				{
					// 設定されていなかった場合はデフォルト値として「なし」を設定する
					setData(data, "00", L_KIKI_KEI_DIV_05);
				}
			}
		}
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		if (inApproveMode)
		{
			// 承認
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0081);
			DKSV0081_DKSV0081OPDBMapper mapper = new DKSV0081_DKSV0081OPDBMapper();
			mapper.setDKSV008101SC(paramBean, inputMap, FUNC_CD_2, true);
		}
		else
		{
			// 取消
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0081);
			DKSV0081_DKSV0081OPDBMapper mapper = new DKSV0081_DKSV0081OPDBMapper();
			mapper.setDKSV008101SC(paramBean, inputMap, FUNC_CD_2, false);
		}
		
		X31CMessageResult result = null;
		JCCWebServiceException inputException = null;
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException e)
		{
			inputException = e;
			result = e.getMessageList();
		}
		
		// 承認と取消は同じチェック
//		if (inApproveMode)
//		{

//ANK-2406-00-00 MOD START
//			if (reportErrorSubstituteOrBroken("kktk_svc_kiy_no_hmpin_kbn", L_KKTK_SVC_CD_05, outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//			if (reportErrorSubstituteOrBroken("svc_kiy_no_hmpin_kbn", L_SVKEI_NO_INPUT_05, outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//			if (reportErrorKktkSvcKei("kktk_svc_kiy_no_nodata", L_KKTK_SVC_CD_05, outputMap, result, inApproveMode))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//			if (reportErrorKktkSvcKei("svc_kiy_no_nodata", L_SVKEI_NO_INPUT_05, outputMap, result, inApproveMode))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//IT1-2014-0000292 ADD START
//			if (reportErrorRinkchu("kktk_svc_kiy_no_rink", L_KKTK_SVC_CD_05, outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//			if (reportErrorRinkchu("svc_kiy_no_rink", L_SVKEI_NO_INPUT_05, outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//IT1-2014-0000292 ADD END
//			if (reportErrorRentalAndContract("kktk_svc_kiy_no", L_KKTK_SVC_CD_05, outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//			if (reportErrorRentalAndContract("svc_kiy_no", L_SVKEI_NO_INPUT_05, outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//IT1-2014-0000292 DEL START
//			// ANK-2141-00-00 ADD START
//			if (reportErrorRinkchu("kktk_svc_kiy_no_rink", L_KKTK_SVC_CD_05, outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//			if (reportErrorRinkchu("svc_kiy_no_rink", L_SVKEI_NO_INPUT_05, outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}
//			// ANK-2141-00-00 ADD END
//IT1-2014-0000292 DEL END
//			if (reportErrorContractNotFound(outputMap, result))
//			{
//				clearInputSvcKei();
//				return true;
//			}

		// 承認/取消
		String strApproveMode;
		if (inApproveMode) {
			strApproveMode="承認";
		}
		else {
			strApproveMode="取消";
		}
		
		// 機器提供サービス契約存在なしエラー処理
		reportErrorKikiMi(outputMap, result, strApproveMode);

		// 代替機または故障品エラー処理
		reportErrorKikiHen(outputMap, result);

// ANK-3080-00-00 DEL START
		//// リンクエラー処理
		//reportErrorKikiRink(outputMap, result);
// ANK-3080-00-00 DEL END

		// 機器提供サービス契約存在エラー処理
		reportErrorKikiSon(outputMap, result, strApproveMode);

		// 機器提供サービス契約ステータスエラー処理
		reportErrorKikiStat(outputMap, result, strApproveMode);

//		if (inputException != null)
//		{
//			clearInputSvcKei();
//			throw inputException;
//		}

		// 全エラーリスト確認処理
		if (checkAllErrorList(outputMap, result, inApproveMode))
		{
			return true;
		}
//ANK-2406-00-00 MOD END
//		}
		
		setNextScreen(SCREEN_ID_DKW00303, SCREEN_NAME_DKW00303);
		long screenMode = getDataL(this, SCREEN_MODE);
		JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] { screenMode == APPROVE_MODE ? MSG_APPROVE : MSG_CANCEL });
		return true;
	}
	
	
	/**
	 * （検索画面へ）戻るボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	public boolean returnToSearch() throws Exception
	{
		setScreenMode(SEARCH_RESULT_MODE);
		restoreSearchCondition();
		paging();
		setNextScreen(SCREEN_ID_DKW00301, SCREEN_NAME_DKW00301);
		return true;
	}
	
	
	/**
	 * 確定ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean fix() throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();
		
		if (getDataL(this, SCREEN_MODE) == APPROVE_MODE)
		{
			// 承認
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0081);
			DKSV0081_DKSV0081OPDBMapper mapper = new DKSV0081_DKSV0081OPDBMapper();
			mapper.setDKSV008101SC(paramBean, inputMap, FUNC_CD_1, true);
		}
		else if (getDataL(this, SCREEN_MODE) == CANCEL_MODE)
		{
			// 取消
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0081);
			DKSV0081_DKSV0081OPDBMapper mapper = new DKSV0081_DKSV0081OPDBMapper();
			mapper.setDKSV008101SC(paramBean, inputMap, FUNC_CD_1, false);
		}
		
// ANK-3080-00-00 DEL START
//		X31CMessageResult msgResult = null;
//		invokeService(paramMap, inputMap, outputMap);
//		
//		if(msgResult != null)
//		{
//			String messageId = msgResult.getMessageIdList()[0];
//			String message = msgResult.getMessageList()[0];
//			JCCWebCommon.setMessageInfo(this, messageId, message);
//			return true;
//		}
// ANK-3080-00-00 DEL END
		
// ANK-3080-00-00 ADD START
		String result = null;
		JCCWebServiceException inputException = null;
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (Exception svcErr)
		{
			HashMap<String, Object> unlinkErrMap = (HashMap)outputMap.get("DKSV008101CC");
			if (unlinkErrMap != null)
			{
				String unlinkErrCd = (String)unlinkErrMap.get("err_cd");
				
				if ("1".equals(unlinkErrCd) || "2".equals(unlinkErrCd))
				{
					if ("1".equals(unlinkErrCd))
					{
						if (unlinkErrMap.containsKey("kktk_svc_kiy_unlink_unyo_err_list"))
						{

							for (HashMap<String, Object> error : (List<HashMap<String, Object>>)unlinkErrMap.get("kktk_svc_kiy_unlink_unyo_err_list"))
							{
								String index = getIndexOfMeisai(error.get("key_unlink_unyo_hmpin_kiki_no").toString());
								JCCWebCommon.setMessageInfo(this, EKB9220_KW, new String [] { "仮登録または本運用"}, "L_KIKI_KEI_DIV_INDEX" + index);
							}
						}
					}
					else if ("2".equals(unlinkErrCd))
					{
						if (unlinkErrMap.containsKey("kktk_svc_kiy_unlink_link_err_list"))
						{
							for (HashMap<String, Object> error : (List<HashMap<String, Object>>)unlinkErrMap.get("kktk_svc_kiy_unlink_link_err_list"))
							{
								String index = getIndexOfMeisai(error.get("key_unlink_link_hmpin_kiki_no").toString());
								JCCWebCommon.setMessageInfo(this, EKB9220_KW, new String [] { "リンク中（視聴可能）"}, "L_KIKI_KEI_DIV_INDEX" + index);
							}
						}
					}
				}
			}
			throw svcErr;
// ANK-3080-00-00 ADD START
		}
		
// ANK-3080-00-00 ADD START
//		// アンリンクエラー処理
//		unlinkErrFlg = reportErrorKikiUnrink(outputMap, result);
//		if(unlinkErrFlg)
//		{
//			return true;
//		}
// ANK-3080-00-00 ADD END
		
		Map<String, String> errors = extract(outputMap, endWith("_err"));
		if (!errors.isEmpty())
		{
			JCCWebCommon.setMessageInfo(this, EKB0320_KW);
			return true;
		}
		
		long screenMode = getDataL(this, SCREEN_MODE);
		JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] { screenMode == APPROVE_MODE ? MSG_APPROVE : MSG_CANCEL });
		
		setNextScreen(SCREEN_ID_DKW00304, SCREEN_NAME_DKW00304);
		return true;
	}
	
	
	/**
	 * 修正ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	public boolean modify() throws Exception
	{
		JCCWebCommon.setMessageInfo(this, EKB1220__I, new String [] { getDataL(this, SCREEN_MODE) == APPROVE_MODE ? MSG_APPROVE : MSG_CANCEL });
		setNextScreen(SCREEN_ID_DKW00302, SCREEN_NAME_DKW00302);

		clearInputSvcKei();
		
		return true;
	}
	
	
	/**
	 * 手入力されたサービス契約番号をクリアする
	 */
	private void clearInputSvcKei()
	{
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++)
		{
			X31SDataBeanAccess data = list.getDataBean(i);
			
			String svkeiNo = getData(data, L_SVKEI_NO_INPUT_05);
			if (!JDKCommonUtil.isNull(svkeiNo))
			{
				setData(data, "", L_SVKEI_NO_05);
			}
		}
	}
	
	
	/**
	 * 完了ボタン押下処理を行います。
	 * @return 処理実行結果
	 * @throws Exception 例外発生時
	 */
	public boolean fin() throws Exception
	{
		storeSearchCondition();
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW00301);
		boolean errorOnSearch = innerSearch(FUNC_CD_1, SEARCH_RSLT_LIST, true);
		setScreenMode(errorOnSearch ? SEARCH_RESULT_MODE : SEARCH_MODE);
		setNextScreen(SCREEN_ID_DKW00301, SCREEN_NAME_DKW00301);
		return true;
	}
	
	
	
	
	/**
	 * セッションに格納した検索条件を復元します。
	 * @return 成否
	 */
	@SuppressWarnings("unchecked")
	private boolean restoreConditionFromSession()
	{
		HashMap map = JCCWebCommon.getScreenInfo(this);
		if (map == null)
		{
			return false;
		}

		for (String key : SEARCH_CONDITION_KEIES)
		{
			setData(this, (String)map.get(key), key);
		}
		
		
		return true;
	}
	
	
	
	/**
	 * 選択レコードの返品機器番号を取得します。
	 * @return 選択された返品機器コード
	 */
	private String getSelectedHmpinKikiCd()
	{
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++)
		{
			X31SDataBeanAccess data = list.getDataBean(i);
			if (getDataB(data, L_CHOICE_05))
			{
				return getData(data, L_HMPIN_KIKI_NO_05);
			}
		}
		return "";
	}
	
// ANK-2406-00-00 MOD START
//	/**
//	 * 代替機または故障品の場合はエラーを報告する
//	 * @param sifTagname サービスインターフェイスタグ名
//	 * @param viewTagname 画面タグ名
//	 * @param outputMap サービスの出力
//	 * @param receivedErrors エラー情報
//	 * @return エラーがあった場合:true なかった場合:false
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean reportErrorSubstituteOrBroken(String sifTagname, String viewTagname, HashMap outputMap, X31CMessageResult receivedErrors)
//	{
//		List<String> errors = new DKSV0081_DKSV0081OPDBMapper().getErrorSvcNos(outputMap, sifTagname);
//		
//		if (JDKCommonUtil.isNull(errors))
//		{
//			return false;
//		}
//		if (errors.isEmpty())
//		{
//			return false;
//		}
//
//		boolean satAnyError = false;
//		for (String error : errors)
//		{
//			String index = getIndexOfContractNo(error, viewTagname);
//			if ("".equals(index))
//			{
//				continue;
//			}
//			
//			satAnyError = true;
//			JCCWebCommon.setMessageInfo(this, EKBE107_KW, new String [] { "返品取消後、未返却回収登録", index }, "L_SVKEI_NO_INPUT" + index);
//		}
//		return satAnyError;
//	}
//
//	/**
//	 * 機器提供サービス契約にデータが存在しない場合はエラーを報告する
//	 * @param sifTagname サービスインターフェイスタグ名
//	 * @param viewTagname 画面タグ名
//	 * @param outputMap サービスの出力
//	 * @param receivedErrors エラー情報
//	 * @param inApproveMode 画面モード
//	 * @return エラーがあった場合:true なかった場合:false
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean reportErrorKktkSvcKei(String sifTagname, String viewTagname, HashMap outputMap, X31CMessageResult receivedErrors, boolean inApproveMode)
//	{
//		List<String> errors = new DKSV0081_DKSV0081OPDBMapper().getErrorSvcNos(outputMap, sifTagname);
//		
//		if (JDKCommonUtil.isNull(errors))
//		{
//			return false;
//		}
//		if (errors.isEmpty())
//		{
//			return false;
//		}
//
//		boolean satAnyError = false;
//		for (String error : errors)
//		{
//			String index = getIndexOfContractNo(error, viewTagname);
//			if ("".equals(index))
//			{
//				continue;
//			}
//			
//			satAnyError = true;
//			
//			if (inApproveMode)
//			{
//				// 承認
//				JCCWebCommon.setMessageInfo(this, EKB9750_KW, new String [] { "承認", index }, "L_SVKEI_NO_INPUT" + index);
//			}
//			else
//			{
//				// 取消
//				JCCWebCommon.setMessageInfo(this, EKB9750_KW, new String [] { "取消", index }, "L_SVKEI_NO_INPUT" + index);
//			}
//			
//		}
//		return satAnyError;
//	}
//
//	/**
//	 * 契約中なのにレンタルが指定された場合はエラーを報告する
//	 * @param outputMap サービスの出力
//	 * @return エラーがあった場合:true なかった場合:false
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean reportErrorRentalAndContract(String sifTagname, String viewTagname, HashMap outputMap, X31CMessageResult receivedErrors)
//	{
//		List<String> errors = new DKSV0081_DKSV0081OPDBMapper().getErrorSvcNos(outputMap, sifTagname);
//		
//		if (JDKCommonUtil.isNull(errors))
//		{
//			return false;
//		}
//		if (errors.isEmpty())
//		{
//			return false;
//		}
//
//		boolean satAnyError = false;
//		for (String error : errors)
//		{
//			String index = getIndexOfContractNo(error, viewTagname);
//			if ("".equals(index))
//			{
//				continue;
//			}
//			satAnyError = true;
//			JCCWebCommon.setMessageInfo(this, EKB0860_JW, new String [] { "機器", "レンタル品で契約中", index }, "L_KIKI_KEI_DIV_INDEX" + index);
//		}
//		return satAnyError;
//	}	
//	// ANK-2141-00-00 ADD START
//	/**
//	 *STB機器(STB/C-CAS)でリンク中（視聴可能）の場合はエラーを報告する
//	 * @param outputMap サービスの出力
//	 * @return エラーがあった場合:true なかった場合:false
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean reportErrorRinkchu(String sifTagname, String viewTagname, HashMap outputMap, X31CMessageResult receivedErrors)
//	{
//		List<String> errors = new DKSV0081_DKSV0081OPDBMapper().getErrorSvcNos(outputMap, sifTagname);
//		
//		if (JDKCommonUtil.isNull(errors))
//		{
//			return false;
//		}
//		if (errors.isEmpty())
//		{
//			return false;
//		}
//
//		boolean satAnyError = false;
//		for (String error : errors)
//		{
//			String index = getIndexOfContractNo(error, viewTagname);
//			if ("".equals(index))
//			{
//				continue;
//			}
//			satAnyError = true;
//			JCCWebCommon.setMessageInfo(this, EKB0860_JW, new String [] { "機器", "リンク中（視聴可能）", index }, "L_KIKI_KEI_DIV_INDEX" + index);
//		}
//		return satAnyError;
//	}	
//	// ANK-2141-00-00 ADD END	
//	@SuppressWarnings("unchecked")
//	private boolean reportErrorContractNotFound(HashMap outputMap, X31CMessageResult receivedErrors)
//	{
//		List<String> errors = new DKSV0081_DKSV0081OPDBMapper().getErrorSvcNos(outputMap, "svc_kei_no");
//		
//		if (JDKCommonUtil.isNull(errors))
//		{
//			return false;
//		}
//		if (errors.isEmpty())
//		{
//			return false;
//		}
//		
//		for (String error : errors)
//		{
//			String index = getIndexOfContractNo(error, L_SVKEI_NO_INPUT_05);
//			JCCWebCommon.setMessageInfo(this, EKB0720_KW, new String [] { "返品機器", "お客さまIDと型番号", index }, "L_SVKEI_NO_INPUT" + index);
//		}
//		return true;
//	}
	
	/**
	 * 返品機器に存在しない場合はエラーを報告する
	 * @param outputMap サービスの出力
	 * @param receivedErrors エラー情報
	 * @return エラーがあった場合:true なかった場合:false
	 */
	@SuppressWarnings("unchecked")
	private void reportErrorKikiMi(HashMap outputMap, X31CMessageResult receivedErrors, String strApproveMode)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey("DKSV008101CC"))
		{
			parentMap = (HashMap)outputMap.get("DKSV008101CC");
		}
		
		if (!parentMap.containsKey("kktk_svc_kiy_mi_err_list"))
		{
			return;
		}

		for (HashMap<String, Object> error : (List<HashMap<String, Object>>)parentMap.get("kktk_svc_kiy_mi_err_list"))
		{
			String index = getIndexOfMeisai(error.get("key_hmpin_kiki_no").toString());
			// OM-2015-0000671 MOD START
			//JCCWebCommon.setMessageInfo(this, EKBE180_JW, new String [] { "指定の機器", "検索出来ない", index, "お客さまIDと機器契約画面を確認して下さい。", strApproveMode}, "L_SVKEI_NO_INPUT" + index);
			JCCWebCommon.setMessageInfo(this, EKBE180_JW, new String [] { "指定のお客さまIDと機器", "機器契約で未管理", index, "お客さまIDと機器契約画面を確認して下さい。", strApproveMode}, "L_SVKEI_NO_INPUT" + index);
			// OM-2015-0000671 MOD END
		}
	}

	/**
	 * 代替機または故障品の場合はエラーを報告する
	 * @param outputMap サービスの出力
	 * @param receivedErrors エラー情報
	 * @return エラーがあった場合:true なかった場合:false
	 */
	@SuppressWarnings("unchecked")
	private void reportErrorKikiHen(HashMap outputMap, X31CMessageResult receivedErrors)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey("DKSV008101CC"))
		{
			parentMap = (HashMap)outputMap.get("DKSV008101CC");
		}
		
		if (!parentMap.containsKey("kktk_svc_kiy_hen_err_list"))
		{
			return;
		}

		for (HashMap<String, Object> error : (List<HashMap<String, Object>>)parentMap.get("kktk_svc_kiy_hen_err_list"))
		{
			String index = getIndexOfMeisai(error.get("key_hmpin_kiki_no").toString());
			JCCWebCommon.setMessageInfo(this, EKBE107_KW, new String [] { "返品取消後、未返却回収登録", index }, "L_SVKEI_NO_INPUT" + index);
		}
	}

// ANK-3080-00-00 DEL START
//	/**
//	 * STB機器(STB/C-CAS)でリンク中（視聴可能）の場合はエラーを報告する
//	 * @param outputMap サービスの出力
//	 * @param receivedErrors エラー情報
//	 * @return エラーがあった場合:true なかった場合:false
//	 */
//	@SuppressWarnings("unchecked")
//	private void reportErrorKikiRink(HashMap outputMap, X31CMessageResult receivedErrors)
//	{
//		HashMap parentMap = null;
//		if(outputMap.containsKey("DKSV008101CC"))
//		{
//			parentMap = (HashMap)outputMap.get("DKSV008101CC");
//		}
//		
//		if (!parentMap.containsKey("kktk_svc_kiy_rink_err_list"))
//		{
//			return;
//		}
//
//		for (HashMap<String, Object> error : (List<HashMap<String, Object>>)parentMap.get("kktk_svc_kiy_rink_err_list"))
//		{
//			String index = getIndexOfMeisai(error.get("key_hmpin_kiki_no").toString());
//			JCCWebCommon.setMessageInfo(this, EKB0860_JW, new String [] { "機器", "リンク中（視聴可能）", index }, "L_KIKI_KEI_DIV_INDEX" + index);
//		}
//	}
// ANK-3080-00-00 DEL END
	
	/**
	 * 機器提供契約に存在しない場合はエラーを報告する
	 * @param outputMap サービスの出力
	 * @param receivedErrors エラー情報
	 * @return エラーがあった場合:true なかった場合:false
	 */
	@SuppressWarnings("unchecked")
	private void reportErrorKikiSon(HashMap outputMap, X31CMessageResult receivedErrors, String strApproveMode)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey("DKSV008101CC"))
		{
			parentMap = (HashMap)outputMap.get("DKSV008101CC");
		}
		
		if (!parentMap.containsKey("kktk_svc_kiy_son_err_list"))
		{
			return;
		}

		for (HashMap<String, Object> error : (List<HashMap<String, Object>>)parentMap.get("kktk_svc_kiy_son_err_list"))
		{
			String index = getIndexOfMeisai(error.get("key_hmpin_kiki_no").toString());
			JCCWebCommon.setMessageInfo(this, EKBE180_JW, new String [] { "機器", "機器契約で未管理", index, "機器契約を確認して下さい。", strApproveMode }, "L_SVKEI_NO_INPUT" + index);
		}
	}

	/**
	 * 機器提供契約ステータスがエラーの場合はエラーを報告する
	 * @param outputMap サービスの出力
	 * @param receivedErrors エラー情報
	 * @return エラーがあった場合:true なかった場合:false
	 */
	@SuppressWarnings("unchecked")
	private boolean reportErrorKikiStat(HashMap outputMap, X31CMessageResult receivedErrors, String strApproveMode)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey("DKSV008101CC"))
		{
			parentMap = (HashMap)outputMap.get("DKSV008101CC");
		}
		
		if (!parentMap.containsKey("kktk_svc_kiy_stat_err_list"))
		{
			return false;
		}

		for (HashMap<String, Object> error : (List<HashMap<String, Object>>)parentMap.get("kktk_svc_kiy_stat_err_list"))
		{
			String stat = getKikiStatNm(error.get("kktk_svc_kei_stat").toString());
			String index = getIndexOfMeisai(error.get("key_hmpin_kiki_no").toString());
			JCCWebCommon.setMessageInfo(this, EKBE180_JW, new String [] { "機器", "レンタル品で" + stat, index, "機器契約を確認して下さい。", strApproveMode }, "L_SVKEI_NO_INPUT" + index);
		}

		return true;
	}

	/**
	 * 機器提供サービス契約ステータスに対応する機器提供サービス契約ステータス名を
	 * 機器提供サービス契約ステータス名一覧から取得・返却します。
	 * <br>
	 * @param KikiStat 機器提供サービス契約ステータス
	 * @return 機器提供サービス契約ステータス名
	 */
	private String getKikiStatNm(String KikiStat)
	{
		for (int i = 0; i < KIKI_STAT_LIST.length; i++)
		{
			
			// 機器提供サービス契約ステータス名一覧から機器提供サービス契約ステータス名を取得 
			String KikiStat_c = KIKI_STAT_LIST[i][0];
			
			if(KikiStat_c.equals(KikiStat))
			{
				// 対応する機器提供サービス契約ステータス名を返す
				return KIKI_STAT_LIST[i][1];
			}
		}
		
		// 対応する機器提供サービス契約ステータスがない場合、空白を返す。
		return "";
	}

	/**
	 * エラーリストに対応する明細行数を取得・返却します。
	 * <br>
	 * @param KikiStat 機器提供サービス契約ステータス
	 * @return 機器提供サービス契約ステータス名
	 */
	private String getIndexOfMeisai(String hmpin_kiki_no)
	{
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++ )
		{
			X31SDataBeanAccess data = list.getDataBean(i);
			if (hmpin_kiki_no.equals(getData(data, L_HMPIN_KIKI_NO_05)))
			{
				String svkeiNo = getData(data, L_SVKEI_NO_INPUT_05);
				if (!JDKCommonUtil.isNull(svkeiNo))
				{
					setData(data, "", L_SVKEI_NO_05);
				}
				return getDataL(data, L_NO_05).toString();
			}
		}
		return "";
	}

	/**
	 * 全エラーリストを確認する。
	 * <br>
	 * @param outputMap サービスの出力
	 * @param receivedErrors エラー情報
	 * @param inApproveMode 更新モード
	 * @return エラーがあった場合:true なかった場合:false
	 */
	@SuppressWarnings("unchecked")
	private boolean checkAllErrorList(HashMap outputMap, X31CMessageResult receivedErrors, boolean inApproveMode)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey("DKSV008101CC"))
		{
			parentMap = (HashMap)outputMap.get("DKSV008101CC");
		}

		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++ )
		{
			boolean errflg = true;
			X31SDataBeanAccess data = list.getDataBean(i);

			// 返品機器に存在しないエラーを確認する
			if (checkSubErroList(parentMap, data, "kktk_svc_kiy_mi_err_list")) {
				errflg = false;
				if (!inApproveMode) {
					return true;
				}
			}

			// 代替機または故障品のエラーを確認する
			if (errflg) {
				if (checkSubErroList(parentMap, data, "kktk_svc_kiy_hen_err_list")) {
					errflg = false;
					if (!inApproveMode) {
						return true;
					}
				}
			}

// ANK-3080-00-00 DEL START
//			// STB機器(STB/C-CAS)でリンク中（視聴可能）のエラーを確認する
//			if (errflg) {
//				if (checkSubErroList(parentMap, data, "kktk_svc_kiy_rink_err_list")) {
//					errflg = false;
//					if (!inApproveMode) {
//						return true;
//					}
//				}
//			}
// ANK-3080-00-00 DEL END

			// 機器提供契約に存在しないエラーを確認する
			if (errflg) {
				if (checkSubErroList(parentMap, data, "kktk_svc_kiy_son_err_list")) {
					errflg = false;
					if (!inApproveMode) {
						return true;
					}
				}
			}

			//  機器提供契約ステータスがエラーを確認する
			if (errflg) {
				if (checkSubErroList(parentMap, data, "kktk_svc_kiy_stat_err_list")) {
					errflg = false;
					if (!inApproveMode) {
						return true;
					}
				}
			}

			// エラーが無いので次画面遷移可能
			if (errflg) {
				return false;
			}
		}

		return true;
	}

	/**
	 * 各エラーリストを確認する。
	 * <br>
	 * @param parentMap CC返却値
	 * @param data 画面データ
	 * @param ListName エラーリスト名
	 * @return エラーがあった場合:true なかった場合:false
	 */
	@SuppressWarnings("unchecked")
	private boolean checkSubErroList(HashMap parentMap, X31SDataBeanAccess data, String ListName)
	{
		if (parentMap.containsKey(ListName))
		{
			for (HashMap<String, Object> error : (List<HashMap<String, Object>>)parentMap.get(ListName))
			{
				if (getData(data, L_HMPIN_KIKI_NO_05).equals(error.get("key_hmpin_kiki_no").toString()))
				{
					return true;
				}
			}
		}

		return false;
	}
// ANK-2406-00-00 MOD END

	/**
	 * サービス契約番号の項番を取得します。
	 */
	private String getIndexOfContractNo(String contractNo, String key)
	{
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++ )
		{
			X31SDataBeanAccess data = list.getDataBean(i);
			if (contractNo.equals(getData(data, key)))
			{
				return getDataL(data, L_NO_05).toString();
			}
		}
		return "";
	}
	
	
	/**
	 * 機器提供区分の選択リストを生成する
	 * @param selections 機器提供区分の選択リスト
	 */
	private void makeKikiTeikyoSelection(X31SDataBeanAccessArray selections)
	{
		selections.clearArray();
		
		X31SDataBeanAccess list = getBean(this, L_KIKI_KEI_DIV);
		int size = (Integer)list.sendMessage(I_CD_CD_LIST_02, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0 ; i < size ; i++)
		{
			String val = list.sendMessageString(I_CD_NM_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, i);
			setData(selections.addDataBean(), String.format("%d.%s", i, val), L_NM_06);
		}
	}
	
	
	/**
	 * 一覧検索処理を実施します。
	 * @param functionCode 機能コード
	 * @param listName 取得データを格納する一覧のデータ名称
	 * @param withPager ページャを使用するかどうか
	 * @return エラーがあった場合:true ない場合:false
	 */
	@SuppressWarnings("unchecked")
	private boolean innerSearch(String functionCode, String listName, boolean withPager)
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		X31SDataBeanAccess[] paramBean = {bean};
		
		HashMap paramMap = new HashMap();
		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		bean.getDataBeanArray(listName).clearArray();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, DKSV0079);
		
		DKSV0079_DKSV0079OPDBMapper mapper = new DKSV0079_DKSV0079OPDBMapper();
		mapper.setDKSV007901CC(paramBean, inputMap, functionCode);
		if (withPager)
		{
			JCCWebCommon.upmapperPageLinkInfo(this, "DKSV007901CC", inputMap, SCREEN_ID_DKW00301);
		}

		invokeService(paramMap, inputMap, outputMap);

		mapper.getDKSV007901CC(paramBean, outputMap, listName);
		if (withPager)
		{
			JCCWebCommon.downmapperPageLinkInfo(this, "DKSV007901CC", outputMap, SCREEN_ID_DKW00301);
		}
		
		String searchErrFlg = JCCWebCommon.getSearchErrFlg("DKSV007901CC", outputMap);
		if (JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			DEBUG_LOG.debug("検索結果0件");
			JCCWebCommon.setMessageInfo(this, "EKB0330--I");
			return false;
		}
		else if (JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			DEBUG_LOG.debug(String.format("検索結果%s件以上", JCCWebCommon.getSearchConst("DKW00301_MAX_SHOW_CNT")));
			JCCWebCommon.setMessageInfo(this, "EKB0340--I", new String [] {JCCWebCommon.getSearchConst("DKW00301_MAX_SHOW_CNT")});
			return false;
		}
		else if (JPCModelConstant.SEARCH_ERR_FLG_NODATA.equals(searchErrFlg))
		{
			DEBUG_LOG.debug(String.format("データが見つからない %s", getData(this, SEARCH_HMPIN_KIKI_NO)));
			if (getCommonInfoBean().getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST).getCount() == 0)
			{
				JCCWebCommon.setMessageInfo(this, "EKB0350--I");
			}
		}
		
		if (withPager)
		{
			JCCWebCommon.setSearchCommand(this, "L_PAG");
		}
		editList();
		
		return true;
	}
	
	
	/**
	 * プルダウンなどの選択項目から選択値を求める
	 */
	private void adjustInputs()
	{
		storePullDown(this, I_HMPIN_CHSHT_JOKEN, I_CD_INDEX_02, I_CD_CD_02, I_CD_NM_02, I_CD_CD_LIST_02, I_CD_NM_LIST_02);
		storePullDown(this, I_HMPIN_SBT,         I_CD_INDEX_02, I_CD_CD_02, I_CD_NM_02, I_CD_CD_LIST_02, I_CD_NM_LIST_02);
		storePullDown(this, I_SEARCH_YMD_CHOICE, I_CD_INDEX_02, I_CD_CD_02, I_CD_NM_02, I_CD_CD_LIST_02, I_CD_NM_LIST_02);
		storePullDown(this, I_UKEIRE_SK, I_UKEIRE_SK_INDEX_01, I_UKEIRE_SK_CD_01, I_UKEIRE_SK_NM_01, I_UKEIRE_SK_CD_LIST_01, I_UKEIRE_SK_NM_LIST_01);
		storePullDown(this, I_MDL_NO, I_MDL_INDEX_03, I_MDL_CD_03, I_MDL_NM_03, I_MDL_CD_LIST_03, I_MDL_NM_LIST_03);

		for (String key : new String [] {I_YMD_STA, I_YMD_END, I_SHONIN_YMD_STA, I_SHONIN_YMD_END})
		{
			String ymd = getData(this, key, YEAR_04) + getData(this, key, MONTH_04) + getData(this, key, DAY_04);
			setData(this, ymd, key, YMD_04);
		}
	}
	
	/**
	 * 前回検索時の検索条件を保存します。
	 */
	private void storeSearchCondition()
	{
		adjustInputs();
		
		setData(this, getData(this, I_HMPIN_CHSHT_JOKEN, I_CD_CD_02), SEARCH_HMPIN_CHSHT_JOKEN);
		setData(this, getData(this, I_UKEIRE_SK, I_UKEIRE_SK_CD_01), SEARCH_UKEIRE_SK);
		setData(this, getData(this, I_HMPIN_SBT, I_CD_CD_02), SEARCH_HMPIN_SBT);
		setData(this, getData(this, I_SVKEI_NO), SEARCH_SVKEI_NO);
		setData(this, getData(this, I_ANKEN_NO), SEARCH_ANKEN_NO);
		setData(this, getData(this, I_MDL_NO, I_MDL_CD_03), SEARCH_MDL_NO);
		setData(this, getData(this, I_SEIZO_NO), SEARCH_SEIZO_NO);
		setData(this, getData(this, I_SEARCH_YMD_CHOICE, I_CD_CD_02), SEARCH_SEARCH_YMD_CHOICE);

		setData(this, getData(this, I_YMD_STA, YMD_04), SEARCH_YMD_STA);
		setData(this, getData(this, I_YMD_END, YMD_04), SEARCH_YMD_END);
		setData(this, getData(this, I_SHONIN_YMD_STA, YMD_04), SEARCH_SHONIN_YMD_STA);
		setData(this, getData(this, I_SHONIN_YMD_END, YMD_04), SEARCH_SHONIN_YMD_END);
	}
	
	/**
	 * 前回検索時の検索条件を復元します。
	 */
	private void restoreSearchCondition()
	{
		setData(this, getData(this, SEARCH_SVKEI_NO), I_SVKEI_NO);
		setData(this, getData(this, SEARCH_ANKEN_NO), I_ANKEN_NO);
		setData(this, getData(this, SEARCH_SEIZO_NO), I_SEIZO_NO);

		initPulldownIndexByCode(I_HMPIN_CHSHT_JOKEN, getData(this, SEARCH_HMPIN_CHSHT_JOKEN), I_CD_CD_LIST_02,        I_CD_INDEX_02);
		initPulldownIndexByCode(I_UKEIRE_SK,         getData(this, SEARCH_UKEIRE_SK),         I_UKEIRE_SK_CD_LIST_01, I_UKEIRE_SK_INDEX_01);
		initPulldownIndexByCode(I_HMPIN_SBT,         getData(this, SEARCH_HMPIN_SBT),         I_CD_CD_LIST_02,        I_CD_INDEX_02);
		initPulldownIndexByCode(I_MDL_NO,            getData(this, SEARCH_MDL_NO),            I_MDL_CD_LIST_03,       I_MDL_INDEX_03);
		initPulldownIndexByCode(I_SEARCH_YMD_CHOICE, getData(this, SEARCH_SEARCH_YMD_CHOICE), I_CD_CD_LIST_02,        I_CD_INDEX_02);
		
		setData(this, getData(this, SEARCH_YMD_STA), I_YMD_STA, YMD_04);
		setData(this, getData(this, SEARCH_YMD_END), I_YMD_END, YMD_04);
		setData(this, getData(this, SEARCH_SHONIN_YMD_STA), I_SHONIN_YMD_STA, YMD_04);
		setData(this, getData(this, SEARCH_SHONIN_YMD_END), I_SHONIN_YMD_END, YMD_04);
		
		for (String ymdKey : new String [] {I_YMD_STA, I_YMD_END, I_SHONIN_YMD_STA, I_SHONIN_YMD_END})
		{
			String ymd = getData(this, ymdKey, YMD_04);
			if (!JDKCommonUtil.isNull(ymd))
			{
				setData(this, substr(ymd, 0, 4), ymdKey, YEAR_04);
				setData(this, substr(ymd, 4, 6), ymdKey, MONTH_04);
				setData(this, substr(ymd, 6, 8), ymdKey, DAY_04);
			}
			else
			{
				setData(this, "", ymdKey, YEAR_04);
				setData(this, "", ymdKey, MONTH_04);
				setData(this, "", ymdKey, DAY_04);
			}
		}
		
		adjustInputs();
	}


	/**
	 * 検索条件からプルダウンの初期値を設定します。
	 */
	private void initPulldownIndexByCode(String pulldownLabel, String code, String cdListLabel, String indexLabel)
	{
		if (JDKCommonUtil.isNull(code))
		{
			setData(this, 0L, pulldownLabel, indexLabel);
			return;
		}
		
		X31SDataBeanAccess pulldown = getServiceFormBean().getDataBeanArray(pulldownLabel).getDataBean(0);
		int length = (Integer)pulldown.sendMessage(cdListLabel, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0; i < length; i++)
		{
			String test = pulldown.sendMessageString(cdListLabel, X31CWebConst.DATABEAN_GET_VALUE, i);
			if (test.equals(code))
			{
				setData(this, (long)i, pulldownLabel, indexLabel);
				return;
			}
		}
	}

	/**
	 * 画面遷移先を設定します。
	 * @author 富士通
	 * @param nextScreenId 遷移先画面ＩＤ
	 * @param nextScreenName 遷移先画面名
	 */
	private void setNextScreen(String nextScreenId, String nextScreenName)
	{
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
	
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);

		DEBUG_LOG.debug(String.format("遷移先 CD：%s NM：%s", nextScreenId, nextScreenName));
	}

	/**
	 * スクリーンモードを設定します。
	 * @param mode スクリーンモード
	 */
	private void setScreenMode(long mode)
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		bean.sendMessageLong(SCREEN_MODE, X31CWebConst.DATABEAN_SET_VALUE, mode);
		
		DEBUG_LOG.debug(String.format("画面モードを %d に設定します", mode));
	}
	
	
	
	/**
	 * 返品データファイルを生成します。
	 * @return 返品データファイル
	 */
	private String buildFile()
	{
		X31SDataBeanAccessArray datas = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST_CSV);
		
		StringBuffer bodyRecords = new StringBuffer();
		int size = datas.getCount();
		for (int i = 0 ; i < size ; i++)
		{
			if (bodyRecords.length() > 0)
			{
				bodyRecords.append(JDKStrConst.LINE_SEPARATOR);
			}
			bodyRecords.append(buildDataRecord(datas.getDataBean(i), i + 1));
		}
		
		String file = join(JDKStrConst.LINE_SEPARATOR,
							buildHeaderRecord(),
							bodyRecords.toString(),
							buildTrailerRecord());

		DEBUG_LOG.debug(String.format("ファイル内容：%s", file));
		
		return file;
	}
	
	/**
	 * 返品データ.csvのヘッダ行を生成します。
	 * @return ヘッダ文字列
	 */
	private String buildHeaderRecord()
	{
		return join(",",
					dqot("レコード種別"),
					dqot("レコード通番"),
					dqot("返品種別"),
					dqot("返品日付"),
					dqot("型番号"),
					dqot("製造番号"),
					dqot("出荷ロット番号"),
					// IT1-2014-0000320 MOD START
					//dqot("サービス契約番号"),
					dqot("お客さまID"),
					// IT1-2014-0000320 MOD END
					dqot("案件番号"),
					dqot("返品理由"),
					dqot("返品詳細"),
					dqot("商品状態"),
					dqot("送付者郵便番号"),
					dqot("送付者住所（都道府県）"),
					dqot("送付者住所（市区町村）"),
					dqot("送付者住所（大字通称名）"),
					dqot("送付者住所（字丁目）"),
					dqot("送付者住所（番地・号）"),
					dqot("送付者住所（建物名）"),
					dqot("送付者住所（部屋番号）"),
					dqot("送付者電話番号"),
					dqot("送付者氏名"),
					dqot("レンタル解約申込書"),
					dqot("返品番号"));
	}
	
	/**
	 * 返品データファイルのデータレコードを生成します。
	 * @param data 行データ
	 * @param index 行番号
	 * @return 返品データファイルのデータレコード
	 */
	private String buildDataRecord(X31SDataBeanAccess data, int index) 
	{
		Object seq = getData(data, L_REC_SEQ_05);
		if (seq == null) {
			seq = "";
		}
		return join(",",
					dqot(RECORD_DATA),
					dqot(seq.toString()),
					dqot(getData(data, L_HMPIN_SBT_05)),
					dqot(getData(data, L_HMPIN_YMD_05)),
					dqot(getData(data, L_MDL_NO_05)),
					dqot(getData(data, L_SEIZO_NO_05)),
					dqot(getData(data, L_SHUKKA_LOT_NO_05)),
					dqot(getData(data, L_SVKEI_NO_05)),
					dqot(getData(data, L_ANKEN_NO_05)),
					dqot(getData(data, L_HMPIN_RSN_05)),
					dqot(getData(data, L_HMPIN_DTL_05)),
					dqot(getData(data, L_GDS_STAT_05)),
					dqot(getData(data, L_HMPINSHA_PCD_05)),
					dqot(getData(data, L_HMPINSHA_STATE_NM_05)),
					dqot(getData(data, L_HMPINSHA_CITY_NM_05)),
					dqot(getData(data, L_HMPINSHA_OAZTSU_NM_05)),
					dqot(getData(data, L_HMPINSHA_AZCHO_NM_05)),
					dqot(getData(data, L_HMPINSHA_BNCHIGO_05)),
					dqot(getData(data, L_HMPINSHA_ADRTTM_05)),
					dqot(getData(data, L_HMPINSHA_ADRRM_05)),
					dqot(getData(data, L_HMPINSHA_TELNO_05)),
					dqot(getData(data, L_HMPINSHA_NM_05)),
					dqot(getData(data, L_RENT_DSL_05)),
					dqot(getData(data, L_HMPIN_NO_05)));
	}
	
	
	/**
	 * 入力情報から返品情報受信データファイルのトレーラーレコードを生成します。
	 * @return 返品情報受信データファイルのトレーラーレコード
	 */
	private String buildTrailerRecord() 
	{
		return String.format("%s,%s", dqot(RECORD_TRAILER), dqot(getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST_CSV).getCount().toString()));
	}
	
	
	/**
	 * 文字列をダブルクォーテッドする
	 * @param src 囲まれる文字列
	 * @return \"囲まれる文字列\"
	 */
	private String dqot(String src)
	{
		return String.format("\"%s\"", src);
	}
	
	
	/**
	 * 一覧で選択されたレコードを選択リストへ移送します。
	 */
	private void transportSelectedData(boolean copyKikiTeikyoCdList)
	{
		X31SDataBeanAccessArray sourceList = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		X31SDataBeanAccessArray destList = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST_SELECTED);
		destList.clearArray();
		
		int size = sourceList.getCount();
		for (int i = 0 ; i < size ; i++)
		{
			boolean selected = getDataB(sourceList.getDataBean(i), L_CHOICE_05);
			if (!selected)
			{
				continue;
			}
			X31SDataBeanAccess src = sourceList.getDataBean(i);
			X31SDataBeanAccess dest = destList.addDataBean();
			copyStructure(src, dest, KIKI_TEIKYO_CD_LIST);
		}
		
		
		// 表示用→元リストへ移送
		sourceList.clearArray();
		size = destList.getCount();

		for (int i = 0 ; i < size ; i++)
		{
			X31SDataBeanAccess src = destList.getDataBean(i);
			X31SDataBeanAccess dest = sourceList.addDataBean();
			
			copyStructure(src, dest);
			setData(dest, (i + 1L), L_NO_05);
			setData(dest, ((i + 1) % 2 == 0) ? "even" : "odd", L_COLOR_05);
			if (copyKikiTeikyoCdList)
			{
				setData(dest, getKikiTeikyoCdIndex(getData(dest, L_KIKI_KEI_DIV_05)), L_KIKI_KEI_DIV_SELECT_INDEX_05);
			}
		}
	}
	
	
	/**
	 * 指定された機器提供区分のインデックス値を取得します。
	 * @param cd コード
	 * @return コードに対するインデックス値
	 */
	private long getKikiTeikyoCdIndex(String cd)
	{
		X31SDataBeanAccess list = getBean(this, L_KIKI_KEI_DIV);
		int count = (Integer)list.sendMessage(I_CD_CD_LIST_02, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0 ; i < count ; i++)
		{
			if (list.sendMessageString(I_CD_CD_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, i).equals(cd))
			{
				return i;
			}
		}
		return -1;
	}
	
	
	/**
	 * 一覧データを編集します。
	 */
	private void editList()
	{
		X31SDataBeanAccessArray list = getServiceFormBean().getDataBeanArray(SEARCH_RSLT_LIST);
		int size = list.getCount();
		for (int i = 0 ; i < size ; i++) 
		{
			X31SDataBeanAccess data = list.getDataBean(i);

			setData(data, (i + 1L), L_NO_05);
			setData(data, ((i + 1) % 2 == 0) ? "even" : "odd", L_COLOR_05);
			setData(data, (substr(getData(data, L_UKEIRE_SK_NM_05), 0, 8)), L_UKEIRE_SK_NM_DISP_05);
			setData(data, (substr(getData(data, L_KSH_NM_05), 0, 7)), L_KSH_NM_DISP_05);
			setData(data, (substr(getData(data, L_GDS_STAT_NM_05), 0, 6)), L_GDS_STAT_NM_DISP_05);
		}
	}

	/**
	 * プルダウンの０番目の項目に空白を挿入します。
	 * @param pulldown プルダウンを指す項目ID
	 * @param cdList プルダウン中でコード一覧をさす項目ID
	 * @param nmList プルダウン中で名称一覧をさす項目ID
	 * @param pushString 追加する文字列
	 */
	private void pushEmptyToTopOfPulldown(String pulldown, String cdList, String nmList, String pushString)
	{
		X31SDataBeanAccess pulldownBean = super.getServiceFormBean().getDataBeanArray(pulldown).getDataBean(0);

		appendPrefix(getBean(this, pulldown), nmList);
		
		slideArrayOnDatabean(pulldownBean, cdList, "");
		slideArrayOnDatabean(pulldownBean, nmList, pushString);
	}
	
	/**
	 * データビーンの配列要素をインデックスが増加する方向に１つずらす
	 * @param bean データビーン
	 * @param listName 対象項目ID
	 * @param pushString 追加する文字列
	 */
	private void slideArrayOnDatabean(X31SDataBeanAccess bean, String listName, String pushString)
	{
		int size = (Integer)(bean.sendMessage(listName, X31CWebConst.DATABEAN_GET_COUNT));
		
		bean.sendMessageString(listName, X31CWebConst.DATABEAN_ADD_VALUE, "");
		
		for (int i = size ; i > 0 ; i--)
		{
			String target = bean.sendMessageString(listName, X31CWebConst.DATABEAN_GET_VALUE, i - 1);
			bean.sendMessageString(listName, X31CWebConst.DATABEAN_SET_VALUE, i, target);
		}
		
		bean.sendMessageString(listName, X31CWebConst.DATABEAN_SET_VALUE, 0, pushString);
	}
}
