【问题标题】:Overriding Shipping address passed to Avalara覆盖传递给 Avalara 的送货地址
【发布时间】:2020-03-05 00:57:34
【问题描述】:

我们需要将送货地址以外的地址传递给外部税收计算方法来计算税收。 我将地址存储在一个简单的自定义表中,并在销售订单中选择它,并将其复制到销售发票中以计算税款。

GetAddress 被覆盖以将自定义地址传递给 Avalar,这在 Acumatica 2018 中运行良好,但在 Acumatica 2019 中却无法正常运行。

在 2019 年,我曾尝试在

上覆盖 GetAddress 函数
public class SOOrderEntryExternalTax_Extension : PXGraphExtension<SOOrderEntryExternalTax, SOOrderEntry>
{
    #region Event Handlers
    [PXOverride]
    public IAddressBase GetToAddress(SOOrder order, Func<SOOrder, IAddressBase> methodBase)
    {
        var shipAddress = methodBase(order);
        if (shipAddress != null)
        {
            CYBProjectDataNameSpace.CYB_PROJECTS CYBProject = PXSelectorAttribute.Select<SOOrderExt.usrProjectId>(Base.Document.Cache, order) as CYBProjectDataNameSpace.CYB_PROJECTS;
            //shipAddress.AddressLine1 = CYBProject.Cyb_address;
            shipAddress.AddressLine2 = "";
            shipAddress.AddressLine3 = "";
            shipAddress.City = CYBProject.Cyb_pcity;
            shipAddress.State = CYBProject.Cyb_pstate;
            shipAddress.PostalCode = CYBProject.Cyb_pzcode;
            shipAddress.CountryID = CYBProject.Cyb_pcountry;
        }

        return shipAddress;
    }

    #endregion
}

在 AR 发票中

[PXOverride]
    public IAddressBase GetToAddress(ARInvoice invoice, Func<ARInvoice, IAddressBase> methodBase)
    {
        var shipAddress = methodBase(invoice);
        if (shipAddress != null)
        {
            CYBProjectDataNameSpace.CYB_PROJECTS CYBProject = PXSelectorAttribute.Select<ARRegisterExt.usrProjectId>(Base.Document.Cache, invoice) as CYBProjectDataNameSpace.CYB_PROJECTS;
            if (CYBProject != null)
            {
                //shipAddress.AddressLine1 = CYBProject.Cyb_address;
                shipAddress.AddressLine2 = "";
                shipAddress.AddressLine3 = "";
                shipAddress.City = CYBProject.Cyb_pcity;
                shipAddress.State = CYBProject.Cyb_pstate;
                shipAddress.PostalCode = CYBProject.Cyb_pzcode;
                shipAddress.CountryID = CYBProject.Cyb_pcountry;
            }
        }

        return shipAddress;
    }





    #endregion
}

自定义代码不起作用。

如何解决这个问题?

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    外部税收的逻辑在 ExternalTax 图形扩展中定义。每个模块的派生类都使用图形扩展,例如 AR 的 ARInvoiceEntryExternalTax。要覆盖与税收相关的方法,您需要创建一个二阶图表扩展,测试示例如下所示。请注意,您的问题中未显示其他 GetToAddress(...) 方法,这些方法需要文档详细信息 DAC 作为参数。

     public class ARInvoiceEntryExtension : PXGraphExtension<ARInvoiceEntryExternalTax, ARInvoiceEntry>
        {
            [PXOverride]
            public virtual IAddressBase GetToAddress(ARInvoice invoice, Func<ARInvoice, IAddressBase> del)
            {
                return del(invoice);
            }
    
            [PXOverride]
            public virtual IAddressBase GetAddress(ARInvoice invoice, ARTran tran, Func<ARInvoice, ARTran, IAddressBase> del)
            {
                return del(invoice, tran);
            }
        }
    
        public class SOOrderEntryExtension : PXGraphExtension<SOOrderEntryExternalTax, SOOrderEntry>
        {
            [PXOverride]
            public virtual IAddressBase GetToAddress(SOOrder order, Func<SOOrder, IAddressBase> del)
            {
                return del(order);
            }
    
            [PXOverride]
            public virtual IAddressBase GetToAddress(SOOrder order, SOLine line, Func<SOOrder, SOLine, IAddressBase> del)
            {
                return del(order, line);
            }
        }
    

    【讨论】:

    • 是的,我已经覆盖了扩展图中的方法。仍然面临同样的问题
    • 2019 什么版本?并且您是否在每个图形扩展中都覆盖了这两种方法?
    • 尝试 2019 R2
    • 我需要更多详细信息,例如“版本 19.070.0011”,您是否重写了使用 DAC 作为参数的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2017-06-07
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多