/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKejbKK2951KRCK
*   ソースファイル名：JKKejbKK2951KRCK.java
*   作成者          ：富士通
*   日付            ：2014年10月22日
*＜機能概要＞
*   ＣＩＣ参照用請求契約の関連制約部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   V10.00.00   2014/10/22  FJ）鈴木    新規作成
*   V10.00.01   2014/11/05  FJ）鈴木    【ANK-2273-00-00】未来適用の課金先の条件変更：当日の適用開始は含めない
*
**********************************************************************/

package eo.ejb.common.entity;

import java.util.ArrayList;
import java.util.List;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.KK0321ETMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.db.JKKejbKK0321DBABase;
import eo.ejb.common.db.JKKejbKK2951DBABase;

/**
 * <p>
 * ＣＩＣ参照用請求契約の関連制約部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbKK2951KRCK extends JKKejbKK2951DBABase
{

	/**
	 * <p>
	 * 新しいJKKejbKK2951KRCKを作成します。
	 * </p>
	 */
	public JKKejbKK2951KRCK()
	{
		super();
	}


	/**
	 * 該当の請求契約番号配下のサービス契約が異動先の請求契約番号配下の課金先（当日含まない未来適用）に存在する場合
	 * 異動先の請求契約番号のリストを返却します。
	 * @param seikyKeiNo 請求契約番号
	 * @param inCBSMsg
	 * @param inContext
	 * @return 異動先の請求契約番号のリスト
	 */
	public List<String> getNewKakins(String inSeikyKeiNo, CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 運用日付取得
		String opeDate = JKKModelCommon.getOpeDate(inCBSMsg);
	
		List<String> svcKeiList = new ArrayList<String>();
		
		// 「請求契約」に紐づく課金先の「サービス契約」を取得
		// 適用範囲内の条件なし：最後の引数＝"0"
		JKKejbKK0321DBABase kk0321Dba = new JKKejbKK0321DBABase();
		CAANMsg[] kk0321MsgList = kk0321Dba.getKK0321bySeikyKei(inSeikyKeiNo, null, opeDate, "0");
		for (CAANMsg kk0321Msg : kk0321MsgList)
		{
			// サービス契約 null は除外
			String kk0321SvcKeiNo = kk0321Msg.getString(KK0321ETMsg.SVC_KEI_NO);
			if (kk0321SvcKeiNo == null || "".equals(kk0321SvcKeiNo))
			{
				continue;
			}
			
			svcKeiList.add(kk0321SvcKeiNo);
		}
		
		List<String> seikyKeiList = new ArrayList<String>();

		for (String svcKeiNo : svcKeiList) {
			
			// 適用範囲内の条件なし：最後の引数＝"0"
			CAANMsg[] kk0321Msgs = kk0321Dba.getKK0321byVariKei(svcKeiNo, null, null, null, null, null, null, null, null, opeDate, "0");
			
			for (CAANMsg kk0321Msg : kk0321Msgs)
			{
				// （念のため）nullは対象外
				if (kk0321Msg.getString(KK0321ETMsg.SEIKY_KEI_NO) == null || "".equals(kk0321Msg.getString(KK0321ETMsg.SEIKY_KEI_NO))) 
				{
					continue;
				}
				
				// 入力の inSeikyKeiNo と同じ場合は、対象外
				if (inSeikyKeiNo.equals(kk0321Msg.getString(KK0321ETMsg.SEIKY_KEI_NO)))
				{
					continue;
				}

// 2014.11.05 ANK-2273-00-00 add start
				// 日付 nullチェック（念のため）
				if (kk0321Msg.getString(KK0321ETMsg.KAKINS_TENDYMD) == null || 
						kk0321Msg.getString(KK0321ETMsg.KAKINS_TENDYMD).length() != 8) {
					continue;
				}
				if (kk0321Msg.getString(KK0321ETMsg.KAKINS_TSTAYMD) == null || 
						kk0321Msg.getString(KK0321ETMsg.KAKINS_TSTAYMD).length() != 8) {
					continue;
				}
// 2014.11.05 ANK-2273-00-00 add end
				
// 2014.11.05 ANK-2273-00-00 mod start
//				// 過去（当日は含まない）の「課金先」(課金先適用終了年月日が過去日)は、対象外
//				if (JPCUtilCommon.isPastDate(kk0321Msg.getString(KK0321ETMsg.KAKINS_TENDYMD), opeDate, "0"))
				// 過去（当日を含む）の「課金先」(課金先適用終了年月日が過去日)は、対象外
				if (JPCUtilCommon.isPastDate(kk0321Msg.getString(KK0321ETMsg.KAKINS_TENDYMD), opeDate, "1"))
// 2014.11.05 ANK-2273-00-00 mod end
				{
					continue;
				}

// 2014.11.05 ANK-2273-00-00 mod start
//				// 過去（当日は含まない）の「課金先」(課金先適用開始年月日が過去日)は、対象外
//				if (JPCUtilCommon.isPastDate(kk0321Msg.getString(KK0321ETMsg.KAKINS_TSTAYMD), opeDate, "0"))
				// 過去（当日を含む）の「課金先」(課金先適用開始年月日が過去日)は、対象外
				if (JPCUtilCommon.isPastDate(kk0321Msg.getString(KK0321ETMsg.KAKINS_TSTAYMD), opeDate, "1"))
// 2014.11.05 ANK-2273-00-00 mod end
				{
					continue;
				}
				
				if (!seikyKeiList.contains(kk0321Msg.getString(KK0321ETMsg.SEIKY_KEI_NO))) {
					seikyKeiList.add(kk0321Msg.getString(KK0321ETMsg.SEIKY_KEI_NO));
				}
			}
		}
		
		
		return seikyKeiList;
	}

}