7.1 RFQs & purchase orders (procure-to-receive)

Key Takeaways

  • The Purchase app follows a procure-to-pay chain: RFQ to RFQ Sent to Purchase Order to a validated receipt to a vendor bill.
  • Clicking Send by Email moves an RFQ to the 'RFQ Sent' status, while Confirm Order turns it into a binding Purchase Order.
  • A product's Bill Control policy, 'On ordered quantities' versus 'On received quantities', decides the quantity Odoo proposes to bill.
  • Confirming a PO for a storable product auto-creates an incoming receipt in Inventory that warehouse staff must validate to raise stock.
  • Odoo 19 uses the Alternatives feature (Compare Product Lines) for competitive tenders and Blanket Orders for long-term agreed prices.
Last updated: July 2026

The procure-to-pay cycle

Odoo's Purchase app automates a standard procure-to-pay (procure-to-receive) cycle built from four linked documents: a Request for Quotation (RFQ) becomes a confirmed Purchase Order (PO), the goods are received through the Inventory app, and the transaction is closed by a vendor bill posted in Accounting. Each document feeds the next, so quantities and prices flow forward without re-keying. Certification questions frequently test which status belongs to which document, so memorize the chain: RFQ -> RFQ Sent -> Purchase Order -> Locked, with Cancelled available at almost any point. The distinction that trips candidates up is that an RFQ is only an internal request, whereas a confirmed PO is a legal commitment to the vendor.

Creating and sending an RFQ

You begin at Purchase -> Orders -> Requests for Quotation -> New. Choose a Vendor and Odoo pulls that partner's currency, payment terms, and any vendor-specific pricing. Add order lines with products, quantities, unit prices, and taxes. While it is a draft the document is an RFQ, not yet a commitment. Clicking Send by Email delivers it to the vendor using the purchase email template and moves the status to RFQ Sent; Print RFQ produces a PDF instead. The header's expected-arrival date lets the buyer plan receipts before the order is even confirmed, and the vendor reference field captures the supplier's own quotation number for later matching.

Comparing vendor quotations

When several suppliers could fill the same need, Odoo 19 uses the Alternatives feature, which is its practical call for tender. From an RFQ, open the Alternatives tab and choose Create Alternative to draft parallel RFQs to other vendors that copy the same product lines. The Compare Product Lines button opens a side-by-side view listing each vendor's unit price, quantity, and total per product, highlighting the cheapest option. You tick the winning line or lines, press Clear to drop the rest, and Odoo can automatically cancel the losing RFQs. The result is a documented, competitive sourcing decision rather than an ad-hoc choice, and every alternative stays linked so the audit trail is preserved.

Confirming, approving, and locking

Pressing Confirm Order turns the RFQ into a binding Purchase Order. If Purchase Order Approval is enabled in Settings, orders above a configured minimum amount require a manager to approve before they can be confirmed, a common exam point about segregation of duties. Once confirmed, a PO can be Locked (Settings can auto-lock confirmed orders) to prevent further edits; a user must explicitly Unlock it to make changes.

Receiving goods (link to Inventory)

For storable products, confirming the PO immediately creates an incoming Receipt in Inventory, reachable from the Receipt smart button on the order. Warehouse staff Validate that receipt when goods physically arrive, which raises on-hand stock and writes the received quantity back onto the PO. Purchase itself never moves stock; the receipt is the bridge between Purchase and Inventory, and a partial receipt creates a backorder for the remainder, exactly like a sales delivery. Multiple receipts against one PO are each validated separately, and goods sent back to the supplier are handled with a Return from the receipt, which reverses the stock move.

Vendor bills and the Bill Control policy

The cycle closes with a vendor bill. How much Odoo proposes to bill depends on the Bill Control policy, set per product on its Purchase tab (its default comes from Settings -> Purchase -> Bill Control):

Control policyBill quantity based onTypical use
On ordered quantitiesQuantity ordered on the POServices and trusted vendors; can bill before receipt
On received quantitiesQuantity actually receivedPhysical goods; pay only for what arrived

Under On received quantities, a bill drafted before the goods arrive shows a zero billable quantity until the receipt is validated. Enterprise adds 3-way matching, comparing the bill, the PO, and the receipt and raising a Should Be Paid status so accounting can withhold payment until the three documents agree.

Prepaying and creating the bill

After confirmation a Create Bill button appears, and you can bill several receipts on one draft or split them across bills. Odoo 19 also supports down payments on a purchase order, letting you register a prepayment to the vendor as a percentage or a fixed amount before goods ship, which the final bill then deducts. The bill's due date follows the vendor's payment terms, and once posted it feeds Accounting's aged-payable and cash-forecast reports.

Purchase agreements: blanket orders and tenders

For recurring supply, enable Purchase Agreements in Settings -> Purchase. A Blanket Order is a long-term agreement covering negotiated prices, and optionally quantities, with a vendor over a defined period. You generate individual RFQs or POs from the blanket order and Odoo auto-fills the agreed price, so buyers never renegotiate line by line. This suits materials you re-buy constantly at a fixed rate. Competitive, one-off sourcing is instead handled through the Alternatives / Compare workflow above, which is Odoo 19's modern replacement for a formal call-for-tender document. Used together, blanket orders lock in price stability while alternatives drive price competition, and both ultimately produce the same RFQ -> PO -> receipt -> bill chain that anchors the entire Purchase app.

Test Your Knowledge

A company wants to pay its vendors only for goods that physically arrive at the warehouse. Which Bill Control policy should be set on the product?

A
B
C
D
Test Your Knowledge

In Odoo 19, which feature lets a buyer create parallel RFQs to different vendors and compare their prices side by side before choosing one?

A
B
C
D
Test Your Knowledge

What does Odoo do automatically the moment a Purchase Order for a storable product is confirmed?

A
B
C
D