I have a few user defined fields in sales order line which I need to copy when the 'Create Purchase Order' action is clicked in the sales order screen. How can I override the action in order to copy these values?

I have tried this override action based on the source code but there is no copying of values.
using PX.Objects;
using PX.Objects.SO;
namespace PX.Objects.SO
{
public class SOOrderEntry_Extension : PXGraphExtension<PX.Objects.SO.SOOrderEntry>
{
#region Event Handlers
[PXOverride]
public virtual IEnumerable CreatePurchaseOrder(PXAdapter adapter, Func<PXAdapter, IEnumerable> baseMethod)
{
// Call the base method to create the purchase order
IEnumerable result = baseMethod(adapter);
// Retrieve the created purchase orders
POOrderEntry poGraph = PXGraph.CreateInstance<POOrderEntry>();
foreach (var poOrder in poGraph.Document.Cache.Cached)
{
var poOrderRow = (POOrder)poOrder;
// Retrieve the related purchase order lines
var poLines = PXSelect<POLine,
Where<POLine.orderType, Equal<Required<POOrder.orderType>>,
And<POLine.orderNbr, Equal<Required<POOrder.orderNbr>>>>>
.Select(Base, poOrderRow.OrderType, poOrderRow.OrderNbr);
foreach (POLine poLine in poLines)
{
// Retrieve the corresponding sales order line using SOLineNbr and SOOrderNbr
SOLine soLine = PXSelect<SOLine,
Where<SOLine.orderType, Equal<Required<POLine.sOOrderType>>,
And<SOLine.orderNbr, Equal<Required<POLine.sOOrderNbr>>,
And<SOLine.lineNbr, Equal<Required<POLine.sOLineNbr>>>>>>
.Select(Base, poLine.SOOrderType, poLine.SOOrderNbr, poLine.SOLineNbr);
if (soLine != null)
{
// Copy user-defined fields from the sales order line to the purchase order line
var soLineExt = PXCache<SOLine>.GetExtension<SOLineExt>(soLine);
var poLineExt = PXCache<POLine>.GetExtension<POLineExt>(poLine);
poLineExt.UsrPackageType = soLineExt.UsrCustomPackageType;
poLineExt.UsrPackageQty = soLineExt.UsrPackageQty;
poLineExt.UsrDeliveryNotes = soLineExt.UsrDeliveryNotes;
// Update the purchase order line
poGraph.Transactions.Update(poLine);
}
}
}
// Save changes to the purchase order
poGraph.Actions.PressSave();
return result;
}
#endregion
}
}