0
votes

I wanting to override the details delegate method on PX.Objects.AR.ARStatementPrint graph.

HEre is the method

protected virtual IEnumerable details()
{
    ARSetup setup = ARSetup.Current;

    PrintParameters header = Filter.Current;
    List<DetailsResult> result = new List<DetailsResult>();
    if (header == null)
        yield break;

    GL.Company company = PXSelect<GL.Company>.Select(this);
    foreach (PXResult<ARStatement, Customer> it in PXSelectJoin<ARStatement,
            InnerJoin<Customer, On<Customer.bAccountID, Equal<ARStatement.statementCustomerID>>>,
            Where<ARStatement.statementDate, Equal<Required<ARStatement.statementDate>>,
                And<ARStatement.statementCycleId, Equal<Required<ARStatement.statementCycleId>>>>,
            OrderBy<Asc<ARStatement.statementCustomerID, Asc<ARStatement.curyID>>>>
            .Select(this, header.StatementDate, header.StatementCycleId))
    {
        DetailsResult res = new DetailsResult();
        ARStatement st = it;
        Customer cust = it;
        res.Copy(st, cust);

        if (setup?.ConsolidatedStatement != true && st.BranchID != header.BranchID)
                continue;

        if (Filter.Current.Action == 0 &&
            header.ShowAll != true &&
            (st.DontPrint == true || st.Printed == true))
                continue;

        if ((Filter.Current.Action == 1 || Filter.Current.Action == 2) &&
            header.ShowAll != true &&
            (st.DontEmail == true || st.Emailed == true))
                continue;

        if (cust.PrintCuryStatements == true)
        {
            if (Filter.Current.CuryStatements != true)
                continue;

            DetailsResult last = result.Count > 0 ? result[result.Count - 1] : null;
            if (last?.CustomerID == res.CustomerID && last?.CuryID == res.CuryID)
            {
                last.Append(res);
            }
            else
            {
                result.Add(res);
            }
        }
        else
        {
            if (Filter.Current.CuryStatements == true)
                continue;

            res.ResetToBaseCury(company.BaseCuryID);

            DetailsResult last = result.Count > 0 ? result[result.Count - 1] : null;
            if (last?.CustomerID == res.CustomerID)
            {
                last.Append(res);
            }
            else
            {
                result.Add(res);
            }
        }
    }

    foreach (var item in result)
    {
        var located = Details.Cache.Locate(item);
        if (located != null)
        {
            yield return located;
        }
        else
        {
            Details.Cache.SetStatus(item, PXEntryStatus.Held);
            yield return item;
        }
    }

    Details.Cache.IsDirty = false;
}

Im specifically wanting to the change the foreach select statement so it is ordered by another field.

foreach (PXResult<ARStatement, Customer> it in PXSelectJoin<ARStatement,
        InnerJoin<Customer, On<Customer.bAccountID, Equal<ARStatement.statementCustomerID>>>,
        Where<ARStatement.statementDate, Equal<Required<ARStatement.statementDate>>,
            And<ARStatement.statementCycleId, Equal<Required<ARStatement.statementCycleId>>>>,
        OrderBy<Asc<ARStatement.statementCustomerID, Asc<ARStatement.curyID>>>>
        .Select(this, header.StatementDate, header.StatementCycleId))
{

Ive tried
[PXOverride]

protected virtual IEnumerable details()
{

But no luck, is it possible to override this method?

1
Are you getting any errors when you try this? or just doesn't wire up as an override? - Brendan

1 Answers

2
votes

I think for overrides like this you need to make your override method public even if the base graph method is protected. Try the following...

[PXOverride]
public virtual IEnumerable details()
{
   //override code here...
}