/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCNEditPrc
*	ソースファイル名：JCNEditPrc.java
*	作成者			：EK908988
*	日付			：2011年08月03日
*＜機能概要＞
*	課金額計算
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ4.00.00	2013/02/14	FJ)味岡		ST1-2013-0000313:料金調整画面での単価金額表示不備対応
*	ｖ5.00.00	2013/04/30	FJ)味岡		TAI-2013-0000025:静的解析の指摘事項修正
*	ｖ18.00.00	2015/10/22  FJ)頼経	     ANK-2694-00-00 ワンストップ案件（ＳＴＥＰ２）※koptWebBからkoptWebAへコピー
*	v65.00.00	2023/10/13	FJ)吉田		【ANK-4346-00-00】【eo定期】CCMG再構築対応
*	v65.00.01	2024/01/13	FJ)張		【ANK-4346-00-00】【eo定期】CCMG再構築対応
*	v65.00.02	2024/02/02	FJ)吉田		【ST-2024-0000004】CCMG再構築対応
********************************************************************************/

package eo.web.webview.commonOneStop;

import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.util.JCCFrameworkException;
import eo.common.util.JCNStringUtil;
import eo.common.util.JPCUtilCommon;

/**
 * コンテンツ決済WEB共通
 *
 */
/**
 * @author 908988
 *
 */
public class JCNEditPrc extends JPCUtilCommon {

