Основной адрес доставки передан Avalara - PullRequest
1 голос
/ 03 марта 2020

У нас есть требование передать другой адрес, кроме адреса доставки, для расчета внешнего налога для расчета налога. Я сохраняю адрес в простой пользовательской таблице, и он выбирается в заказе клиента, и он копируется в счет-фактуру для расчета налога.

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
}

В ARInvoice

[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
}

Код настройки не работает.

Как решить проблему?

1 Ответ

1 голос
/ 04 марта 2020

Logi c для внешнего налога определяется в расширении графа ExternalTax. Расширение графа используется производными классами для каждого модуля, такими как ARInvoiceEntryExternalTax для AR. Чтобы переопределить методы, относящиеся к налогам, вам нужно создать расширение Графа 2-го порядка, проверенные образцы которого показаны ниже. Имейте в виду, что в вашем вопросе не показаны дополнительные методы GetToAddress(...), для которых в качестве параметра необходимо указать данные документа DA C.

 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);
        }
    }
...