This module adds a Final Price field to sale order lines, holding the unit price once the discount is applied.
Setting it works out the discount that turns the price coming from the pricelist into the agreed figure, so the catalog price stays visible on the quotation and the rebate is recorded as such.
On top of that, the unit price and the discount become read only for anyone who is not a Sales Administrator: salespeople state what the customer pays, and the system works out the discount.
auto_awesome What this module does
AI-generated from the code · Odoo 18.0Adds a Final Price field to sale order lines: salespeople type the price agreed with the customer and Odoo works out the discount, while the unit price and discount stay locked for non sales managers.
On every sale order line you get a new Final Price column, showing the unit price after the discount. Instead of typing a discount, a salesperson can type the price the customer will actually pay; Odoo then calculates the matching discount percentage, so the catalog price coming from the pricelist stays visible on the quotation and the rebate is recorded as a discount.
- The unit price and the discount fields become read only for users who are not Sales Administrators, so only managers can change them directly.
- The Final Price field is shown in the order lines list and in the line detail form of the sale order screen.
- It is only visible to users who have the discount-per-line setting enabled.
- Once a line has been invoiced (invoiced quantity above zero), the Final Price can no longer be edited.
- Changing the unit price or the discount automatically refreshes the Final Price, and changing the Final Price automatically refreshes the discount.
The module only touches sale order lines (sale.order.line) and the sale order form view; no new menus or reports are added.
Depends on
Models and fields (1)
- sale.order.line · extends an existing modelprice_final (Final Price), price_edit_allowed
Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 1 confirmed, 8 with no information of 9 versions.
Sources · Odoo 18.0
Confirmed on 2026-11-03 in branch 18.0 of OCA/sale-workflow.
terminal Installation and usage
OCA documentation · Odoo 18.0Configuration
Source · Odoo 18.0The discount is the only room the final price has to move in, so the decimal precision of Discount is what says how exact the final price can be. With the two decimals Odoo ships with, the leftover of the rounding is at most unit price * 0.005 / 100 per unit, which stays under a cent on a single unit but adds up with the quantity: 10 units of a line priced at 30.75 amount to 549.99 instead of the 550.00 asked for.
Raising the decimal precision of Discount (Settings > Technical > Decimal Accuracy) to 5 or 6 digits drops that leftover below the cent for any sensible price and quantity, and the amounts of the line then add up to the final price.
Bear in mind that this precision rules every discount of the database, and that discounts with that many decimals will be printed as such unless the report is told otherwise.
Usage
Source · Odoo 18.0On any sale order line, fill in Final Price with the unit price agreed with the customer. The discount is computed right away, keeping the unit price given by the pricelist: a final price of 750.00 over 1,000.00 gives a 25% discount. Editing the unit price or the discount refreshes the final price instead.
A line whose pricelist price is zero is the exception. No discount can ever lift that price up to the agreed figure, and there is no catalog price worth keeping either, so the final price is written straight into the unit price and the discount stays at zero.
The discount is the only figure that moves, so the final price can only be reached as close as the Discount decimal precision allows. When the requested figure is out of reach, the line settles for the closest one, and the final price shown is always what the line is really worth: asking for 333.33 over 1,000.00 gives a 66.67% discount, which is 333.30.
That leftover can also stay out of sight on the final price and still show up on the amount of the line: 30.75 with the -78.86% needed to reach 55.00 is 54.99945 per unit, so 10 units amount to 549.99 instead of 550.00. Raising the decimal precision of Discount narrows the gap.
No verified information in OCA: Installation.
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
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.