	// ANK-4346-00-00 DEL START
//	/**
//	 * 課金額編集（請求照会）
//	 * 
//	 * @param targetMap
//	 * @param targetBean
//	 */
//	public static void editPrice1(HashMap<String, String> targetMap, X31SDataBeanAccess targetBean) {
//		
//		// レコード区分から課金情報と課金訂正を分ける
//		if ("1".equals(targetMap.get("record_kbn"))) {
//			// 課金情報
//			if ("0".equals(targetMap.get("chrg_stat_cd"))) {
//				// 課金状態コード：課金中
//				
//				if ("1".equals(targetMap.get("plmin_div"))) {
//					// 赤黒区分が赤伝の場合
//					targetBean.sendMessageString("数量",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//					targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//					targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//					targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//					targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//				} else {
//					// 赤黒区分が黒伝の場合
//					int suuryou = Integer.parseInt(targetMap.get("cont_buy_cnt"));		// コンテンツ購入数量
//					int zeikomiTanka = Integer.parseInt(targetMap.get("cont_tanka"));	// 税込単価
//					double hontaiKakaku = Double.parseDouble(targetMap.get("cont_tanka"));	// 本体価格
//					double zeiritsu = Double.parseDouble(targetMap.get("tax_rt"));			// 税率
//					
//					// 税区により金額算出
//					if ("2".equals(targetMap.get("taxarea"))) {
//						// 外税
//						zeikomiTanka = (int)Double.valueOf(Math.floor(hontaiKakaku * (1 + zeiritsu / 100))).intValue();
//					} else if ("1".equals(targetMap.get("taxarea"))) {
//						// 内税
//						hontaiKakaku = Double.valueOf(Math.ceil(hontaiKakaku / (1 + zeiritsu / 100)));
////						hontaiKakaku = hontaiKakaku - zeigaku;
//					}
//					targetBean.sendMessageString("数量",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(suuryou));
//					targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(zeikomiTanka));
//					targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)hontaiKakaku));
//					targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, targetMap.get("chrg_amnt"));
//					int hontaiRyoukin = (int)hontaiKakaku * suuryou;
//					targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(hontaiRyoukin));
//				}
//			} else {
//				// 課金状態コード：課金中以外
//				targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//				targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//				targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//				targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//			}
//			
//		} else {
//			// 課金訂正情報
//			double kingakuKomi = 0;
//			if ("2".equals(targetMap.get("contchrgtesei_div"))) {
//				// 補償費
//				kingakuKomi = -Double.parseDouble(targetMap.get("compensation"));
//			} else {
//				// 売上減、取消
//				kingakuKomi = -Double.parseDouble(targetMap.get("sales_gen_amnt"));
//			}
//			double kingakuNuki = kingakuKomi;
//
////			double zeiritsu = Double.parseDouble(targetMap.get("tax_rt"));			// 税率
////			// 税区により金額算出
////			if ("2".equals(targetMap.get("taxarea"))) {
////				// 外税
////				kingakuKomi = Double.valueOf(Math.floor(kingakuKomi * (1 + zeiritsu / 100)));
////			} else if ("1".equals(targetMap.get("taxarea"))) {
////				// 内税
////				kingakuNuki = Double.valueOf(Math.ceil(kingakuNuki / (1 + zeiritsu / 100)));
//////				int zeigaku = Double.valueOf(Math.ceil(kingakuNuki / (100 + zeiritsu) * zeiritsu)).intValue();
//////				kingakuNuki = kingakuNuki - zeigaku;
////			}
//			targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, "");
//			targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, "");
//			targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)kingakuNuki));
//			targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)kingakuKomi));
//		}
//
//		return;
//	}
//	
//	/**
//	 * 課金額編集（料金調整）
//	 * 
//	 * @param targetMap
//	 * @param targetBean
//	 */
//	public static void editPrice2(HashMap<String, String> targetMap, X31SDataBeanAccess targetBean) {
//		
//		if ("1".equals(targetMap.get("plmin_div")))
//		{
//			// 課金情報の最終レコードが赤伝
//			targetBean.sendMessageString("コンテンツ購入数量",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//			targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//			targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//			targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//			targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//		}
//		else
//		{
//			if ("0".equals(targetMap.get("chrg_stat_cd"))) {
//				// 課金状態コード：課金中
//
//				// 課金情報の最終レコードが赤伝以外
//				int suuryou = Integer.parseInt(targetMap.get("cont_buy_cnt"));		// コンテンツ購入数量
//				double zeikomiTanka = Double.parseDouble(targetMap.get("cont_tanka"));	// 税込単価
//				double hontaiKakaku = Double.parseDouble(targetMap.get("cont_tanka"));	// 本体価格
//				double zeiritsu = Double.parseDouble(targetMap.get("tax_rt"));		// 税率
//				double gengaku = Double.parseDouble(targetMap.get("sales_gen_amnt"));	// 売上減額
//				double compensation = Double.parseDouble(targetMap.get("compensation"));	// 補償費
//				double chrg_gaku = Double.parseDouble(targetMap.get("chrg_amnt"));		// 課金額
//				
//				// 税区により金額算出
//				if ("2".equals(targetMap.get("taxarea"))) {
//					// 外税
//					zeikomiTanka = Double.valueOf(Math.floor(hontaiKakaku * (1 + zeiritsu / 100)));
//				} else if ("1".equals(targetMap.get("taxarea"))) {
//					// 内税
//					hontaiKakaku = Double.valueOf(Math.ceil(hontaiKakaku / (1 + zeiritsu / 100)));
////					hontaiKakaku = hontaiKakaku - zeigaku;
//				}
//				// 税込合計
//				double komikei = chrg_gaku - gengaku - compensation;
//				double hontaiRyoukin = 0;
//				if ("1".equals(targetMap.get("taxarea")))
//				{
//					hontaiRyoukin = Double.valueOf(Math.ceil(komikei / (1 + zeiritsu / 100)));
//				}
//				else if("2".equals(targetMap.get("taxarea")))
//				{
//					hontaiRyoukin = Double.valueOf(Math.ceil(komikei / (1 + zeiritsu / 100)));
//				}
//				else
//				{
//					hontaiRyoukin = komikei;
//				}
//				// TAI-2013-0000025:静的解析の指摘事項修正(不要なMath.roundを削除)
//				targetBean.sendMessageString("コンテンツ購入数量",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(suuryou));
//				targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)zeikomiTanka));
//				targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)hontaiKakaku));
//				targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)komikei));
//				targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)hontaiRyoukin));
//			} else {
//				// 課金状態コードが課金中以外
//				targetBean.sendMessageString("コンテンツ購入数量",  X31CWebConst.DATABEAN_SET_VALUE, targetMap.get("cont_buy_cnt"));
//				targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//				targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//				targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//				targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, "0");
//			}
//		}
//	}
	// ANK-4346-00-00 DEL END
	// ANK-4346-00-00 ADD START
	/**
	 * 課金額編集（請求照会）
	 * 
	 * @param targetMap
	 * @param targetBean
	 */
	public static void editPrice1(HashMap<String, Object> targetMap, X31SDataBeanAccess targetBean) {
		
		// 課金情報
		double taxRt = Double.parseDouble((String)targetMap.get("tax_rt"));										// 税率
		int regularUnitPrice = Integer.parseInt((String)targetMap.get("cont_tanka"));							// 単価（税込）
		double regularUnitPriceNonTax = Double.valueOf(Math.ceil(regularUnitPrice / (1 + taxRt / 100)));		// 単価（税抜）
		int chargeAmount = Integer.parseInt((String)targetMap.get("chrg_amnt"));								// 課金額
		double chargeAmountNonTax = Double.valueOf(Math.ceil(chargeAmount / (1 + taxRt / 100)));				// 課金額（税抜）
		
		targetBean.sendMessageString("数量",  X31CWebConst.DATABEAN_SET_VALUE, (String)targetMap.get("cont_buy_cnt"));
		targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(regularUnitPrice));
		targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)regularUnitPriceNonTax));
		targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(chargeAmount));
		targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)chargeAmountNonTax));

		// 課金訂正情報
		String contchrgteseiDiv = (String)targetMap.get("contchrgtesei_div");
		// 課金訂正情報が設定されている場合は補正情報で上書きする。
		if(!JCNStringUtil.isNullBlank(contchrgteseiDiv))
		{
			int discountAmount = Integer.parseInt((String)targetMap.get("discount_amount"));						// 値引額
			// ST-2024-0000004 MOD START
//			int  discountAmountTax = chargeAmount - discountAmount;													// 課金額
			int  discountAmountTax = discountAmount;																// 課金額
			// ST-2024-0000004 MOD END
			double discountAmountNonTax = Double.valueOf(Math.ceil(discountAmountTax / (1 + taxRt / 100)));			// 課金額(税抜)
			
			// ANK-4346-00-00 v65.00.01 ADD START
			targetBean.sendMessageString("数量",  X31CWebConst.DATABEAN_SET_VALUE, "");
			// ANK-4346-00-00 v65.00.01 ADD END
			targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, "");
			targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, "");
			// ST-2024-0000004 MOD START
