/*********************************************************************
* All Right reserved,Copyright (c) Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*   システム名      ：料金管理
*   モジュール名    ：通話明細再発行画面
*   ソースファイル名：ACW00602SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年06月01日
*＜機能概要＞
*  通話明細再発行を行う画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者        修正内容
*   v1.00.00    2011/06/01   FJ）富士通    新規作成
*   v3.00.00    2012/06/13   FJ）松本      障害対応(IT2-2012-0000754)
*   v5.00.00    2013/07/31   FJ) 伊藤      【IT1-2013-0001521】名称戻し対応
*	v5.00.01    2013/08/11   FJ) 垣内      【IT1-2013-0001579】一時金登録時の料金サービスコード・料金項目コード追加
*
**********************************************************************/
package eo.web.webview.ACW00602SF;

import java.util.HashMap;
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 eo.common.constant.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACCommonConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.mapping.ACSV0014_ACSV0014OPDBMapper;
import eo.web.webview.mapping.ACSV0015_ACSV0015OPDBMapper;

/**
 * 通話明細再発行画面用ビューロジック
 * 
 * @author FJ
 * @since 2011-06-01
 */
@SuppressWarnings("serial")
public class ACW00602SFLogic extends JCCWebBusinessLogic
{
	/** 通話明細再発行・サービスID */
	private static final String SERVICE_ID_ACSV0014 = "ACSV0014";
	
	/** 通話明細再発行・サービスID */
	private static final String SERVICE_ID_ACSV0015 = "ACSV0015";
	
	/** お客さまID */
	private static final String SVC_KEI_NO = "お客さまID";
	
	/** 請求先番号 */
	private static final String SEIKY_KEI_NO = "請求先番号";
	
	/** 定額料金 */
	private static final String TEGAK_PRC = "定額料金";
	
	/** エラーメッセージコード1 */
	private static final String ERR_MSG_CD1 = "EKB8160-TW";
	
	/** エラーメッセージコード2 */
	private static final String ERR_MSG_CD2 = "EKB8580-KW";
	
	/** 空文字 */
	private static final String KARA_MOJI = "";
	
