package core.stlmes.server.sale.service.balance;

import java.util.*;
import core.stlmes.server.sale.util.*;

// 对外结算价格和对内价格关系管理

/*
 * 1、用户与制造部直接结算（首次受票单位为：合同结算单位），用户发起采购制造，出厂价等于结算价，价格相等
 2、用户与钢贸、销售、国贸结算，（首次受票单位为：对应的销售组织）销售组织发起采购制造，存在价差
 钢贸组织价差系数
 1）、其他：0.995
 2）、如果最终用户为【简称：上海津昊和上海翰微以及北京巴威】并且合同管理单位为钢贸公司-品种三部，价差系数为：0.998
 3）、如果最终用户为【上海津昊和上海翰微以及北京巴威】但合同管理单位为钢贸公司-其他部门，价差系数为：0.995
 3、用户与集团结算，集团发起采购制造（首次受票单位为：天津钢管集团股份有限公司），价格相等
 注：价格均为不含税价，财务开票时含税价等于不含税价*税率
 * 
 * */
public class SlmBalanceGetCorpPriceRationMgt
{
	// 默认都是0.995，只管理有异常的

	private static double defaultPriceDiff = 0.995;
	private static double sepcPriceDiff = 0.998;
	private static double equalsPrice = 1;

	// 统一入口函数，根据对外价返回内部价格
	// 后续有多种内部价格时，每个方法循环一遍去找
	// balprice 外部价格

	/*
	 * 120602 /
	 * 120601 N/A
	 * 120603 天津钢管集团股份有限公司
	 * 120604 天津钢管钢铁贸易有限公司
	 * 120605 天津钢管国际贸易有限公司
	 * 120606 合同结算单位
	 */
	public static double getCorpPrice(double balprice,
			core.stlmes.server.sale.po.SlmBalanceInfoBean bean)
	{
		// 集团公司
		String fstDrawee_Corp = "120603";
		// 钢贸公司
		String fstDrawee_SteelCorp = "120604";
		// 国贸公司
		String fstDrawee_OutCorp = "120605";
		// 结算单位
		String fstDrawee_BalUnit = "120606";

		// 客户和创建部门分类
		Hashtable hsSpce = getSpecPriceDiffByBuyerCodeAndCreateDept();
		java.text.DecimalFormat df = new java.text.DecimalFormat("0.0000");
		if (balprice == 0) return 0;
		if (bean == null) return 0;
		// 自产期货，结算单位和首次受票人均为钢贸公司，则认为2个价格一致
		if (bean.getFst_drawee_unit().equals(fstDrawee_SteelCorp)
				&& bean.getBuyercode().equals("1010101184")) return balprice
				* equalsPrice;

		// 首次受票单位，结算单位,直接对外结算，价格只有对外价格，为保持系统
		// 一致，内部价格一并填充
		if (bean.getFst_drawee_unit().equals(fstDrawee_BalUnit)) return balprice
				* equalsPrice;

		// 用户与集团结算，集团发起采购制造（首次受票单位为：天津钢管集团股份有限公司），价格相等
		if (bean.getFst_drawee_unit().equals(fstDrawee_Corp)) return balprice
				* equalsPrice;
		// 差异化客户和部门
		String buyercodeAndCreatedept = bean.getBuyercode()
				+ bean.getCreate_dept();
		if (hsSpce.containsKey(buyercodeAndCreatedept))
		{
			String ration = hsSpce.get(buyercodeAndCreatedept).toString();
			double orgPrice = balprice * (Convert.getDouble(ration) );
			return Convert.getDouble(df.format(orgPrice));

		}
		// 其他默认返回标准内部价格
		return Convert.getDouble(df.format(balprice * defaultPriceDiff));
	}

	private static java.util.Hashtable getSpecPriceDiffByBuyerCodeAndCreateDept()
	{
		Hashtable hs = new Hashtable();
		String createDeptThree = "002001005019";
		// 上海津昊 1012900062
		// 钢贸公司-品种三部 002001005019
		/*
		 * 1012900015 上海翰微钢管贸易有限公司
		 * 1012900016 上海翰微钢管有限公司
		 * 1012900017 上海翰微投资有限公司
		 * 1010200001 北京巴威公司
		 */

		hs.put("1012900062" + createDeptThree, sepcPriceDiff);
		hs.put("1012900015" + createDeptThree, sepcPriceDiff);
		hs.put("1012900016" + createDeptThree, sepcPriceDiff);
		hs.put("1012900017" + createDeptThree, sepcPriceDiff);
		hs.put("1010200001" + createDeptThree, sepcPriceDiff);

		return hs;
	}
}
