/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUTnmtHoshoCompsInfo
*   ソースファイル名：JFUTnmtHoshoCompsInfo.java
*   作成者          ：富士通
*   日付            ：2014年05月08日
*＜機能概要＞
*   端末保証・補償に関する情報を取得する部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v9.00       2014/05/08   FJ)文元     【ANK-2054-00-00】スマートリンク端末補償
*   v10.00      2014/07/28   FJ)文元     【ANK-2138-00-00】スマリン端末のトムソンケース同梱
*
**********************************************************************/
package eo.web.webview.common;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;

import eo.common.constant.JFUStrConst;
import eo.common.util.JFUCommonUtil;
import eo.common.util.JPCDateUtil;

/**
 * 端末保証・補償に関する情報を取得する部品です。
 * <br>
 * @author 富士通
 */
public class JFUTnmtHoshoCompsInfo
{
	/** 翌月１日算出フラグ：0 なし */
	private static final String NEXT_MONTH_0 = "0";
	/** 翌月１日算出フラグ：1 あり */
	private static final String NEXT_MONTH_1 = "1";
	/** 不可日（１０日） */
	private static final String FUKA_DAY_10 = "10";

	/**
	 * 保証または補償期間開始日を取得します。
	 * 
	 * <br>
	 * @param bl X31BWebBusinessLogic
	 * @param hcprdStadSnststdYmd 保証・補償期間開始日算出基準年月日
	 * @param prdStadSswSkcd 期間開始日算出方法識別コード
	 * @param hnbtCd 判別コード
	 * @param hcprdStadSnststdYmdScd 保証・補償期間開始日算出基準年月日識別コード
	 * @return 保証期間開始日
	 * @throws Exception 例外
	 */
	public static String getHoshoCompsYmdSta(X31BWebBusinessLogic bl, String hcprdStadSnststdYmd, String prdStadSswSkcd, String hnbtCd,
			String hcprdStadSnststdYmdScd) throws Exception
	{
		// 返却値初期設定
		String retYmd = JFUStrConst.EMPTY;
		
		// ●パラメータチェック
		// 保証・補償期間開始日算出基準年月日が未設定の場合
		if (JFUWebCommon.isNull(hcprdStadSnststdYmd))
		{
			// 処理終了
			return retYmd;
		}
		// 期間開始日算出方法識別コードが未設定の場合
		if (JFUWebCommon.isNull(prdStadSswSkcd))
		{
			// 処理終了
			return retYmd;
		}
		// 判別コードが未設定の場合
		if (JFUWebCommon.isNull(hnbtCd))
		{
			// 処理終了
			return retYmd;
		}

		// ※保証・補償期間開始日算出基準年月日に設定ありの場合、
		// 保証・補償期間開始日算出基準年月日識別コードが未設定はありえない
		
		// ●期間開始日算出方法識別コードにより開始日算出
		// 保証・補償期間開始日算出基準年月日識別コードが"2"（工事完了）の場合
		if (JFUStrConst.CD01652_2.equals(hcprdStadSnststdYmdScd))
		{
			// 保証・補償期間開始日算出基準年月日を返却値に設定
			retYmd = hcprdStadSnststdYmd;
		}
		else
		{
			// 期間開始日算出方法識別コード 出荷日の場合
			if (JFUStrConst.CD01639_01.equals(prdStadSswSkcd))
			{
				// 保証・補償期間開始日算出基準年月日を返却値に設定
				retYmd = hcprdStadSnststdYmd;
			}
			// 期間開始日算出方法識別コード 出荷日＋１０日
			else if (JFUStrConst.CD01639_02.equals(prdStadSswSkcd))
			{
				// 出荷日＋１０日（不可日数）を返却値に設定
				retYmd = calcYmd(hcprdStadSnststdYmd, FUKA_DAY_10, NEXT_MONTH_0);
			}
			// 期間開始日算出方法識別コード 出荷日＋１０日の翌月１日
			else if (JFUStrConst.CD01639_03.equals(prdStadSswSkcd))
			{
				// 出荷日＋１０日（不可日数）の翌月１日を返却値に設定
				retYmd = calcYmd(hcprdStadSnststdYmd, FUKA_DAY_10, NEXT_MONTH_1);
			}
			else
			{
				// 期間開始日算出方法識別コードが上記以外、処理終了
				return retYmd;
			}
		}
	
		return retYmd;
	}

	
	/**
	 * 開始日を算出します。
	 * 
	 * <br>
	 * @param hcprdStadSnststdYmd 保証・補償期間開始日算出基準年月日
	 * @param fukaDays 保証・補償不可期間
	 * @param monthFlg 0:翌月は算出しない、1:翌月１日 
	 * @return 開始日
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	private static String calcYmd(String hcprdStadSnststdYmd, String fukaDays, String monthFlg) throws Exception
	{
		// 返却値初期設定
		String retYmd = JFUStrConst.EMPTY;

		// 翌月１日算出フラグ：0 なし
		if (NEXT_MONTH_0.equals(monthFlg))
		{
			retYmd = JFUCommonUtil.addSubtractDay(hcprdStadSnststdYmd, Integer.parseInt(fukaDays));
		}
		// 翌月１日算出フラグ：1 あり
		else if (NEXT_MONTH_1.equals(monthFlg))
		{
			String calcYmd = JFUCommonUtil.addSubtractDay(hcprdStadSnststdYmd, Integer.parseInt(fukaDays));
			// 翌月１日
			retYmd = JFUCommonUtil.getBeginOfNextMonthDate(calcYmd);
		}

		return retYmd;
	}
	
	/**
	 * 補償期間終了日を取得します。
	 * 
	 * <br>
	 * @param bl X31BWebBusinessLogic
	 * @param hoshoCompsYmdSta 補償開始日
	 * @param hsPrd 補償期間
	 * @return 補償期間終了日
	 * @throws Exception 例外
	 */
	public static String getCompsYmdEnd(X31BWebBusinessLogic bl, String hoshoCompsYmdSta, String hsPrd) throws Exception
	{
		// 返却値初期設定
		String retYmd = JFUStrConst.EMPTY;
		
		// ●パラメータチェック
		// 補償開始日が未設定の場合
		if (JFUWebCommon.isNull(hoshoCompsYmdSta))
		{
			// 処理終了
			return retYmd;
		}
		// 端末補償期間が未設定の場合
		if (JFUWebCommon.isNull(hsPrd))
		{
			// 処理終了
			return retYmd;
		}

		// ●端末補償期間により終了日算出
		// 期間分加算（月加算）
		String addYmd = JPCDateUtil.addMonth(hoshoCompsYmdSta, Integer.parseInt(hsPrd));
		
		// その−１日
		retYmd = JFUCommonUtil.addSubtractDay(addYmd, -1);
		
		return retYmd;
	}
}
