| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Sales (sale_management) • Invoicing (account) |
| Lines of code | 5782 |
| Technical Name |
price_engine |
| License | OPL-1 |
| Website | https://www.nawah.qa |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Sales (sale_management) • Invoicing (account) |
| Lines of code | 5782 |
| Technical Name |
price_engine |
| License | OPL-1 |
| Website | https://www.nawah.qa |
Dynamic pricing for Odoo Sales
Price Engine
Build formula-based sale prices, apply conditional rules, distribute agreed order totals, and trace how every calculated price was produced.
Price Engine helps sales and pricing teams replace repeated manual price edits with controlled pricing logic inside Odoo.
Control pricing logic inside Odoo
Price Engine lets you define reusable pricing formulas and apply them directly to sale order lines. Variables can come from products, sale orders, sale order lines, customers, or fixed values.
The module supports safe mathematical expressions, conditional if/else logic, field-based conditional rules, approval before use, simulation, bulk product assignment, manual override handling, and price tracing.
It is designed for teams that need more control than static product prices, while still keeping pricing rules readable and auditable.
What users can do
- Calculate sale order prices from approved formulas.
- Use different formula branches when conditions match.
- Preview pricing impact before applying changes.
- Keep manual price overrides during recalculation.
- Explain the formula, rule, and variables behind a line price.
Highlights
Practical pricing tools built into Sales, Products, and Settings.
Formula pricing
Use arithmetic, comparisons, if/else logic, and supported functions such as min, max, round, abs, ceil, and floor.
Configurable variables
Map formula variables to numeric fields or fixed values. Variables written as {{variable_name}} are detected from formulas.
Conditional formula rules
Use ordered rules to select a formula branch by field value. The first matching rule wins, and the base formula remains the fallback.
Date and customer targeting
Set valid-from and valid-until dates, apply to all customers, or restrict an engine to selected customers.
Approval workflow
Move engines through Draft, Pending Approval, and Approved states. Managers or a configured approver can approve pricing engines.
Simulation
Run a read-only simulation against sale order lines by date, customer, product, and order state before changing operational prices.
Bulk product assignment
Apply an approved engine to selected products, all products in selected categories, or all products.
Distribute amount
Enter a target untaxed total and distribute it proportionally across order lines with currency-aware rounding.
Explain Price
Review the selected engine, matched rule, formula, variable values, calculated price, and any formula error for a sale order line.
History and audit
Formula changes, rule changes, approval state changes, and sale order amount distributions are stored for review.
Import and export
Export engines as JSON with variables and conditional rules. Import support creates a draft engine for review before use.
Bundled templates
Includes a protected default product price engine and 17 additional formula templates for common pricing patterns.
Price Engine vs Odoo Pricelist
Price Engine complements Odoo's native pricelists. Use the right tool for the pricing problem you need to solve.
Use Odoo Pricelists when
- You need standard rule-based pricing.
- You manage fixed prices, simple discounts, or customer-specific price lists.
- You need catalog pricing by product, category, quantity, date range, or currency.
- You want to stay fully within Odoo's standard pricing configuration.
Use Price Engine when
- You need formulas instead of predefined discount rules.
- You calculate from numeric product, order, line, customer, or fixed variables.
- You need conditional formula branches, approval, simulation, and price tracing.
- You need to distribute an agreed sale order total across order lines.
| Need | Odoo Pricelist | Price Engine |
|---|---|---|
| Pricing approach | Rule-based price selection from configured pricelist items. | Formula-based calculation on the sale order line. |
| Best fit | Standard discounts, fixed prices, customer pricing, quantity breaks, and currency price lists. | Cost-plus formulas, margin floors, rounding strategies, tier formulas, and multi-variable calculations. |
| Fields used in logic | Uses the fields exposed by Odoo's standard pricelist rules. | Formula variables can map numeric fields from allowed models; conditional rules can also inspect supported text, boolean, selection, and many2one fields. |
| Custom fields | Custom pricing logic normally requires configuration or development outside the standard rule set. | Custom numeric fields on allowed models can be used as formula variables once available in Odoo. |
| Approval and audit | Uses standard Odoo configuration and access control. | Includes Draft, Pending Approval, and Approved states, plus formula/rule version history. |
| Explainability | Follows Odoo's standard pricing behavior. | Explain Price shows the engine, matched rule, formula, variable values, result, and errors. |
| Order total distribution | Not designed for proportional distribution of a target order total. | Distribute Amount adjusts valid sale order lines to match a target untaxed total and records history. |
Workflow
Create the engine
Name it, choose company scope, and set optional dates and customers.
Write the formula
Use variables such as {{product_price}}, {{qty}}, and {{discount}}.
Map variables
Connect variables to allowed Odoo fields or fixed values.
Add rules
Create optional conditional branches for customer, product, order, or line values.
Test and simulate
Use sample values and the simulation wizard before operational use.
Submit and approve
Move from draft to pending approval, then approve when ready.
Assign to products
Set the engine on one product or use the bulk apply wizard.
Use on sale orders
Calculate, recalculate, distribute totals, and explain prices as needed.
Screens You Will Use
The module adds these practical screens and actions to Odoo.
Price Engine form
Main configuration, approval, conditional rules, variables, and history.
Formula and preview
Formula body, sample values, and safe calculation testing.
Variable configuration
Map formula variables to Odoo fields or fixed values.
Restrictions
Date validity, customer targeting, and company-aware pricing.
Sale order integration
Line pricing, manual overrides, recalculate, and distribute actions.
Price simulation
Preview current price, new price, difference, and matched rule.
Price Engine form
Manage formula, state, approval details, dates, customer targeting, variables, conditional rules, examples, and version history.
Conditional Rules tab
Configure model, field, operator, comparison value, and formula body for each ordered rule branch.
Variables tab
Review detected variables and map each one to a numeric field or a fixed value with sample data for testing.
Product form field
Select the approved price engine that should be used as the default pricing logic for that product.
Sale order controls
Recalculate prices, distribute a target amount, view line-level engine fields, and mark manual price overrides.
Explain Price wizard
Inspect the matched rule, actual condition values, formula used, variables, calculated price, and formula errors.
Price Simulation wizard
Filter sale order lines and compare current and simulated prices, including total difference and matched rule.
Price Distribution history
Review previous target-total distributions with original total, target total, difference, user, date, and line detail.
Sales settings
Administrators can configure the approver and allowed models for formula variables and conditional rules.
Use Cases
B2B and wholesale
Customer-specific engines, quantity formulas, and contract-style rules for selected customers.
Retail and promotions
Scheduled promotional formulas, volume discounts, and protected price floors.
Manufacturing and cost-plus pricing
Formulas based on product cost, markup, margin multipliers, and order quantities.
Service pricing
Package, tier, and conditional formulas using customer, order, or line information.
Progress-based projects
Agree on a final order amount and distribute it across sale order lines while keeping an audit trail.
Teams with pricing governance
Require approval, track changes, and explain calculated prices when users or managers need visibility.
Technical Information
| Module version | 19.0.1.12.7 |
|---|---|
| Odoo version | 19.0 |
| Edition support | Community and Enterprise |
| Category | Sales |
| License | OPL-1 |
| Application type | Add-on module for Sales, not a standalone application |
| Odoo dependencies | sale_management, product, mail |
|---|---|
| Python dependencies | No separate pip package is declared; the module uses Odoo APIs, Python standard library modules, and MarkupSafe from the Odoo stack. |
| Configuration menu | Sales > Configuration > Price Engines |
| Settings | Sales settings include Price Engine approver and allowed variable models. |
| Scheduled action | Daily date notifications for approved engines starting or ending today. |
| Templates | Protected default engine plus 17 additional formula templates. |
Implemented models and integrations
- price.engine
- price.engine.variable
- price.engine.rule
- price.engine.version
- sale.order.distribution.history
- Product template default price engine field
- Sale order line price engine and manual override fields
- Sale order recalculation and amount distribution actions
- Simulation, import, value picker, and trace wizards
- Mail chatter and activity support on price engines
Access Rights
The module ships with dedicated Price Engine security groups and company-aware rules.
| Group | Typical users | Main permissions |
|---|---|---|
| Price Engine User | Sales users | Read price engines, variables, and rules. Use sale order tools such as distribute amount, recalculate prices, and Explain Price. |
| Price Engine Manager | Pricing managers and sales managers | Create and edit engines, variables, and rules. Approve engines, simulate prices, bulk apply engines, and review version history. |
| Price Engine Administrator | System administrators | Full administrative access, including engine deletion, formula import, and Price Engine settings. Assigned to root and admin users by default. |
FAQ
Which Odoo version is supported?
This module is packaged for Odoo 19.0 and depends on Sales, Product, and Mail.
Does it work in Community?
Yes. The manifest uses standard dependencies available in Odoo Community, and it can also be used with Enterprise.
Does Price Engine replace Odoo Pricelists?
No. Odoo Pricelists remain useful for standard catalog, customer, quantity, date, and currency pricing. Price Engine is for products that need formula-based line price calculation, approval, simulation, tracing, or target-total distribution.
Do users need Python development skills?
No Python code is required to create day-to-day pricing formulas. Users configure formulas, variables, and rules from Odoo forms.
Can formulas use fields from different records?
Yes. By default, variables can use allowed fields from sale orders, sale order lines, products, product templates, and customers.
What happens if a salesperson edits a price?
The line can be marked as a manual override. Recalculation can keep manual overrides or reset them and recalculate all engine lines.
Can I test pricing before using it?
Yes. The engine form includes formula testing with sample values, and the simulation wizard previews pricing impact on sale order lines.
Can I see why a price was calculated?
Yes. The Explain Price wizard shows the engine, matched rule, formula, variables, calculated result, and errors if any.
Can I share engines between databases?
Export creates a JSON file with the engine, variables, and rules. Import creates a draft engine so it can be reviewed before approval.
How does amount distribution work?
The wizard compares the current untaxed total with a target total, applies a proportional ratio to valid lines, and stores the result in distribution history.
Are pricing changes auditable?
Formula, rule, and approval changes create version records. Price distributions are also stored on the sale order.
Support
Need help before or after purchase? Contact the support team for setup and configuration questions.
Contact supportDeveloped by Nawah Technical Solutions and Software W.L.L - Licensed under OPL-1
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module