	/**
	 * 利用明細再発行画面 初期表示処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 親画面から引き継ぎ項目を取得する
		HashMap<String, Object> paramMap = JCCWebCommon.getScreenInfo(this, JACScreenConst.SCREEN_ID_ACW00602);
		// サービス契約番号を取得
		String svcKeiNo = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_SVC_KEI_NO);
		// 請求契約番号を取得
		String seikyKeiNo = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_SEIKY_KEI_NO);
		// 電話番号を取得
		String telno = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_TELNO);
		// 通話開始年月日FROM1
		String pcallStaYmdFrom1 = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_PCALL_STA_YMD_FROM_1);
		// 通話開始年月日TO1
		String pcallStaYmdTo1 = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_PCALL_STA_YMD_TO_1);
		// 通話開始年月日FROM2
		String pcallStaYmdFrom2 = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_PCALL_STA_YMD_FROM_2);
		// 通話開始年月日TO2
		String pcallStaYmdTo2 = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_PCALL_STA_YMD_TO_2);
		// 課金状態
		String chrgStat = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_CHRG_STAT);
		// 料金グループコード
		String prcGrpCd = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_PRC_GRP_CD);
		// 料金コースコード
		String pcrsCd = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_PCRS_CD);
		// 機能コード
		String kinoCd = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_KINO_CD);
		// 手数料
		String selectCommision = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_SELECT_COMMISION);
		// 記事
		String kiji = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_KIJI);
		// 対応履歴登録
		Boolean taioRrki = (Boolean)paramMap.get(JACCommonConst.SCREEN_HKTGI_TAIORRKI);
		
		// サービス契約番号の存在チェック
		if (svcKeiNo == null || KARA_MOJI.equals(svcKeiNo))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {SVC_KEI_NO});
			return true;
		}
		// 請求契約番号の存在チェック
		if (seikyKeiNo == null || KARA_MOJI.equals(seikyKeiNo))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {SEIKY_KEI_NO});
			return true;
		}
		// 電話番号の存在チェック
		if (telno == null || KARA_MOJI.equals(telno))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.TELNO});
			return true;
		}
		// 通話開始年月日FROM1の存在チェック
		if (pcallStaYmdFrom1 == null || KARA_MOJI.equals(pcallStaYmdFrom1))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.PCALL_STA_YMD_FROM_1});
			return true;
		}
		// 通話開始年月日TO1の存在チェック
		if (pcallStaYmdTo1 == null || KARA_MOJI.equals(pcallStaYmdTo1))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.PCALL_STA_YMD_TO_1});
			return true;
		}
		// 通話開始年月日FROM2の存在チェック
		if (pcallStaYmdFrom2 == null || KARA_MOJI.equals(pcallStaYmdFrom2))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.PCALL_STA_YMD_FROM_2});
			return true;
		}
		// 通話開始年月日TO2の存在チェック
		if (pcallStaYmdTo2 == null || KARA_MOJI.equals(pcallStaYmdTo2))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.PCALL_STA_YMD_TO_2});
			return true;
		}
		// 課金状態の存在チェック
		if (chrgStat == null || KARA_MOJI.equals(chrgStat))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.CHRG_STAT});
			return true;
		}
		// 料金グループコードの存在チェック
		if (prcGrpCd == null || KARA_MOJI.equals(prcGrpCd))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.PRC_GRP_CD});
			return true;
		}
		// 料金コースコードの存在チェック
		if (pcrsCd == null || KARA_MOJI.equals(pcrsCd))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.PCRS_CD});
			return true;
		}
		// 機能コードの存在チェック
		if (kinoCd == null || KARA_MOJI.equals(kinoCd))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {ACW00602SFConst.KINO_CD});
			return true;
		}
		
		// マッピングクラスの結果を格納するHashMap
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// サービス呼出結果を格納するHashMap
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// 運用日付を取得
		String unyoYmd = JCCWebCommon.getOpeDate(this, null);
		
		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		// サービスフォームBeanの初期化
		svcFormBean.sendMessageString(ACW00602SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svcKeiNo);
		svcFormBean.sendMessageString(ACW00602SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, seikyKeiNo);
		svcFormBean.sendMessageString(ACW00602SFConst.TELNO, X31CWebConst.DATABEAN_SET_VALUE, telno);
		svcFormBean.sendMessageString(ACW00602SFConst.PCALL_STA_YMD_FROM_1, X31CWebConst.DATABEAN_SET_VALUE, pcallStaYmdFrom1);
		svcFormBean.sendMessageString(ACW00602SFConst.PCALL_STA_YMD_TO_1, X31CWebConst.DATABEAN_SET_VALUE, pcallStaYmdTo1);
		svcFormBean.sendMessageString(ACW00602SFConst.PCALL_STA_YMD_FROM_2, X31CWebConst.DATABEAN_SET_VALUE, pcallStaYmdFrom2);
		svcFormBean.sendMessageString(ACW00602SFConst.PCALL_STA_YMD_TO_2, X31CWebConst.DATABEAN_SET_VALUE, pcallStaYmdTo2);
		svcFormBean.sendMessageString(ACW00602SFConst.CHRG_STAT, X31CWebConst.DATABEAN_SET_VALUE, chrgStat);
		svcFormBean.sendMessageString(ACW00602SFConst.PRC_GRP_CD, X31CWebConst.DATABEAN_SET_VALUE, prcGrpCd);
		svcFormBean.sendMessageString(ACW00602SFConst.PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, pcrsCd);
		svcFormBean.sendMessageString(ACW00602SFConst.KINO_CD, X31CWebConst.DATABEAN_SET_VALUE, kinoCd);
		svcFormBean.sendMessageString(ACW00602SFConst.UNYO_YM, X31CWebConst.DATABEAN_SET_VALUE, unyoYmd);
		svcFormBean.sendMessageString(ACW00602SFConst.SYS_CD, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.SYS_CD_AC);
		svcFormBean.sendMessageString(ACW00602SFConst.CHSHT_CHG_CD, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.CHSHT_CHG_CD_1);
		svcFormBean.sendMessageString(ACW00602SFConst.WORK_PARAM_ID, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.WKPARA_AC_TUWA_DTL_CMS_DSP);
		if (selectCommision != null)
		{
			X31SDataBeanAccess commisionUmBean = svcFormBean.getDataBeanArray(ACW00602SFConst.COMMISION_UM_LIST).getDataBean(0);
			commisionUmBean.sendMessageString(ACW00602SFConst.SELECT_COMMISION_01, X31CWebConst.DATABEAN_SET_VALUE, selectCommision);
		}
		if (kiji == null)
		{
			svcFormBean.sendMessageString(ACW00602SFConst.KIJI, X31CWebConst.DATABEAN_SET_VALUE, KARA_MOJI);
		}
		else
		{
			svcFormBean.sendMessageString(ACW00602SFConst.KIJI, X31CWebConst.DATABEAN_SET_VALUE, kiji);
		}
		if (taioRrki != null)
		{
			svcFormBean.sendMessageBoolean(ACW00602SFConst.TAIORRKI, X31CWebConst.DATABEAN_SET_VALUE, taioRrki);
		}
		
		// マッピングクラスに渡すため、配列に作り変える
		X31SDataBeanAccess[] paramBean = {svcFormBean};
		
		// ユースケースID設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SERVICE_ID_ACSV0014);
		// マッピングクラスのインスタンス作成
		ACSV0014_ACSV0014OPDBMapper mapper = new ACSV0014_ACSV0014OPDBMapper();
		// 上がりマッピング サービスフォームBean ⇒ サービス
		mapper.setACSV001401SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		// SQL呼出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラーメッセージが存在する場合
		if(msgResult != null)
		{
			// メッセージ出力
			JCCWebCommon.setMessageInfo(this, msgResult);
		}
		
		// 下りマッピング サービス ⇒ サービスフォームBean
		mapper.getACSV001401SC(paramBean, outputMap);
		
		// 定額料金手数料有無の存在チェック
		X31SDataBeanAccess subBean = svcFormBean.getDataBeanArray(ACW00602SFConst.COMMISION_UM_LIST).getDataBean(0);
		if (subBean == null || ((Integer)subBean.sendMessage(ACW00602SFConst.COMMISION_VALUE_01, X31CWebConst.DATABEAN_GET_COUNT)) <= 1)
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD1, new String[] {TEGAK_PRC});
			return true;
		}
		
		// 処理結果を返す
		return true;
	}
	
	/**
	 * 利用明細再発行確認画面 印刷確認処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean confirm() throws Exception
	{
		// ユースケースID格納用のHashMap
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// マッピングクラスの結果を格納するHashMap
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// サービス呼出結果を格納するHashMap
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		
		// マッピングクラスに渡すため、配列に作り変える
		X31SDataBeanAccess[] paramBean = {svcFormBean};
		
		// ユースケースID設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SERVICE_ID_ACSV0015);
		// マッピングクラスのインスタンス作成
		ACSV0015_ACSV0015OPDBMapper mapper = new ACSV0015_ACSV0015OPDBMapper();
		// 上がりマッピング サービスフォームBean ⇒ サービス
		mapper.setACSV001501CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		// SQL呼出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラーメッセージが存在する場合
		if(msgResult != null)
		{
			// メッセージ出力
			JCCWebCommon.setMessageInfo(this, msgResult);
		}
		
		// 下りマッピング サービス ⇒サービスフォームBean
		mapper.getACSV001501CC(paramBean, outputMap);
		
		// ＮＧワードチェック結果を取得
		String ngWord = svcFormBean.sendMessageString(ACW00602SFConst.NG_WORD, X31CWebConst.DATABEAN_GET_VALUE);
		if (ngWord != null && !KARA_MOJI.equals(ngWord))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD2, new String[] {ACW00602SFConst.KIJI, ngWord});
			return true;
		}
		
		// 手数料の選択値を取得
		X31SDataBeanAccessArray commisionUmList = svcFormBean.getDataBeanArray(ACW00602SFConst.COMMISION_UM_LIST);
		X31SDataBeanAccess subBean = commisionUmList.getDataBean(0);
		String index = subBean.sendMessageString(ACW00602SFConst.SELECT_COMMISION_01, X31CWebConst.DATABEAN_GET_VALUE);
		String commisionValue = subBean.sendMessageString(ACW00602SFConst.COMMISION_VALUE_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
		String selOutPrcSvcCd = subBean.sendMessageString(ACW00602SFConst.OUT_PRC_SVC_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
		String selOutPrcKmkCd = subBean.sendMessageString(ACW00602SFConst.OUT_PRC_KMK_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
		String prcGrpCd = svcFormBean.sendMessageString(ACW00602SFConst.PRC_GRP_CD, X31CWebConst.DATABEAN_GET_VALUE);
		String pcrsCd = svcFormBean.sendMessageString(ACW00602SFConst.PCRS_CD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 引き継ぎ項目を設定
		paramMap.put(JACCommonConst.SCREEN_HKTGI_SVC_KEI_NO, 
				svcFormBean.sendMessageString(ACW00602SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_SEIKY_KEI_NO, 
				svcFormBean.sendMessageString(ACW00602SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_TELNO, svcFormBean.sendMessageString(ACW00602SFConst.TELNO, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_PCALL_STA_YMD_FROM_1, 
				svcFormBean.sendMessageString(ACW00602SFConst.PCALL_STA_YMD_FROM_1, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_PCALL_STA_YMD_TO_1, 
				svcFormBean.sendMessageString(ACW00602SFConst.PCALL_STA_YMD_TO_1, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_PCALL_STA_YMD_FROM_2, 
				svcFormBean.sendMessageString(ACW00602SFConst.PCALL_STA_YMD_FROM_2, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_PCALL_STA_YMD_TO_2, 
				svcFormBean.sendMessageString(ACW00602SFConst.PCALL_STA_YMD_TO_2, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_CHRG_STAT, svcFormBean.sendMessageString(ACW00602SFConst.CHRG_STAT, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_PRC_GRP_CD, prcGrpCd);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_PCRS_CD, pcrsCd);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_PRC_SVC_CD, selOutPrcSvcCd);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_PRC_KMK_CD, selOutPrcKmkCd);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_KINO_CD, svcFormBean.sendMessageString(ACW00602SFConst.KINO_CD, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_KIJI, svcFormBean.sendMessageString(ACW00602SFConst.KIJI, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_TAIORRKI, svcFormBean.sendMessageBoolean(ACW00602SFConst.TAIORRKI, X31CWebConst.DATABEAN_GET_VALUE));
		paramMap.put(JACCommonConst.SCREEN_HKTGI_COMMISION_VALUE, commisionValue);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_SEL_OUTPUT_PRC_GRP_CD, prcGrpCd);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_SEL_OUT_PCRS_CD, pcrsCd);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_SEL_OUT_PRC_SVC_CD, selOutPrcSvcCd);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_SEL_OUT_PRC_KMK_CD, selOutPrcKmkCd);
		X31SDataBeanAccess commisionUmBean = svcFormBean.getDataBeanArray(ACW00602SFConst.COMMISION_UM_LIST).getDataBean(0);
		paramMap.put(JACCommonConst.SCREEN_HKTGI_SELECT_COMMISION, 
				commisionUmBean.sendMessageString(ACW00602SFConst.SELECT_COMMISION_01, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 子画面に渡す情報を設定する
		JCCWebCommon.setScreenInfo(this, JACScreenConst.SCREEN_ID_ACW00603, paramMap);
		// 子画面に親画面の画面IDを渡す。
		JCCWebCommon.setScreenId(this, JACScreenConst.SCREEN_ID_ACW00603, JACScreenConst.SCREEN_ID_ACW00602);

		// メッセージ領域の背景色の設定
		JCCWebCommon.setMessageAreaBackColor(this, "1");

		// メッセージの設定
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, new String[] {"再発行"});

		// 遷移先画面の設定
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW00603);
		
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW00603);
		
		return true;
	}

	
	/**
	 * サブ画面を閉じる
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean close() throws Exception
	{
		
		return true;
	}
}
