U9页面字段联动代码
标签搜索
侧边栏壁纸
  • 累计撰写 16 篇文章
  • 累计收到 0 条评论
U9

U9页面字段联动代码

心底有颗枇杷树
2025-07-03 / 0 评论 / 1 阅读 / 正在检测是否收录...

U9页面字段联动代码

注意事项

  • 所有的代码都需要写在WebPart目录中*.Extend.cs
  1. 注册CallBack方法
 public void AfterOnLoad() {
    CallBack_UomTab_硬件成本不含税();
    CallBack_UomTab_小计();
    CallBack_UomTab_合同额And占比();
    CallBack_UomTab_费用And毛利();
    CallBack_UomTab_总收入And总成本();
    CallBack_UomTab_合同计算();
}
  1. 实现注册方法
// 
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

评论 (0)

取消