We are testing our new AI Assistant and ran your scenario through it, I hope this helps:
You’re on the right track — Acumatica does not surface all of this info in one place by default, but the data you want does exist in the system and can be accessed via a customization project, or built into a Financial Summary tab or custom dashboard on the Project screen (PM301000).
Let’s walk through where to find each data point so you can bring them to the top of the project form (or a tab), either via a custom DAC extension, a view delegate, or a project-based GI.
✅ Summary: Data Source Mapping for Each Metric
🔹 A. Current Totals
| Metric | Source Table/View | Field or Calculation |
| Actual Subcontract Amount | PMTran, POOrder/POLine | Sum of AP bills/receipts linked to Subcontract PO |
| Unreleased Retainage | APRegister, APTran | Sum of RetainageAmt where Released = False |
| Open Amount Due | PMProjectStatusEx | RevisedBudgetAmount - ActualAmount |
🔹 B. Pending AR (Customer Invoices)
| Metric | Source Table/View | Field or Calculation |
| Pending Invoice Amount | ARInvoice, ARTran | Where DocType = 'PM' and Released = False |
| Pending Retainage | ARRetainage, ARInvoice | Where IsRetainageDoc = True and Released = False |
| Pending Amount Due | Sum of above | Sum of unreleased + unreleased retainage |
🔹 C. Pending AP (Vendor Bills, Subcontracts)
| Metric | Source Table/View | Field or Calculation |
| Pending AP | APInvoice, APTran | Where Released = False and linked to project |
| Pending Subcontracts | POOrder, POLine (type = Subcontract) | Where OrderStatus = Open and Released = False |
🛠️ How to Implement in a Customization Project
1. Create a Custom DAC Extension for PMProject
- Extend PMProject DAC.
- Add unbound fields like:
[PXDecimal()]
[PXUIField(DisplayName = "Pending AP")]
public virtual decimal? UsrPendingAP { get; set; }
public abstract class usrPendingAP : PX.Data.BQL.BqlDecimal.Field<usrPendingAP> { }
2. Use a View Delegate or Field-Selecting Event
In your ProjectEntry graph extension:
- Write custom logic to query relevant tables, aggregate values, and assign to the field.
- Use SelectFrom<APInvoice>.Where<...> for Pending AP, for example.
public void _(Events.RowSelected<PMProject> e)
{
var row = e.Row;
if (row == null) return;
// Example: Sum pending AP
decimal totalPendingAP = 0m;
var pendingBills = SelectFrom<APInvoice>
.Where<APInvoice.projectID.IsEqual<@P.AsInt>
.And<APInvoice.released.IsEqual<False>>>.View.Select(Base, row.ContractID);
foreach (APInvoice bill in pendingBills)
{
totalPendingAP += bill.CuryOrigDocAmt ?? 0m;
}
row.UsrPendingAP = totalPendingAP;
}
Repeat similar logic for each field.
🧩 Optional: Add a “Financial Summary” Tab
- Add a new tab on PM301000 in the Customization Project.
- Place the calculated fields there.
- Or, use a Generic Inquiry and embed it as a tab via Navigation → GI Panel.
📊 Optional: Use a GI Dashboard Instead
- Build a Generic Inquiry that pulls all fields per project.
- Link to PMProject by ContractID.
- Add a Project Dashboard screen showing:
- Pie/Bar chart for pending vs actual
- Grid of unreleased AP/AR by vendor/customer
💡 ERP Pro Tips
💡 Tip for PMs: You can add conditional formatting in the GI to highlight high pending AP/retainage.
💡 Tip for Developers: Consider caching the values at Appointment or Transaction entry to reduce performance hits.