Purchase Orders#
A PO authorises a supplier to deliver a specific quantity of parts at agreed prices and dates. Lines can have multiple delivery schedules; receipts happen through the Receiving flow.
Structure#
POMAIN— header: supplier, currency, payment terms, ship-to, status.POITEM— one line per part / service. Carries quantity, unit price, and account default.POITSCHD— schedule rows if a line is delivered in multiple shipments.PODMR— a Discrepant Material Report opened when a receipt is short, over, or fails inspection.
Lifecycle#
- Draft — created from an MRP action, a supplier RFQ result, or manually.
- Approved / Issued — sent to the supplier; releases may be cut against a blanket PO.
- Partially received — one or more lines have receipts; open quantity remaining.
- Fully received — closes automatically or on user action.
- Cancelled — if no receipts have occurred; historical if some have.
The lifecycle helpers live in MnxEFModel/Helper/Purchase Order/. PurchaseOrderHelper / POMainHelper cover header operations; PoItemHelper and PoitSchdHelper cover line and schedule mutations.
Receipts#
Receiving against a PO is documented in Receiving. Key helpers on the PO side:
PORecDtlHelper— PO receive detail (link between a receipt and a PO line).PORecLocHelper/PoRecLocIpKeyHelper— where the receipt lands (warehouse / location) resolved via IP-key context.PoRecRelGLHelper— GL entries generated by the receipt (received-not-invoiced accrual).PORecLotHelper/PorecserHelper— lot / serial capture at receive time.
DMR — Discrepant Material Report#
When a receipt is out of spec (short, over, damaged, wrong part) a DMR is opened via PoDMRHelper (with header model DmrHeaderModel and detail DmrDetailHelper / ApDmDetlHelper). The DMR tracks the disposition — return-to-vendor, use-as-is with discount, or scrap — and drives any AP debit memo generated as a result.
Business rules#
- Cannot over-receive without the PO’s “allow over-receipt” flag.
- Cancelling a PO line with open receipts is blocked — close short instead.
- Changing supplier or currency on a PO with any activity is blocked.
- Payment terms and tax on the PO drive AP-side defaults but can be overridden on the invoice.
- Received-not-invoiced accrual (
PoRecRelGLHelper) posts at receipt time; it is reversed and re-posted at invoice time.
Where it lives#
| Layer | File |
|---|---|
| Controller | PoItSchdController, PoDMRController, PoRecLocIpKeyController, PorecserController |
| Helper | MnxEFModel/Helper/Purchase Order/PurchaseOrderHelper.cs, POMainHelper.cs, PoItemHelper.cs, PoScheduleHelper.cs, PORecDtlHelper.cs, PORecLocHelper.cs, PoRecRelGLHelper.cs, PoDMRHelper.cs, PoitSchdHelper.cs, PodefltHelper.cs, PoItemsHelper.cs, InPlantPOHelper.cs |
| Import | MnxEFModel/Helper/POImport/, ImportPOErrorsHelper.cs |
| Related | Receiving, AP, CalcuQuote |