OdooWiki OCA HUB

Purchase Request

purchase_request folder_open OCA/purchase-workflow open_in_new
Purchase Management License: LGPL-3

You use this module if you wish to give notification of requirements of materials and/or external services and keep track of such requirements.

Requests can be created either directly or indirectly. "Directly" means that someone from the requesting department enters a purchase request manually.

The person creating the request determines what and how much to order, and the requested date.

"Indirectly" means that the purchase request initiated by the application automatically, for example, from procurement orders (MO, SO).

A purchase request is an instruction to Purchasing to procure a certain quantity of materials services, so that they are available at a certain point in time.

A line of a request contains the quantity and requested date of the material to be supplied or the quantity of the service to be performed. You can indicate the service specifications if needed.

Once request is approved go to the Purchase Request Lines from the menu entry 'Purchase Requests', and also from the 'Purchase' menu.

Select the lines that you wish to initiate the RFQ for, then go to 'More' and press 'Create RFQ'.

You can choose to select an existing RFQ or create a new one. In the later, you have to choose a supplier.

In case that you chose to select an existing RFQ, the application will search for existing lines matching the request line, and will add the extra quantity to them, recalculating the minimum order quantity, if it exists for the supplier of that RFQ.

In case that you create a new RFQ, the request lines will also be consolidated into as few as possible lines in the RFQ.

auto_awesome What this module does

AI-generated from the code · Odoo 19.0

Lets employees record internal purchase requests for products or services, follow them through an approval workflow, and turn approved request lines into requests for quotation to suppliers.

This module adds a Purchase Request document to Odoo, separate from a normal request for quotation. A user creates a request with a reference number, a creation date, a requester, an optional approver, a source document and a list of products to purchase with quantities, units, required dates and estimated costs. The request shows a total estimated cost and counters for lines, stock moves and purchases.

Requests move through statuses: Draft, To be approved, Approved, In progress, Done and Rejected. Buttons let users submit for approval, approve, reject, start progress, mark done or reset to draft. A request cannot be submitted for approval if it has no valid lines, and it is automatically rejected when all its lines are cancelled. Requests and lines can only be deleted while in draft, and lines become read-only once they are linked to a purchase order.

From request lines a wizard creates a request for quotation, with options such as matching existing order lines by scheduled date and copying descriptions. Each request line tracks how much has been purchased, received, cancelled and is still pending, and shows the related purchase status and preferred supplier.

Products can be flagged so that procurement generates a purchase request instead of a quotation. Reordering rules count open request quantities as incoming. When a purchase order is confirmed or goods are received, messages are posted on the request, and cancelling a procurement move creates an activity on the request. A printable Purchase Request report is included, and menus appear under Purchase > Procurement.

Depends on

purchase_stock

Menus it adds

menu_purchase_request_linemenu_purchase_request_line_actmenu_purchase_request_pro_mgtPurchase RequestsPurchase Requestsmenu_purchase_request_act
Models and fields (11)
  • stock.move · extends an existing modelpurchase_request_ids, purchase_request_allocation_ids, created_purchase_request_line_id
  • stock.rule · extends an existing model
  • purchase.order · extends an existing model
  • stock.move.line · extends an existing model
  • product.template · extends an existing modelpurchase_request
  • purchase.request · new modelname (Request Reference), state (Status), origin (Source Document), line_ids (Products to Purchase), company_id, date_start (Creation date), line_count (Purchase Request Line count), move_count (Stock Move count), product_id (Product), assigned_to (Approver), currency_id, description, is_editable, requested_by, estimated_cost (Total Estimated Cost), purchase_count (Purchases count), picking_type_id, is_name_editable, to_approve_allowed
  • purchase.order.line · extends an existing modelpurchase_request_lines, purchase_request_allocation_ids
  • purchase.request.line · new modelname (Description), origin (Source Document), qty_done, cancelled, company_id (Company), date_start, product_id, qty_to_buy (There is some pending qty to buy), request_id (Purchase Request), assigned_to (Assigned to), currency_id, description (PR Description), is_editable, product_qty (Quantity), supplier_id (Preferred supplier), requested_by (Requested by), date_required (Request Date), move_dest_ids (Downstream Moves), orderpoint_id, purchased_qty (RFQ/PO Qty), qty_cancelled, request_state (Request state), estimated_cost, product_uom_id (UoM), purchase_lines (Purchase Order Lines), purchase_state (Purchase Status), specifications, qty_in_progress, pending_qty_to_receive (Pending Qty to Receive), purchase_request_allocation_ids
  • purchase.request.allocation · new modelcompany_id, product_id (Product), stock_move_id, product_uom_id (UoM), purchase_state, open_product_qty (Open Quantity), purchase_line_id, allocated_product_qty (Allocated Quantity), purchase_request_line_id, requested_product_uom_qty (Requested Quantity)
  • purchase.request.line.make.purchase.order · new modelitem_ids, supplier_id, purchase_order_id, sync_data_planned (Match existing PO lines by Scheduled Date)
  • purchase.request.line.make.purchase.order.item · new modelname (Description), wiz_id (Wizard), line_id (Purchase Request Line), product_id (Product), request_id (Purchase Request), product_qty (Quantity to purchase), product_uom_id (UoM), keep_description (Copy descriptions to new PO)

Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 8 confirmed, 1 with no information of 9 versions.

Sources · Odoo 19.0

Confirmed on 2026-11-03 in branch 19.0 of OCA/purchase-workflow.

terminal Installation and usage

OCA documentation · Odoo 19.0

To configure the product follow this steps:

  • Go to a product form.
  • Go to Inventory tab.
  • Check the box Purchase Request along with the route Buy and Replenish on Order (MTO)

Note that MTO route is archived by default, you should unarchive it first:

  • Go to Inventory > Configuration > Routes, in the Search dropdown menu, click Archived to show Replenish on Order (MTO) route and Unarchive it.

With this configuration, whenever a procurement order is created and the supply rule selected is 'Buy' the application will create a Purchase Request instead of a Purchase Order.

Purchase requests are accessible through a new menu entry 'Purchase Requests', and also from the 'Purchase' menu.

Users can access the list of Purchase Requests or Purchase Request Lines.

It is possible to filter requests by its approval status.

No verified information in OCA: Installation.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.