/*******************************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbKK2791ETDA
*	ソースファイル名：JKKejbKK2791ETDA.java
*	作成者			：富士通
*	日付			：2013年05月27日
*＜機能概要＞
*	自動予約取消ワークに対するDB操作部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2013/05/27	FJ）寺本	新規作成
*	v7.00.00	2013/11/15	FJ）小島	ANK-1578-00-00
*
********************************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;

import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbm.entity.KK2791ETMsg;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.edit.JKKejbKK2791NumberParts;


/**
 * <p>
 * 自動予約取消ワークに対するDB操作部品クラスです。
 * </p>
 * @author 富士通
 *
 */
public class JKKejbKK2791ETDA extends JKKejbKK2791ETAccesser
{
	/** スキーマID：異動予約 */
	private static final String SCHEMA_KK1681 = "KK1681";

	/**
	 * コンストラクタです。
	 */
	public JKKejbKK2791ETDA()
	{
		super();
	}
	
	/**
	 * <p>
	 * 自動予約取消ワークに予約情報を格納します
	 * </p>
	 * @param inETMsg ETメッセージ
	 * @param schema 対象スキーマ
	 * @param clStatFlg 自動予約取消状態コード
	 */
	public void createKK2791(CAANMsg inETMsg, String schema, String clStatFlg)
	{
		// スキーマ名が未設定の場合は何も振舞わない
		if (schema == null || schema.isEmpty())
		{
			return;
		}

		// 自動予約取消ワークにレコードを挿入する
		CAANMsg createMsg = null;
		if (schema.equals(SCHEMA_KK1681))
		{
			// 異動予約→自動予約取消ワークルート
			createMsg = this.createKK2791byIdoRsv(inETMsg, clStatFlg);
		}
		else
		{
			// 各業務スキーマ→自動予約取消ワークルート
			createMsg = this.createKK2791byGymSchema(inETMsg, clStatFlg);
		}

		// 自動予約取消ワークに登録する情報が存在しない場合
		if (createMsg == null)
		{
			// 何もしない
			return;
		}

		// 登録処理の実行
		try
		{
			super.create(createMsg);
		}
		catch (CAANCreateException ce)
		{
			throw new CAANRuntimeException(ce);
		}
	}

