Purchase Order Approval Workflow for Odoo 19 documentation
A guide to the approval of purchase orders: defining levels, asking for approval, approving and rejecting, what happens when a purchase order changes, and the settings.
Documents version 1.0.0Updated Oct 23, 2026
Start here
In plain words: A purchase order for a big amount, or with a big discount, should not be confirmed without a manager's OK. This module adds that OK to Odoo: you define approval levels, the buyer presses Request approval, the approvers are asked one after the other, and the purchase order cannot be confirmed until every level has approved it.
Tip: The approval is tied to the amount: if the total or a discount changes after approval, the purchase order must be approved again.
What you get
| Feature | What it does |
|---|---|
| Approval levels | By order total, by the highest line discount, or both. |
| Several levels in sequence | A 5,000 order needs the purchase manager; a 20,000 order needs the purchase manager and then the director. |
| Hard stop | Confirm is refused until the purchase order is approved. Vendors are not affected: the guard is for your own users. |
| Activities and notes | Each approver gets a task; every step is written in the chatter. |
| Reasons for rejection | A rejection needs a reason, which the buyer sees. |
| Approval is cancelled by a change | A different total or discount asks for a new approval. |
| To Approve list | Each approver sees the purchase orders waiting for them, even those of colleagues. |
| Settings | Switch it off, confirm automatically when approved, allow buyers to approve their own. |
Requirements
| Item | Details |
|---|---|
| Odoo | 19.0 (Community or Enterprise) |
| Apps needed | Purchase (purchase) |
| Approvers | Internal users with access to Purchase |
| License | OPL-1 (Odoo Proprietary License v1.0) |
Install
- Unzip the package. Inside is
taqnix_purchase_approval.zip; unzip it to get the foldertaqnix_purchase_approval. - Copy the folder into one of the
addons_pathfolders of your Odoo server and restart Odoo. - Log in as an administrator, activate Developer mode, open Apps and press Update Apps List.
- Remove the “Apps” filter, search Purchase Order Approval and press Install.
# or from the command line ./odoo-bin -c odoo.conf -d YOUR_DATABASE -i taqnix_purchase_approval --stop-after-init
Tip: After installing nothing changes for your team until you add at least one approval level.
Define the approval levels
In plain words: Open Purchase → Configuration → Approval Levels. Each line is a level: who approves, and when it applies.
| Field | Meaning |
|---|---|
| Level | The name shown to everyone, for example “Purchase manager”. |
| Order total from | The level applies when the order total (in the company currency) is at least this amount. 0 ignores the amount. |
| Discount from (%) | The level applies when any line has at least this discount. 0 ignores the discount. |
| Approvers | Any one of them can approve the level. They must have access to Purchase. |
| Sequence | Levels that apply are asked in this order. |
Tip: A level applies when the total reaches the amount or a line reaches the discount. Levels add up: a 26,000 order needs both the purchase manager and the director.
Settings
In plain words: Open Settings → Purchase Order Approval.
| Setting | What it does |
|---|---|
| Require approval | Switch the whole approval off for the company. |
| Confirm when approved | The purchase order is confirmed as soon as the last level approves. |
| Buyers may approve their own purchase orders | Off by default: the buyer and the person who asked cannot approve. If a level has no one else to approve, the request is refused with a message. |
The buyer asks for approval
In plain words: When a purchase order reaches a level, a banner says so and Request approval appears. Confirm is refused until it is approved.
| Situation | What happens |
|---|---|
| Request approval | The steps are created, the first level is asked and gets a task. |
| Two levels | The second level is asked only when the first has approved. |
| Confirm before approval | A message explains that approval is needed or pending. |
| Reset approval | Clears the steps so you can ask again, for example after changing the purchase order. |
The approver approves or rejects
In plain words: Purchase → Orders → To Approve lists the purchase orders waiting for you, also those of your colleagues.
Approved, or sent back
Tip: The buyer and the person who asked are notified when the purchase order is approved or rejected.
When the purchase order changes
| Change | Result |
|---|---|
| The total or a discount goes up or down after approval | The banner says the purchase order changed. It must be approved again to be confirmed. |
| The purchase order no longer reaches any level | It can be confirmed without approval. |
| The purchase order is cancelled or set back to draft | The approval steps are cleared. |
| The purchase order is duplicated | The copy starts without approval. |
Arabic and right to left
In plain words: The levels, buttons, banners, notes and settings are translated, and the banner follows the direction of the language.
Who can do what
| Who | What they can do |
|---|---|
| Buyers | Request approval for their purchase orders, reset it. |
| Approvers | See and approve or reject the purchase orders waiting for them, even if they belong to a colleague. |
| Purchase managers | Define the approval levels and the settings. |
| Vendors (portal) | Are not affected: the guard applies to your own users. |
Limits
| Limit | Detail |
|---|---|
| Purchase orders only | It guards the Confirm Order button of requests for quotation. Sales quotations have their own module. |
| Any one approver per level | A level is approved by any one of its approvers; there is no “two out of three”. |
| Internal confirmations are guarded | Everything that confirms a purchase order as an internal user is blocked, including server actions. |
| Currency | Amounts are compared in the company currency. |
For developers
In plain words: Skip this chapter if you only use the module.
| Item | Details |
|---|---|
| Models | taqnix.purchase.approval.rule (a level), taqnix.purchase.approval.line (a step of one purchase order). |
| Order fields | tx_approval_state, tx_banner, tx_current_approver_ids, tx_approval_needed. |
| Methods | action_tx_request_approval, action_tx_approve, action_tx_reset_approval; the guard is _tx_check_approval. |
# approve from your own code, as the approver
order.with_user(manager).action_tx_approve()
# which levels does a purchase order need?
order._tx_required_rules().mapped('name')Troubleshooting
| Problem | What to do |
|---|---|
| Nothing is asked for approval | Check that a level exists, that its amount or discount is reached, and that Require approval is on. |
| Request approval says nobody can approve | The only approver is the buyer or you. Add another approver, or allow self-approval in the settings. |
| An approver cannot find the purchase order | Use Purchase → Orders → To Approve. The approver needs access to Purchase. |
| The purchase order was approved but cannot be confirmed | The total or a discount changed after approval. Request approval again. |
| A level cannot be saved | A level needs an amount or a discount, and every approver needs access to Purchase. |
Updating and removing
Replace the folder with the new version, restart Odoo and run -u taqnix_purchase_approval. Levels and settings are kept. To remove it, uninstall it from Apps: the levels and the approval history are deleted with it, and purchase orders can be confirmed freely again.
Support
Installation help and bug fixes are included for 6 months, with lifetime updates. Contact us through the marketplace page where you bought the module or write to support@taqnix.com with your Odoo version and a screenshot.