Price approvals and discount control
Review a quotation's prices and margin, ask for approval of an exception, and decide a request.
Required permission: sales.price.approve
Before you begin
- An administrator has set the limits in Sales > Configuration > Settings: Margin control, Minimum margin % and Largest discount without approval %.
- Whoever decides a request holds sales.price.approve. This is separate from the right to confirm orders.
- The person who decides must be a different person from the one who priced the quotation or asked for approval.
When approval is needed
A quotation is held at confirmation when a line:
- carries a discount above Largest discount without approval % (for example a 15% discount when 10% is allowed);
- is under the minimum margin and Margin control is Hold for approval below the minimum. With Warn below the minimum the line is only listed under price warnings and you can still confirm;
- is priced below the product's minimum sale price, or changes a price that the price list locks. These are always held.
The refusal reads, for example: 'This quotation needs price approval before it is confirmed: A 15% discount is over the 10% allowed without approval.'
Review the prices
- Open the quotation and go to the Prices & margin tab.
- Check each line: list price, unit price, "Typed over the list" where the price was overridden, discount, and (if you have margin rights) cost and margin %.
Users without sales.margin.reveal or product.cost.view do not see cost or margin on this tab.
Ask for approval
- On Prices & margin, type the reason in Why this price? (optional), for example "Competitor match" (up to 500 characters).
- Press Request approval.
The system shows "Approval requested." and the quotation status becomes Waiting for price approval. Confirm now says "Waiting for price approval: ..." until a decision is made.
Decide a request
- Open Sales > Orders > Price approvals. Use Show to switch between Waiting, Approved, Rejected and All.
- Open the request and read the quotation, the exceptions, who asked and the reason given.
- Press Approve, or type a note and press Reject. A rejection needs a note: 'Say why it is rejected.'
The same screen lists Change orders waiting, which are decided the same way (see Change a confirmed order).
What happens next
- Approved: the quotation can be confirmed. History shows 'sale.price_approval.approved' by the second person.
- Rejected: the quotation stays held. Change the prices and ask again, or abandon it.
Good to know
- Nobody approves their own work. If the person who asked, or who last saved the prices, tries to approve: 'Somebody other than the person who priced or asked must decide this.' A user without the right is refused: 'Approving a price exception needs the sales price approval right.'
- Approval is tied to the prices as they were. If anyone changes a price or quantity after approval, the approval no longer matches and confirm is held again. Approving a changed quotation fails with 'The quotation has changed since this was asked for; ask again.' Make a new request.
- A request that is already decided cannot be decided twice: 'This approval is already approved.'
- If the price list changed after the quotation was priced, confirm is refused with 'Prices on the list have changed since this quotation was priced...'. Press Update prices on Prices & margin ("Prices updated from the price list.") and confirm again. Lines whose price you typed over the list are kept.
- A line at 100% discount is "given away free" and needs a reason before confirmation: '<description> is given away free: say why on the line.' The order screen has no field for this reason yet, so avoid giving items away at 100% on a quotation; use a small price instead, or ask your administrator how the company records free items.
- The approvals list can show the margin figure in the reason text even to users who do not see margin elsewhere. Grant document.view with that in mind.