Purchase orders (goods)

Overview
This is where goods purchase orders run — from draft to goods receipt.
A boundary that saves time: this module orders goods for the warehouse. Commissions to service providers and subcontractors run through procurement — that is about cost per project, this is about stock.
Core tasks
Create a purchase order. New purchase order requires an orderable supplier; expected goods receipt, a note and line items follow. The list shows number, status, total, order date and the expected arrival date.
Convert from suggestions. The usual route does not start here but at the reorder suggestions or a purchasing list — from there, draft orders per supplier are created.
Use dropshipping. With dropshipping the goods go straight from the supplier to the customer, without the detour through your own warehouse.
Record a goods receipt. The receipt is recorded on the purchase order — the goods receipt action leads there. The overview of receipts lives under Goods receipts. Once the order has gone out, the lines show the Received column — received of ordered, per line.
Purchasing on the home page. Three tiles bring purchasing onto the dashboard — via Edit → Add widget:
- Open reorder suggestions counts the reorder suggestions nobody
has ordered or dismissed yet.
- Overdue orders counts the orders past their expected goods receipt with goods still missing
(status Ordered, Confirmed or Partially received). The order itself then shows how many days it is overdue.
- Expected goods receipts lists ordered goods not yet fully delivered, next date first; a click
opens the order.
Drafts, cancelled and fully received orders never count, nor do blanket orders — they trigger no goods themselves, only their call-offs do. The tiles are visible to everyone with purchasing.order.view, each with the orders of their own brands.
Fields in detail
Currency (currency): defaults to the supplier's currency; all amounts of the order are in it, and the exchange rate is frozen on the document. Target warehouse (warehouseId): default for the goods receipt, empty = choose at receipt. Warehouse of this receipt (receiptWarehouseId, only when booking a receipt) overrides the target warehouse, changeable again per line. Per line you can choose the condition at receipt (new, refurbished, used, damaged) — used goods never end up in new stock. Place despite minimum order value (acceptBelowMinimum, only when placing): deliberately confirms an order below the supplier's minimum order value.
The What it does column answers what changes in the system — not what the field is called. The grey name behind the label is the API field: the same thing runs under that name through automation, import and AI tools.
Creating and editing an order
| Field | Required | Values / format | What it does |
|---|---|---|---|
Supplier supplierRoleUlid | yes | an existing supplier | Who is ordered from. Payment terms, currency, minimum order value and default lead time come along from there. |
Order type orderType | no | standard order (default) or blanket order | A blanket order agrees product, price and a quantity allowance for a period and releases no goods — delivery happens on call-off only. That is the difference to a standard order, which orders right away. If a call-off is cancelled, its quantity goes back to the blanket; the cancelled call-off stays in the list of call-offs. |
Blanket valid from validFrom | with a blanket order | date | From when call-offs against the blanket are allowed. |
Blanket valid to validTo | with a blanket order | date | Until when call-offs are allowed. After that no call-off is possible; open remainders rest until the blanket is extended. |
Items items | yes | articles with quantity and price | What is ordered. The price comes from the supplier list; deviations stay on the document and surface at invoice matching. |
Expected on expectedAt | no | date | When the goods should arrive. Left empty, creating the order pre-fills it from the lead time: per line the lead time of the supplier article, otherwise the supplier's default lead time — the order expects the longest, counted from today. Without any lead time it stays empty. This figure carries the expected column in the stock overview. |
Payment terms paymentTermUlid | no | master data "payment terms" | When you have to pay. Pre-filled from the supplier. |
Delivery address deliveryAddress | no | address | Where it is delivered. Empty means the address of the default warehouse. |
Dropshipping isDropship | no | yes/no | Set to yes the supplier delivers straight to your customer. The goods never touch your warehouse — no stock arises and goods receipt is skipped. |
Brand brandId | no | one of your brands | Which brand orders — determines number range, document template and sender. |
Document template documentTemplateId | no | a configured template | Layout of the order as a PDF. |
Notes notes | no | text | Internal note on the order. |
Create a call-off: on the blanket order the card Blanket order shows the agreed, called-off and open quantity per item. Create call-off takes the quantities you want (never more than is open) and creates a separate draft order at the agreed price — the allowance drops at once. There is no goods receipt against the blanket order itself.
Releasing and goods receipt
| Field | Values / format | What it does |
|---|---|---|
Release release | yes/no | Turns the draft into a binding order: number, fixed prices, a document ready to send. From here nothing changes quietly any more. |
Delivery note number deliveryNoteNumber | text | The number on the supplier's delivery note. It binds the goods receipt to their paperwork — the document people look for later. |
Blocked stock isBlockedStock | yes/no | Set to yes the goods go into blocked stock instead of free stock: booked, but not sellable. The right route for goods under inspection or suspected of defects. |
Note note | text | Note on the goods receipt, for instance about deviations. |
Interface and automation only
No mask carries these fields; they can be set through the interface, an import or an automation.
| Field | Values / format | What it does |
|---|---|---|
additionalCosts | rows of kind, label, net amount and allocation key | Additional costs of the whole document — freight, customs, insurance, packaging, other. The allocation key decides the landed cost: by value 500 EUR of freight lands on the expensive item, by weight on the heavy one, by quantity on the one with the largest count. Writing replaces the entire list. They only affect stock under the house rule purchasing.receipt.price_source = landed. |
receiptAdditionalCosts | the same rows as above | Additional costs of this one delivery — the freight invoice that arrives with the delivery note. They are spread over the items of this receipt only, not over the whole document. Can only be given on goods receipt. |
deliveredAt | date | The actual delivery date. It is set by the system on a complete goods receipt — unlike Expected on, which holds the plan. |
Settings & permissions
- Module
module.purchasing. purchasing.order.view,.create,.update,purchasing.order.placefor
placing an order bindingly, and .cancel for cancellation. Out of the box the role Einkauf holds all of these except cancellation; an AI team member in the Purchasing role orders only with approval (see AI team).
- Only orderable suppliers appear in the picker. If one is missing, it is not maintained as
orderable.
- Stock changes only on release of the goods receipt, not with the order, see
FAQ & troubleshooting
No supplier to choose from. The message says so explicitly: no orderable suppliers were found. That is a question of supplier master data, not of this page.
Stock does not rise after ordering. By design. An order is an intention; what is booked is the released goods receipt.
I see no purchase order for a suggestion. Suggestions create draft orders. Check the status filter.
Purchasing or procurement? Goods for the warehouse here, services and subcontractors in Procurement.