I am trying to add the customer order number on the add payments smart panel. I read that this can be done by using delegates, but I am struggling to get this to work.
I added the dac:
using PX.Data;
using PX.Objects.CA;
using PX.Objects.SO;
namespace PX.Objects.CA
{
public class PaymentInfoExt : PXCacheExtension<PaymentInfo>
{
#region UsrCustomerOrderNbr
[PXString(40)]
[PXUIField(DisplayName = "Customer Order Nbr", Enabled = false)]
public virtual string UsrCustomerOrderNbr { get; set; }
public abstract class usrCustomerOrderNbr : PX.Data.BQL.BqlString.Field<usrCustomerOrderNbr> { }
#endregion
}
}


using PX.Data;
using PX.Objects.AR;
using PX.Objects.CA;
using PX.Objects.SO;
using System.Collections;
namespace PX.Objects.CA
{
public class CATranEntryExt : PXGraphExtension<CATranEntry>
{
[PXOverride]
public virtual IEnumerable payments(Func<IEnumerable> baseMethod)
{
foreach (PXResult<PaymentInfo, ARPayment, ARInvoice, SOOrder> result in
PXSelectJoin<PaymentInfo,
LeftJoin<ARPayment,
On<ARPayment.docType, Equal<PaymentInfo.origDocType>,
And<ARPayment.refNbr, Equal<PaymentInfo.origRefNbr>>>>,
LeftJoin<ARInvoice,
On<ARInvoice.docType, Equal<ARPayment.docType>,
And<ARInvoice.refNbr, Equal<ARPayment.refNbr>>>>,
LeftJoin<SOOrder,
On<SOOrder.orderType, Equal<ARInvoice.soOrderType>,
And<SOOrder.orderNbr, Equal<ARInvoice.soOrderNbr>>>>>>
.Select(Base))
{
PaymentInfo payment = result;
SOOrder order = result;
var ext = PXCache<PaymentInfo>.GetExtension<PaymentInfoExt>(payment);
ext.UsrCustomerOrderNbr = order?.CustomerOrderNbr;
yield return payment;
}
}
}
}
Am I approaching this the correct way?

