Hello Gang,
I have some customization on Acumatica Cost Projection screen that reuirs adding a subtotal for each “Project Task” under the related records. I have done the coding but my code instead of each task subtotal, repeats all records total. Also subtotals are added to end of my result as I can not sort them correctly before returning the result. Below is my code. Can someone advise how I can I
- show the correct subtotals by filtering each task related records
- sort the return result set?
public IEnumerable details()
{
var selectDetails = new PXSelect<PMCostProjectionLine,
Where<PMCostProjectionLine.projectID, Equal<Current<PMCostProjection.projectID>>,
And<PMCostProjectionLine.revisionID, Equal<Current<PMCostProjection.revisionID>>,
And<Where<Current<UDCTPMCostProjectionFilter.taskID>, IsNull, Or<Current<UDCTPMCostProjectionFilter.taskID>, Equal<PMCostProjectionLine.taskID>>>>>>,
OrderBy<Asc<PMCostProjectionLine.projectID,
Asc<PMCostProjectionLine.taskID,
Asc<PMCostProjectionLine_Extension.sortOrder,
Asc<PMCostProjectionLine.costCodeID,
Asc<PMCostProjectionLine.accountGroupID,
Asc<PMCostProjectionLine.inventoryID>>>>>>>>(Base);
PXDelegateResult delegateResult = new PXDelegateResult();
delegateResult.Capacity = 202;
delegateResult.IsResultFiltered = false;
delegateResult.IsResultSorted = true;
delegateResult.IsResultTruncated = false;
var view = new PXView(Base, false, selectDetails.View.BqlSelect);
var startRow = PXView.StartRow;
int totalRows = 0;
var resultSet = view.Select(PXView.Currents, PXView.Parameters, PXView.Searches, PXView.SortColumns, PXView.Descendings, PXView.Filters, ref startRow, PXView.MaximumRows, ref totalRows);
PXView.StartRow = 0;
delegateResult.AddRange(resultSet.RowCast<PMCostProjectionLine>());
foreach (PMTask task in PXSelect<PMTask, Where<PMTask.projectID, Equal<Required<PMTask.projectID>>>, OrderBy<Asc<PMTask.taskCD>>>.Select(Base, Base.Document.Current.ProjectID))
{
// I want to filter the "view" here by "Base.Document.Current.ProjectID", "Base.Document.Current.RevisionID", "task.TaskID". How can I do that?
view.WhereAnd<Where<PMCostProjectionLine.projectID, Equal<Current<PMCostProjectionLine.projectID>>,
And<PMCostProjectionLine.revisionID, Equal<Current<PMCostProjectionLine.revisionID>>,
And<PMCostProjectionLine.taskID, Equal<Current<PMCostProjectionLine.taskID>>>>>>();
List<PMCostProjectionLine> viewResult = new List<PMCostProjectionLine>(selectDetails.Select().RowCast<PMCostProjectionLine>());
PMCostProjectionLine viewTotal = viewResult.CalculateSumTotal(selectDetails.Cache);
PMCostProjectionLine_Extension viewTotalExt = viewTotal.GetExtension<PMCostProjectionLine_Extension>();
viewTotal.ProjectID = Base.Document.Current.ProjectID;
viewTotal.RevisionID = Base.Document.Current.RevisionID;
viewTotal.LineNbr = null;
viewTotal.TaskID = task.TaskID;
viewTotal.CostCodeID = null;
viewTotal.AccountGroupID = null;
viewTotal.InventoryID = null;
viewTotal.Description = "Subtotal - " + task.Description;
viewTotal.UOM = null;
viewTotal.Mode = null;
viewTotalExt.SortOrder = 1;
delegateResult.Add(viewTotal);
}
// I want to sort the result by ProjectID, TaskID and SortOrder before returning the delegate result. How can I do that?
return delegateResult;
//return delegateResult
//.OrderBy<Asc<PMCostProjectionLine.projectID,
// Asc<PMCostProjectionLine.taskID,
// Asc<PMCostProjectionLine_Extension.sortOrder>>>>;
}