	/**
	 * <p>
	 *  異動予約の予約情報を自動予約取消ワークにレコードを挿入する
	 * </p>
	 * @param inETMsg ETメッセージ
	 * @param clStatFlg 自動予約取消状態コード
	 */
	private CAANMsg createKK2791byIdoRsv(CAANMsg inETMsg, String clStatFlg)
	{
		// 予約情報が未設定の場合は何もせず処理終了
		if (inETMsg == null)
		{
			return null;
		}

		// 自動予約取消ワークスキーマ
		CAANMsg creKK2791Msg = new CAANMsg(KK2791ETMsg.class.getName());
		
		// 採番処理
		JKKejbKK2791NumberParts kk2791NumParts = new JKKejbKK2791NumberParts();
		// 自動予約取消ワーク番号
		creKK2791Msg.set(KK2791ETMsg.AUTO_RSV_CL_WK_NO, kk2791NumParts.getAutoRsvClWkNo(inETMsg));
		// 取消契機異動区分
		creKK2791Msg.set(KK2791ETMsg.CL_OPTY_IDO_DIV, getCl_opty_ido_div());
		// 取消契機申込明細番号
		creKK2791Msg.set(KK2791ETMsg.CL_OPTY_MSKM_DTL_NO, getCl_opty_mskm_dtl_no());
		// 自動予約取消状態コード
		creKK2791Msg.set(KK2791ETMsg.AUTO_RSV_CL_STAT_CD, this.getAutoRsvClStatCd(clStatFlg));
		// SYSID
		creKK2791Msg.set(KK2791ETMsg.SYSID, inETMsg.getString(KK1681ETMsg.SYSID));
		// 請求契約番号
		creKK2791Msg.set(KK2791ETMsg.SEIKY_KEI_NO, inETMsg.getString(KK1681ETMsg.SEIKY_KEI_NO));
		// サービス契約番号
		creKK2791Msg.set(KK2791ETMsg.SVC_KEI_NO, inETMsg.getString(KK1681ETMsg.SVC_KEI_NO));
		// サービス契約内訳番号
		creKK2791Msg.set(KK2791ETMsg.SVC_KEI_UCWK_NO, inETMsg.getString(KK1681ETMsg.SVC_KEI_UCWK_NO));
		// オプションサービス契約番号
		creKK2791Msg.set(KK2791ETMsg.OP_SVC_KEI_NO, inETMsg.getString(KK1681ETMsg.OP_SVC_KEI_NO));
		// サブオプションサービス契約番号
		creKK2791Msg.set(KK2791ETMsg.SBOP_SVC_KEI_NO, inETMsg.getString(KK1681ETMsg.SBOP_SVC_KEI_NO));
		// 機器提供サービス契約番号
		creKK2791Msg.set(KK2791ETMsg.KKTK_SVC_KEI_NO, inETMsg.getString(KK1681ETMsg.KKTK_SVC_KEI_NO));
		// 請求オプションサービス契約番号
		creKK2791Msg.setNull(KK2791ETMsg.SEIOPSVC_KEI_NO);
		// 割引サービス契約番号
		creKK2791Msg.set(KK2791ETMsg.WRIB_SVC_KEI_NO, inETMsg.getString(KK1681ETMsg.WRIB_SVC_KEI_NO));
		// サービス契約回線内訳番号
		creKK2791Msg.set(KK2791ETMsg.SVC_KEI_KAISEN_UCWK_NO, inETMsg.getString(KK1681ETMsg.SVC_KEI_KAISEN_UCWK_NO));
		// 予約管理先識別コード
		creKK2791Msg.set(KK2791ETMsg.RSV_KNRI_SK_SKBT_CD, JKKModelConst.RSV_KNRI_SK_SKBT_CD_IDO_RSV);
		// 予約契機異動区分
		creKK2791Msg.set(KK2791ETMsg.RSV_OPTY_IDO_DIV, inETMsg.getString(KK1681ETMsg.IDO_DIV));
		// 異動予約詳細コード
		creKK2791Msg.set(KK2791ETMsg.IDO_RSV_DTL_CD, inETMsg.getString(KK1681ETMsg.IDO_RSV_DTL_CD));
		// 予約契機申込明細番号
		creKK2791Msg.set(KK2791ETMsg.RSV_OPTY_MSKM_DTL_NO, inETMsg.getString(KK1681ETMsg.MSKM_DTL_NO));
		// 予約適用年月日
		creKK2791Msg.set(KK2791ETMsg.RSV_APLY_YMD, inETMsg.getString(KK1681ETMsg.RSV_APLY_YMD));
		// 各種スキーマ世代登録年月日時分秒
		creKK2791Msg.setNull(KK2791ETMsg.VARI_SCHMA_GENE_ADD_DTM);
		// 予約適用コード
		creKK2791Msg.setNull(KK2791ETMsg.RSV_APLY_CD);
		// 異動予約番号
		creKK2791Msg.set(KK2791ETMsg.IDO_RSV_NO, inETMsg.getString(KK1681ETMsg.IDO_RSV_NO));
		// 異動予約状態コード
		creKK2791Msg.set(KK2791ETMsg.IDO_RSV_STAT_CD, inETMsg.getString(KK1681ETMsg.IDO_RSV_STAT_CD));
		// 登録年月日時分秒
		creKK2791Msg.set(KK2791ETMsg.ADD_DTM, getAdd_dtm());
		// 登録オペレータアカウント
		creKK2791Msg.set(KK2791ETMsg.ADD_OPEACNT, getAdd_opeacnt());
		// 更新年月日時分秒
		creKK2791Msg.set(KK2791ETMsg.UPD_DTM, getUpd_dtm());
		// 更新オペレータアカウント
		creKK2791Msg.set(KK2791ETMsg.UPD_OPEACNT, getUpd_opeacnt());
		// 無効フラグ
		creKK2791Msg.set(KK2791ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
		// 機器オプションサービス契約番号
		creKK2791Msg.set(KK2791ETMsg.KKOP_SVC_KEI_NO, inETMsg.getString(KK1681ETMsg.KKOP_SVC_KEI_NO));

		return creKK2791Msg;
	}
	
	/**
	 * <p>
	 *  各業務スキーマの予約情報を自動予約取消ワークにレコードを挿入する
	 * </p>
	 * @param inETMsg ETメッセージ
	 * @param clStatFlg 自動予約取消状態コード
	 */
	private CAANMsg createKK2791byGymSchema(CAANMsg inETMsg, String clStatFlg)
	{
		// 予約情報が未設定の場合は何もせず処理終了
		if (inETMsg == null)
		{
			return null;
		}

		// 自動予約取消ワークスキーマ
		CAANMsg creKK2791Msg = new CAANMsg(KK2791ETMsg.class.getName());
		
		// 採番処理
		JKKejbKK2791NumberParts kk2791NumParts = new JKKejbKK2791NumberParts();
		// 自動予約取消ワーク番号
		creKK2791Msg.set(KK2791ETMsg.AUTO_RSV_CL_WK_NO, kk2791NumParts.getAutoRsvClWkNo(inETMsg));
		// 取消契機異動区分
		creKK2791Msg.set(KK2791ETMsg.CL_OPTY_IDO_DIV, getCl_opty_ido_div());
		// 取消契機申込明細番号
		creKK2791Msg.set(KK2791ETMsg.CL_OPTY_MSKM_DTL_NO, getCl_opty_mskm_dtl_no());
		// 自動予約取消状態コード
		creKK2791Msg.set(KK2791ETMsg.AUTO_RSV_CL_STAT_CD, this.getAutoRsvClStatCd(clStatFlg));
		// SYSID
		creKK2791Msg.set(KK2791ETMsg.SYSID, getSysid());
		// 請求契約番号
		creKK2791Msg.set(KK2791ETMsg.SEIKY_KEI_NO, getSeiky_kei_no());
		// サービス契約番号
		creKK2791Msg.set(KK2791ETMsg.SVC_KEI_NO, getSvc_kei_no());
		// サービス契約内訳番号
		creKK2791Msg.set(KK2791ETMsg.SVC_KEI_UCWK_NO, getSvc_kei_ucwk_no());
		// オプションサービス契約番号
		creKK2791Msg.set(KK2791ETMsg.OP_SVC_KEI_NO, getOp_svc_kei_no());
		// サブオプションサービス契約番号
		creKK2791Msg.set(KK2791ETMsg.SBOP_SVC_KEI_NO, getSbop_svc_kei_no());
		// 機器提供サービス契約番号
		creKK2791Msg.set(KK2791ETMsg.KKTK_SVC_KEI_NO, getKktk_svc_kei_no());
		// 請求オプションサービス契約番号
		creKK2791Msg.set(KK2791ETMsg.SEIOPSVC_KEI_NO, getSeiopsvc_kei_no());
		// 割引サービス契約番号
		creKK2791Msg.set(KK2791ETMsg.WRIB_SVC_KEI_NO, getWrib_svc_kei_no());
		// サービス契約回線内訳番号
		creKK2791Msg.set(KK2791ETMsg.SVC_KEI_KAISEN_UCWK_NO, getSvc_kei_kaisen_ucwk_no());
		// 予約管理先識別コード
		creKK2791Msg.set(KK2791ETMsg.RSV_KNRI_SK_SKBT_CD, JKKModelConst.RSV_KNRI_SK_SKBT_CD_VARI_WORK_SCHEMA);
		// 予約契機異動区分
		creKK2791Msg.set(KK2791ETMsg.RSV_OPTY_IDO_DIV, getRsv_opty_ido_div());
		// 異動予約詳細コード
		creKK2791Msg.setNull(KK2791ETMsg.IDO_RSV_DTL_CD);
		// 予約契機申込明細番号
		creKK2791Msg.set(KK2791ETMsg.RSV_OPTY_MSKM_DTL_NO, inETMsg.getString(KK1681ETMsg.MSKM_DTL_NO));
		// 予約適用年月日
		creKK2791Msg.set(KK2791ETMsg.RSV_APLY_YMD, getRsv_aply_ymd());
		// 各種スキーマ世代登録年月日時分秒
		creKK2791Msg.set(KK2791ETMsg.VARI_SCHMA_GENE_ADD_DTM, getVari_schma_gene_add_dtm());
		// 予約適用コード
		creKK2791Msg.set(KK2791ETMsg.RSV_APLY_CD, getRsv_aply_cd());
		// 異動予約番号
		creKK2791Msg.setNull(KK2791ETMsg.IDO_RSV_NO);
		// 異動予約状態コード
		creKK2791Msg.setNull(KK2791ETMsg.IDO_RSV_STAT_CD);
		// 登録年月日時分秒
		creKK2791Msg.set(KK2791ETMsg.ADD_DTM, getAdd_dtm());
		// 登録オペレータアカウント
		creKK2791Msg.set(KK2791ETMsg.ADD_OPEACNT, getAdd_opeacnt());
		// 更新年月日時分秒
		creKK2791Msg.set(KK2791ETMsg.UPD_DTM, getUpd_dtm());
		// 更新オペレータアカウント
		creKK2791Msg.set(KK2791ETMsg.UPD_OPEACNT, getUpd_opeacnt());
		// 無効フラグ
		creKK2791Msg.set(KK2791ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
		// 機器オプションサービス契約番号
		creKK2791Msg.set(KK2791ETMsg.KKOP_SVC_KEI_NO, getKkop_svc_kei_no());

		return creKK2791Msg;
	}
	
	/**
	 * <p>
	 * 自動予約取消状態コードを設定します
	 * </p>
	 * @param clStatFlg 自動予約取消状態コード
	 * @return 01：取消済 99：自動予約取消未実施
	 */
	private String getAutoRsvClStatCd(String clStatFlg)
	{
		// 自動予約取消状態コードが未設定の場合
		if (clStatFlg == null || clStatFlg.isEmpty())
		{
			throw new CAANRuntimeException("自動予約取消状態コードが未設定です。自動予約取消状態コードの設定ができません。");
		}

		// 自動予約取消状態コードが"取消済"の場合
		if (JKKModelConst.AUTO_RSV_CL_STAT_CD_CL_ZM.equals(clStatFlg))
		{
			return JKKModelConst.AUTO_RSV_CL_STAT_CD_CL_ZM;
		}
		// 自動予約取消状態コードが"自動予約取消未実施"の場合
		else if (JKKModelConst.AUTO_RSV_CL_STAT_CD_MI_JSSI.equals(clStatFlg))
		{
			return JKKModelConst.AUTO_RSV_CL_STAT_CD_MI_JSSI;
		}
		else
		{
			throw new CAANRuntimeException("自動予約取消状態コードの設定ができません。自動予約取消状態コード=[" + clStatFlg + "]");
		}
	}
}
