U9页面字段联动代码
注意事项
- 所有的代码都需要写在WebPart目录中*.Extend.cs
- 注册CallBack方法
public void AfterOnLoad() {
CallBack_UomTab_硬件成本不含税();
CallBack_UomTab_小计();
CallBack_UomTab_合同额And占比();
CallBack_UomTab_费用And毛利();
CallBack_UomTab_总收入And总成本();
CallBack_UomTab_合同计算();
}
- 实现注册方法
//
private void CallBack_UomTab_硬件成本不含税() {
// 所有控件集合,按顺序对应每个 AssociationControl
IUFFldNumberControl[] sourceControls = new IUFFldNumberControl[] {
PartsCostOutsource65, // 硬件成本外购(含税)
PartsCostOwnProduction53, // 硬件成本自产(含税)
InstallMaterialCost76, // 安装材料成本(含税)
InstallArtificialCost100, // 安装人工成本(含税)
};
IUFFldReference[] sourceControls1 = new IUFFldReference[] {
PartsCostOutsourceTax43, // 硬件成本外购(含税)税率
PartsCostOwnProductionTax68, // 硬件成本自产(含税)税率
InstallMaterialCostTax40, // 安装材料成本(含税)税率
InstallArtificialCostTax82, // 安装人工成本(含税)税率
};
ClientCallBackFrm cF = new ClientCallBackFrm();
cF.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(CallBack_UomTab_硬件成本不含税);
foreach (var ctrl in sourceControls) {
// 注册控件到参数
cF.ParameterControls.Add(ctrl);
// 创建并配置关联控制器
var assoc = new AssociationControl {
SourceServerControl = ctrl,
SourceControl = { EventName = "OnValueChanged" }
};
cF.Add(assoc);
}
foreach (var ctrl in sourceControls1) {
// 注册控件到参数
cF.ParameterControls.Add(ctrl);
// 创建并配置关联控制器
var assoc = new AssociationControl {
SourceServerControl = ctrl,
SourceControl = { EventName = "OnValueChanged" }
};
cF.Add(assoc);
}
}
/// <summary>
/// 回调函数:【含税金额+税率】,自动计算并设置【不含税金额】
/// </summary>
object CallBack_UomTab_硬件成本不含税(CustomerActionEventArgs args) {
// 硬件成本 - 外购部分
ComputeNoTaxValue(args, this.PartsCostOutsource65, this.PartsCostOutsourceTax43,
this.PartsCostOutsourceNo55);
// 硬件成本 - 自产部分
ComputeNoTaxValue(args, this.PartsCostOwnProduction53, this.PartsCostOwnProductionTax68,
this.PartsCostOwnProductionNo85);
// 安装材料成本
ComputeNoTaxValue(args, this.InstallMaterialCost76, this.InstallMaterialCostTax40,
this.InstallMaterialCostNo37);
// 安装人工成本
ComputeNoTaxValue(args, this.InstallArtificialCost100, this.InstallArtificialCostTax82,
this.InstallArtificialCostNo76);
return args;
}
private void CallBack_UomTab_合同计算() {
// 所有控件集合,按顺序对应每个 AssociationControl
IUFFldNumberControl[] sourceControls = new IUFFldNumberControl[] {
ContractMoneyOne70, //合同金额1
ContractMoneyTwo52, //合同金额2
ContractMoneyThree67, //合同金额3
ContractMoneyFour44, //合同金额4
};
IUFFldReference[] sourceControls1 = new IUFFldReference[] {
ContractMoneyOneTax52, //合同金额1_税率
ContractMoneyTwoTax22, //合同金额2_税率
ContractMoneyThreeTax83, //合同金额3_税率
ContractMoneyFourTax122, //合同金额4_税率
};
ClientCallBackFrm cF = new ClientCallBackFrm();
cF.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(CallBack_UomTab_合同计算);
foreach (var ctrl in sourceControls) {
// 注册控件到参数
cF.ParameterControls.Add(ctrl);
// 创建并配置关联控制器
var assoc = new AssociationControl {
SourceServerControl = ctrl,
SourceControl = { EventName = "OnValueChanged" }
};
cF.Add(assoc);
}
foreach (var ctrl in sourceControls1) {
// 注册控件到参数
cF.ParameterControls.Add(ctrl);
// 创建并配置关联控制器
var assoc = new AssociationControl {
SourceServerControl = ctrl,
SourceControl = { EventName = "OnValueChanged" }
};
cF.Add(assoc);
}
}
object CallBack_UomTab_合同计算(CustomerActionEventArgs args) {
//合同金额1
decimal ContractMoneyOne70 = decimal.Parse(args.ArgsHash[this.ContractMoneyOne70.ClientID].ToString());
//合同金额1_税率
long ContractMoneyOneTax52 = long.Parse(args.ArgsHash[this.ContractMoneyOneTax52.ClientID].ToString());
if (ContractMoneyOneTax52 > 0) {
// 税率
string queryTax = QueryTax(ContractMoneyOneTax52);
args.ArgsResult.Add(new UFWebClientNumberAdapter(this.ProjectIncomeOne7).ClientInstance +
".set_Value('" + ContractMoneyOne70 / (1 + decimal.Parse(queryTax)) + "')");
}
//合同金额2
decimal ContractMoneyTwo52 = decimal.Parse(args.ArgsHash[this.ContractMoneyTwo52.ClientID].ToString());
//合同金额2_税率
long ContractMoneyTwoTax22 = long.Parse(args.ArgsHash[this.ContractMoneyTwoTax22.ClientID].ToString());
if (ContractMoneyTwoTax22 > 0) {
// 税率
string queryTax = QueryTax(ContractMoneyTwoTax22);
args.ArgsResult.Add(new UFWebClientNumberAdapter(this.ProjectIncomeTwo19).ClientInstance +
".set_Value('" + ContractMoneyTwo52 / (1 + decimal.Parse(queryTax)) + "')");
}
//合同金额3
decimal ContractMoneyThree67 = decimal.Parse(args.ArgsHash[this.ContractMoneyThree67.ClientID].ToString());
//合同金额3_税率
long ContractMoneyThreeTax83 = long.Parse(args.ArgsHash[this.ContractMoneyThreeTax83.ClientID].ToString());
if (ContractMoneyThreeTax83 > 0) {
// 税率
string queryTax = QueryTax(ContractMoneyThreeTax83);
args.ArgsResult.Add(new UFWebClientNumberAdapter(this.ProjectIncomeThree59).ClientInstance +
".set_Value('" + ContractMoneyThree67 / (1 + decimal.Parse(queryTax)) + "')");
}
//合同金额1
decimal ContractMoneyFour44 = decimal.Parse(args.ArgsHash[this.ContractMoneyFour44.ClientID].ToString());
//合同金额1_税率
long ContractMoneyFourTax122 = long.Parse(args.ArgsHash[this.ContractMoneyFourTax122.ClientID].ToString());
if (ContractMoneyFourTax122 > 0) {
// 税率
string queryTax = QueryTax(ContractMoneyFourTax122);
args.ArgsResult.Add(new UFWebClientNumberAdapter(this.ProjectIncomeFour42).ClientInstance +
".set_Value('" + ContractMoneyFour44 / (1 + decimal.Parse(queryTax)) + "')");
}
return args;
}
private void CallBack_UomTab_小计() {
IUFFldNumberControl[] sourceControls = new IUFFldNumberControl[] {
PartsCostOutsource65, // 硬件成本外购(含税)
PartsCostOwnProduction53, // 硬件成本自产(含税)
PartsCostOutsourceNo55, // 硬件成本外购(不含税)
PartsCostOwnProductionNo85, // 硬件成本自产(不含税)
InstallMaterialCost76, // 安装材料成本(含税)
InstallMaterialCostNo37, // 安装材料成本(不含税)
InstallArtificialCost100, // 安装人工(含税)
InstallArtificialCostNo76, // 安装人工(不含税)
ArtificialCostSO121, // 人工成本-销售
ArtificialCostMO46, //人工成本-生产
ArtificialCostAssembly20, //人工成本-装配
ArtificialCostProject44, //人工成本-工程
ArtificialCostDesign127, //人工成本-设计
ArtificialCostPurchase44, //人工成本-采购
ArtificialCostOperations46, //人工成本-运营
ArtificialCostOther91, //人工成本-其他
TravelCostSO29, // 差旅费-销售
TravelCostProject43, //差旅费-工程
TravelCostDesign56, //差旅费-设计
TravelCostPurchase47, //差旅费-采购
TravelCostOperations34, //差旅费-运营
CostOther70, //差旅费-其他
InstallCostSubtotal351, //安装成本小计(含税)
PartsCostSubtotal43, //硬件成本-小计(含税)
InstallCostSubtotalNo38, //安装成本小计(不含税)
PartsCostSubtotalNo55, //硬件成本-小计(不含税)
};
ClientCallBackFrm cF = new ClientCallBackFrm();
cF.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(CallBack_UomTab_小计);
// 注册控件 & 创建 AssociationControl
foreach (IUFFldNumberControl ctrl in sourceControls) {
cF.ParameterControls.Add(ctrl);
AssociationControl assoc = new AssociationControl {
SourceServerControl = ctrl,
SourceControl = { EventName = "OnValueChanged" }
};
cF.Add(assoc);
}
}
/// <summary>
/// 计算小计
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
object CallBack_UomTab_小计(CustomerActionEventArgs args) {
// ========== 硬件成本-小计 ==========
decimal outsourceTax = GetDecimalFromArgs(args, this.PartsCostOutsource65);
decimal ownProductionTax = GetDecimalFromArgs(args, this.PartsCostOwnProduction53);
SetClientValue(args, this.PartsCostSubtotal43, outsourceTax + ownProductionTax);
decimal outsourceNoTax = GetDecimalFromArgs(args, this.PartsCostOutsourceNo55);
decimal ownProductionNoTax = GetDecimalFromArgs(args, this.PartsCostOwnProductionNo85);
SetClientValue(args, this.PartsCostSubtotalNo55, outsourceNoTax + ownProductionNoTax);
// ========== 安装成本-小计 ==========
decimal materialTax = GetDecimalFromArgs(args, this.InstallMaterialCost76);
decimal laborTax = GetDecimalFromArgs(args, this.InstallArtificialCost100);
SetClientValue(args, this.InstallCostSubtotal351, materialTax + laborTax);
decimal materialNoTax = GetDecimalFromArgs(args, this.InstallMaterialCostNo37);
decimal laborNoTax = GetDecimalFromArgs(args, this.InstallArtificialCostNo76);
SetClientValue(args, this.InstallCostSubtotalNo38, materialNoTax + laborNoTax);
// ========== 人工成本-小计 ==========
var artificialControls = new[] {
this.ArtificialCostSO121,
this.ArtificialCostMO46,
this.ArtificialCostAssembly20,
this.ArtificialCostProject44,
this.ArtificialCostDesign127,
this.ArtificialCostPurchase44,
this.ArtificialCostOperations46,
this.ArtificialCostOther91
};
decimal totalArtificial = artificialControls.Sum(ctrl => GetDecimalFromArgs(args, ctrl));
SetClientValue(args, this.ArtificialCostSubtotal49, totalArtificial);
// ========== 费用-小计 ==========
var costSubtotalControls = new[] {
TravelCostSO29, // 差旅费-销售
TravelCostProject43, //差旅费-工程
TravelCostDesign56, //差旅费-设计
TravelCostPurchase47, //差旅费-采购
TravelCostOperations34, //差旅费-运营
CostOther70, //差旅费-其他
};
decimal costSubtotal = costSubtotalControls.Sum(ctrl => GetDecimalFromArgs(args, ctrl));
SetClientValue(args, this.CostSubtotal58, costSubtotal);
// ========== 材料成本-小计(含税) ==========
decimal partsCostOutsource = GetDecimalFromArgs(args, this.PartsCostOutsource65);
decimal partsCostOwnProduction53 = GetDecimalFromArgs(args, this.PartsCostOwnProduction53);
SetClientValue(args, this.MaterialCostSubtotal257, partsCostOutsource + partsCostOwnProduction53);
// ========== 材料成本-小计(不含税) ==========
decimal installCostSubtotalNo = GetDecimalFromArgs(args, this.InstallCostSubtotalNo38);
decimal partsCostSubtotalNo55 = GetDecimalFromArgs(args, this.PartsCostSubtotalNo55);
SetClientValue(args, this.MaterialCostSubtotalNo37, installCostSubtotalNo + partsCostSubtotalNo55);
return args;
}
private void CallBack_UomTab_合同额And占比() {
// 所有控件集合,按顺序对应每个 AssociationControl
IUFFldNumberControl[] sourceControls = new IUFFldNumberControl[] {
ArtificialCostSubtotal49, // 人工成本-小计
ContractTotalMoney32, // 合同总金额(文档上:原合同金额)
ProjectTotalIncome58, // 项目总收入
CostSubtotal58, // 费用小计
InstallCostSubtotal351, // 安装成本-小计(含税)
MaterialCostSubtotalNo37, // 材料成本-小计(不含税)
};
ClientCallBackFrm cF = new ClientCallBackFrm();
cF.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(CallBack_UomTab_合同额And占比);
foreach (var ctrl in sourceControls) {
// 注册控件到参数
cF.ParameterControls.Add(ctrl);
// 创建并配置关联控制器
var assoc = new AssociationControl {
SourceServerControl = ctrl,
SourceControl = { EventName = "OnValueChanged" }
};
cF.Add(assoc);
}
}
/// <summary>
/// 计算合同额和占比
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
object CallBack_UomTab_合同额And占比(CustomerActionEventArgs args) {
// 人工成本-小计
decimal artificialCostSubtotal = GetDecimalFromArgs(args, this.ArtificialCostSubtotal49);
// 费用小计
decimal costSubtotal = GetDecimalFromArgs(args, this.CostSubtotal58);
// 安装成本-小计(含税)
decimal installCostSubtotal = GetDecimalFromArgs(args, this.InstallCostSubtotal351);
// 材料成本-小计(不含税)
decimal materialCostSubtotalNo = GetDecimalFromArgs(args, this.MaterialCostSubtotalNo37);
// 原合同金额
decimal contractTotalMoney = GetDecimalFromArgs(args, this.ContractTotalMoney32);
// 项目总收入
decimal projectTotalIncome = GetDecimalFromArgs(args, this.ProjectTotalIncome58);
if (contractTotalMoney > 0) {
// ========== 人工成本合同额 =人工成本-小计/原合同金额 ==========
SetClientValue(args, this.ArtificialCostContractAmount73, artificialCostSubtotal / contractTotalMoney);
// ========== 人工成本/合同额 =费用小计/原合同金额 ==========
SetClientValue(args, this.CostContractAmount43, costSubtotal / contractTotalMoney);
// ========== 含税材料成本占比 = 材料成本-小计(含税)/原合同金额 ==========
SetClientValue(args, this.MaterialCostProportion43, installCostSubtotal / contractTotalMoney);
}
if (projectTotalIncome > 0) {
// ========== 人工成本占比 =人工成本-小计/项目总收入 ==========
SetClientValue(args, this.ArtificialProportion70, artificialCostSubtotal / projectTotalIncome);
// ========== 费用-占比 =费用小计/原合同金额 ==========
SetClientValue(args, this.CostProportion83, costSubtotal / projectTotalIncome);
// ========== 不含税材料成本占比 = 材料成本-小计(不含税)/项目总收入 ==========
SetClientValue(args, this.MaterialCostProportionNo98, materialCostSubtotalNo / projectTotalIncome);
}
return args;
}
private void CallBack_UomTab_费用And毛利() {
// 所有控件集合,按顺序对应每个 AssociationControl
IUFFldNumberControl[] sourceControls = new IUFFldNumberControl[] {
ArtificialCostSO121, // 人工成本-销售
TravelCostSO29, //差旅费-销售
ArtificialCostPurchase44, // 人工成本-采购
ArtificialCostOperations46, //人工成本-运营
ArtificialCostOther91, // 人工成本-其他
TravelCostOperations34, // 差旅费-运营
CostOther70, //费用其他
ContractTotalMoney32, // 原合同金额
ProjectTotalCost61, //项目总成本含税
ProjectTotalCostNo43, //项目总成本(不含税)
GrossProfitNo88, //毛利(不含税)
ProjectTotalIncome58, //项目总收入
};
ClientCallBackFrm cF = new ClientCallBackFrm();
cF.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(CallBack_UomTab_费用And毛利);
foreach (var ctrl in sourceControls) {
// 注册控件到参数
cF.ParameterControls.Add(ctrl);
// 创建并配置关联控制器
var assoc = new AssociationControl {
SourceServerControl = ctrl,
SourceControl = { EventName = "OnValueChanged" }
};
cF.Add(assoc);
}
}
/// <summary>
/// 计算费用
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
object CallBack_UomTab_费用And毛利(CustomerActionEventArgs args) {
// 人工成本-销售
decimal artificialCostSo = GetDecimalFromArgs(args, this.ArtificialCostSO121);
//差旅费-销售
decimal travelCostSo = GetDecimalFromArgs(args, this.TravelCostSO29);
// 人工成本-采购
decimal artificialCostPurchase = GetDecimalFromArgs(args, this.ArtificialCostPurchase44);
//人工成本-运营
decimal artificialCostOperations = GetDecimalFromArgs(args, this.ArtificialCostOperations46);
// 人工成本-其他
decimal artificialCostOther = GetDecimalFromArgs(args, this.ArtificialCostOther91);
// 差旅费-运营
decimal travelCostOperations = GetDecimalFromArgs(args, this.TravelCostOperations34);
//费用其他
decimal costOther = GetDecimalFromArgs(args, this.CostOther70);
decimal ContractTotalMoney = GetDecimalFromArgs(args, this.ContractTotalMoney32);
decimal ProjectTotalCost = GetDecimalFromArgs(args, this.ProjectTotalCost61);
decimal ProjectTotalCostNo = GetDecimalFromArgs(args, this.ProjectTotalCostNo43);
decimal GrossProfitNo = GetDecimalFromArgs(args, this.GrossProfitNo88);
decimal ProjectTotalIncome = GetDecimalFromArgs(args, this.ProjectTotalIncome58);
// ========== 销售费用 =人工成本-销售+差旅费-销售 ==========
SetClientValue(args, this.SOCost148, artificialCostSo + travelCostSo);
// ========== 管理费用 =人工成本-采购+人工成本-运营+人工成本-其他+差旅费-采购+差旅费-运营+费用-其它 ==========
SetClientValue(args, this.ManageCost44,
artificialCostPurchase + artificialCostOperations + artificialCostOther + travelCostOperations +
costOther);
// ========== 毛利(含税) =原合同金额-项目总成本(含税) ==========
SetClientValue(args, this.GrossProfit47, ContractTotalMoney - ProjectTotalCost);
// ========== 毛利(不含税) =项目总收入-项目总成本(不含税) ==========
SetClientValue(args, this.GrossProfitNo88, ProjectTotalIncome - ProjectTotalCostNo);
// ========== 毛利率(不含税) =毛利(不含税)/项目总收入 ==========
SetClientValue(args, this.GrossProfitTaxNo43, GrossProfitNo - ProjectTotalIncome);
return args;
}
private void CallBack_UomTab_总收入And总成本() {
// 所有控件集合,按顺序对应每个 AssociationControl
IUFFldNumberControl[] sourceControls = new IUFFldNumberControl[] {
ProjectIncomeOne7, //收入1
ProjectIncomeTwo19, //收入2
ProjectIncomeThree59, //收入3
ProjectIncomeFour42, //收入4
MaterialCostSubtotal257, //材料成本-小计(含税)
ArtificialCostProject44, //人工成本-工程
ArtificialCostDesign127, //人工成本-设计
TravelCostProject43, //差旅费-工程
TravelCostDesign56, //差旅费-设计
ArtificialCostMO46, //人工成本-生产
ArtificialCostAssembly20, //人工成本-装配
FreightPackagFee34, //运费/包装费(含税)
MaterialCostSubtotalNo37, //材料成本-小计(不含税)
FreightPackagFeeNo112, //运费/包装费(不含税)
};
ClientCallBackFrm cF = new ClientCallBackFrm();
cF.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(CallBack_UomTab_总收入And总成本);
foreach (var ctrl in sourceControls) {
// 注册控件到参数
cF.ParameterControls.Add(ctrl);
// 创建并配置关联控制器
var assoc = new AssociationControl {
SourceServerControl = ctrl,
SourceControl = { EventName = "OnValueChanged" }
};
cF.Add(assoc);
}
}
/// <summary>
/// 计算总收入和总成本
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
object CallBack_UomTab_总收入And总成本(CustomerActionEventArgs args) {
// 收入1
decimal projectIncomeOne = GetDecimalFromArgs(args, this.ProjectIncomeOne7);
//收入2
decimal projectIncomeTwo = GetDecimalFromArgs(args, this.ProjectIncomeTwo19);
// 收入3
decimal projectIncomeThree = GetDecimalFromArgs(args, this.ProjectIncomeThree59);
// 收入4
decimal projectIncomeFour = GetDecimalFromArgs(args, this.ProjectIncomeFour42);
decimal MaterialCostSubtotal = GetDecimalFromArgs(args, this.MaterialCostSubtotal257);
decimal ArtificialCostProject = GetDecimalFromArgs(args, this.ArtificialCostProject44);
decimal ArtificialCostDesign = GetDecimalFromArgs(args, this.ArtificialCostDesign127);
decimal TravelCostProject = GetDecimalFromArgs(args, this.TravelCostProject43);
decimal TravelCostDesign = GetDecimalFromArgs(args, this.TravelCostDesign56);
decimal ArtificialCostMO = GetDecimalFromArgs(args, this.ArtificialCostMO46);
decimal ArtificialCostAssembly = GetDecimalFromArgs(args, this.ArtificialCostAssembly20);
decimal FreightPackagFee = GetDecimalFromArgs(args, this.FreightPackagFee34);
decimal MaterialCostSubtotalNo = GetDecimalFromArgs(args, this.MaterialCostSubtotalNo37);
decimal FreightPackagFeeNo = GetDecimalFromArgs(args, this.FreightPackagFeeNo112);
// ========== 项目总收入 =项目收入1+项目收入2+项目收入3+项目收入4 ==========
SetClientValue(args, this.ProjectTotalIncome58,
projectIncomeOne + projectIncomeTwo + projectIncomeThree + projectIncomeFour);
// ========== 项目总成本(含税) =材料成本-小计(含税)+人工成本-工程+人工成本-设计+差旅费-工程+差旅费-设计+人工成本-生产+人工成本-装配+运费/包装费(含税) ==========
SetClientValue(args, this.ProjectTotalCost61,
MaterialCostSubtotal + ArtificialCostProject + ArtificialCostDesign + TravelCostProject +
TravelCostDesign + ArtificialCostMO + ArtificialCostAssembly + FreightPackagFee);
// ========== 项目总成本(不含税) =材料成本-小计(不含税)+人工成本-工程+人工成本-设计+差旅费-工程+差旅费-设计+人工成本-生产+人工成本-装配+运费/包装费(不含税) ==========
SetClientValue(args, this.ProjectTotalCostNo43,
MaterialCostSubtotalNo + ArtificialCostProject + ArtificialCostDesign + TravelCostProject +
TravelCostDesign + ArtificialCostMO + ArtificialCostAssembly + FreightPackagFeeNo);
return args;
}
/// <summary>
/// 查询税率
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public string QueryTax(long id) {
string sql =
$"SELECT CBO_Tax.TaxRate FROM CBO_TaxScheduleTax LEFT JOIN CBO_TaxSchedule ON CBO_TaxScheduleTax.TaxSchedule = CBO_TaxSchedule.ID LEFT JOIN CBO_Tax ON CBO_TaxScheduleTax.Tax = CBO_Tax.ID WHERE CBO_TaxSchedule.ID = {id}";
DataSet ds;
DataAccessor.RunSQL(DatabaseManager.GetCurrentConnection(), sql, null, out ds);
return ds.Tables[0].Rows[0]["TaxRate"].ToString();
}
/// <summary>
/// 根据含税金额和税率控件,计算不含税金额,并设置到对应控件中
/// </summary>
/// <param name="args">回调参数对象,包含所有控件提交的数据</param>
/// <param name="taxIncludedControls">含税金额控件</param>
/// <param name="taxRateControl">税率ID控件</param>
/// <param name="taxIncludedNoControl">要设置值的目标控件(不含税金额)</param>
private void ComputeNoTaxValue(
CustomerActionEventArgs args,
IUFFldNumberControl taxIncludedControls,
IUFFldReference taxRateControl,
IUFFldNumberControl taxIncludedNoControl) {
// 页面上的含税值
string taxIncludedKey = taxIncludedControls.ClientID;
// 页面上的税率值
string taxRateKey = taxRateControl.ClientID;
//含税金额
decimal taxIncludedMoney = decimal.Parse(args.ArgsHash[taxIncludedKey].ToString());
//税组合ID
long taxId = long.Parse(args.ArgsHash[taxRateKey].ToString());
if (taxId > 0) {
string queryTax = QueryTax(taxId); // 返回 0.13 等
decimal taxRate = decimal.Parse(queryTax);
decimal noTaxIncludedMoney = taxIncludedMoney / (1 + taxRate);
SetClientValue(args, taxIncludedNoControl, noTaxIncludedMoney);
}
}
/// <summary>
/// 从 args.ArgsHash 中获取指定控件的 decimal 值
/// </summary>
private decimal GetDecimalFromArgs(CustomerActionEventArgs args, IUFFldNumberControl ctrl) {
var key = ctrl.ClientID;
return args.ArgsHash.ContainsKey(key) && decimal.TryParse(args.ArgsHash[key]?.ToString(), out var val)
? val: 0m;
}
/// <summary>
/// 生成设置客户端控件值的 JS 脚本
/// </summary>
private void SetClientValue(CustomerActionEventArgs args, IUFControl target, decimal value) {
args.ArgsResult.Add(new UFWebClientNumberAdapter(target).ClientInstance + $".set_Value('{value}')");
}
评论 (0)