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#

  1. Draft — created from an MRP action, a supplier RFQ result, or manually.
  2. Approved / Issued — sent to the supplier; releases may be cut against a blanket PO.
  3. Partially received — one or more lines have receipts; open quantity remaining.
  4. Fully received — closes automatically or on user action.
  5. 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#

LayerFile
ControllerPoItSchdController, PoDMRController, PoRecLocIpKeyController, PorecserController
HelperMnxEFModel/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
ImportMnxEFModel/Helper/POImport/, ImportPOErrorsHelper.cs
RelatedReceiving, AP, CalcuQuote