//			targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(discountAmountTax));
//			targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)discountAmountNonTax));
			targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(-discountAmount));
			targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)-discountAmountNonTax));
			// ST-2024-0000004 MOD END
		}

		
		return;
	}
	
	
	/**
	 * 課金額編集（料金調整）
	 * 
	 * @param targetMap
	 * @param targetBean
	 */
	public static void editPrice2(HashMap<String, Object> targetMap, X31SDataBeanAccess targetBean) {
		
		// 課金情報
		double taxRt = Double.parseDouble((String)targetMap.get("tax_rt"));										// 税率
		int regularUnitPrice = Integer.parseInt((String)targetMap.get("cont_tanka"));							// 単価（税込）
		double regularUnitPriceNonTax = Double.valueOf(Math.ceil(regularUnitPrice / (1 + taxRt / 100)));		// 単価（税抜）
		int chargeAmount = Integer.parseInt((String)targetMap.get("chrg_amnt"));								// 課金額
		double chargeAmountNonTax = Double.valueOf(Math.ceil(chargeAmount / (1 + taxRt / 100)));				// 課金額（税抜）
		
		targetBean.sendMessageString("数量",  X31CWebConst.DATABEAN_SET_VALUE, (String)targetMap.get("cont_buy_cnt"));
		targetBean.sendMessageString("税込価格",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(regularUnitPrice));
		targetBean.sendMessageString("本体価格",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)regularUnitPriceNonTax));
		targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(chargeAmount));
		targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)chargeAmountNonTax));

		// 課金訂正情報
		String contchrgteseiDiv = (String)targetMap.get("contchrgtesei_div");
		// 課金訂正情報が設定されている場合は補正情報で上書きする。
		if(!JCNStringUtil.isNullBlank(contchrgteseiDiv))
		{
			int discountAmount = Integer.parseInt((String)targetMap.get("discount_amount"));						// 値引額
			int  discountAmountTax = chargeAmount - discountAmount;													// 課金額
			double discountAmountNonTax = Double.valueOf(Math.ceil(discountAmountTax / (1 + taxRt / 100)));			// 課金額(税抜)

			targetBean.sendMessageString("税込合計",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(discountAmountTax));
			targetBean.sendMessageString("本体料金",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf((int)discountAmountNonTax));
		}

		
		return;
	}
	// ANK-4346-00-00 ADD END
	/**
	 * 権限有無判定処理。 <br>
	 * 共有フォームBeanに登録された権限リストと権限制御定義ファイルを突き合わせ、 <br>
	 * 権限の有無を判定して結果を返します。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @param eventKey 権限制御定義ファイルに設定する画面ID、イベントID、イベント番号の設定値（例：CRW034010PJP;B_OPEN_CRW00101_INS;0）
	 * @return 権限有無
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	protected static boolean checkAuthority(X31BWebBusinessLogic vl, String eventKey) throws JCCFrameworkException
	{
		//---------------------------------------
		// 入力パラメータチェック
		//---------------------------------------
		JCCAuthorityCtrlUtil.checkInputpParameter(vl);

		//---------------------------------------
		// 権限リスト取得
		//---------------------------------------
		HashMap<String, String> lstMap = new HashMap<String, String>();
		JCCWebCommon.setAuthorityList(vl, lstMap);
		if (0 == lstMap.size())
		{	
			return false;
		}

		//---------------------------------------
		// 権限制御定義ファイルキャッシュ情報取得
		//---------------------------------------
		// 権限制御定義情報マップ取得
		HashMap<String, String> teigiMap = new HashMap<String, String>();

		try
		{
			teigiMap = JCCWebCommon.getMap(vl.getGamenId());
		}
		catch (JCCFrameworkException e)
		{
			throw new JCCFrameworkException("権限制御定義ファイルキャッシュ情報の取得に失敗しました。", e);
		}

		if (null == teigiMap || 0 == teigiMap.size())
		{
			return false;
		}

		// 権限制御定義情報マップにeventKeyが含まれていない場合、権限なしとしてリターン
		if (!teigiMap.containsKey(eventKey))
		{
			return false;
		}

		// 権限制御定義情報マップから、eventKeyに紐づく権限コードリスト取得
		String value = (String)teigiMap.get(eventKey);

		// 権限の有無を判定し、結果をリターン
		return JCCWebCommon.judgeStatus(vl, lstMap, value);
	}

}
