Product Substitutes
Purpose
Product Substitutes helps a salesperson compare approved alternatives for a product on an editable quotation. It shows replacement quantities, warehouse stock and candidate prices, then records the original product and commercial values when a replacement is applied. A salesperson can record customer approval, reject a suggestion or revert an accepted substitution while the quotation remains editable.
This guide follows Odoo 19 source and a targeted Odoo 20 comparison. The practice workflow has not been executed, and no quotation or report was sent.
Before you start
Install corvus_sale_product_substitute with Sales/Inventory integration (sale_stock) for your exact major version. No Enterprise-only dependency is declared. Custom-addon hosting is required.
Prepare genuine product compatibility rules and supported product units. A displayed stock or price comparison is guidance for a decision; it does not establish technical compatibility or reserve stock.
Access and roles
Sales users can read active, approved rules and use the finder on quotations they can edit. Sales Managers and Inventory Managers can maintain rules within allowed companies. Rule deletion archives the rule to retain its history. An Inventory Manager still needs Sales access to perform a quotation substitution.
Product Substitute Margin Viewer permits cost-derived margin columns in the finder and does not independently grant Sales workflow access. Sales and Inventory Managers receive this visibility group. Company access and normal quotation permissions continue to apply.
Setup and menu
Open Sales → Products → Product Substitute Rules. Set the company, original product, substitute product, original/substitute units, Replacement Ratio and priority. A ratio means replacement units per original rule unit; the finder converts the requested quantity to the original rule unit and rounds the resulting replacement quantity upward in the substitute unit.
Rules are directed. A rule from product A to B does not automatically allow B to A. Create Reciprocal Rule creates an inverse with swapped units and inverse ratio; an existing inverse prevents this action. The cycle indicator flags loops in active approved rules; the finder still offers direct rules rather than recursively following a chain.
Set optional effective dates, Customer, Customer Tags and pricelist. Dates are checked against the current date. Rules default to active and approved, so review those flags before making a draft rule available. Compatibility Note is internal guidance. Customer Note is separate wording that the salesperson may explicitly include on the quotation. Product forms also have a Substitute Rules smart button to related rules.
Workflow
- Save a product line on an unlocked draft or sent quotation. Choose Find Substitute on the line. A delivered, invoiced or invoice-linked line cannot be substituted or reverted.
- Review Find Product Substitute. The warehouse is taken from the quotation and is read-only in the finder. Candidates show replacement quantity, Free, On Hand, Forecast, Expected Date, price, subtotal, price difference and fulfilment result. Margin columns require the visibility role.
- Select a candidate deliberately. Ranking prioritises customer-specific scope, pricelist scope and lower rule priority before stock sufficiency and price. The top-ranked result is therefore not necessarily the cheapest or best-stocked option. The first candidate is preselected.
- Choose Recompute price, taxes and description or Preserve negotiated commercial values. Recompute uses the replacement's native product/pricelist calculations. Preserve retains description, unit price, technical price, discount and taxes, while product, unit and quantity still change. Preserving unit price does not preserve the line total when the replacement quantity differs.
- Enter a meaningful substitution reason. Optionally select Include approved substitute note on quotation. Choose Apply Substitute. The line changes to the replacement and status becomes Accepted; original values and the applied rule/reason are recorded, and the order receives a chatter entry.
- Use Record Customer Approval after obtaining the customer's approval through your business process. This is a staff-recorded status, not a customer portal acceptance or automatic confirmation requirement. A merely suggested review can be marked rejected. To undo an accepted or customer-approved replacement, choose Revert Substitution while the line remains eligible.
- A Sales Manager can review Sales → Reporting → Product Substitutions for substitution analysis. When the customer-note option is enabled, the sales quotation report prints that note beneath the line description. The internal compatibility note is not printed by this extension.
Practice scenario
In an authorised test database, create fictional “Harbor Filter A” and “Harbor Filter B” with a directed 1:2 replacement rule. For a quotation requesting three Units of A, the expected candidate quantity is six Units of B, subject to its unit rounding. With Preserve mode, a unit price of 10 remains 10, making the replacement line worth 60 before tax instead of 30. Review that change, apply with a reason, and inspect the original snapshot. This exercise is source-derived and has not been run.
Troubleshooting and limitations
“No approved substitute matches” calls for checking active/approved status, company, original product, current dates, customer/tags and pricelist. The original and substitute units must be among the respective product's allowed compatible units. Exact duplicate directed scopes are refused even if another rule was archived.
The finder reads stock in the quotation warehouse at the order commitment date or native expected date. Expected Date is that comparison horizon, not a separately calculated arrival promise for each candidate. Shortfall candidates remain selectable, and applying a substitute does not reserve inventory or guarantee fulfilment.
Candidate rows are generated snapshots and cannot be edited. If quantity, prices, rules or stock change while the finder is open, close and reopen it before choosing. A rule is revalidated when applied, but the stored candidate quantity/price/stock comparison is not a fresh reservation.
Revert restores the saved original commercial values and disables the printed customer note. It is refused if the current product no longer matches the recorded replacement. Revert the current accepted substitution before choosing another; audit fields cannot be supplied directly by imports.
Versions and useful links
Catalogue-qualified versions are Odoo 15, 16, 18, 19 and 20. Odoo 17 source is present but not catalogue-qualified. This walkthrough is reviewed for 19.0; 15–18 workflows remain unreviewed here. The targeted 20.0 comparison adapts pricelist selection to the requested quantity and unit, unit-zero checks and the sales-line view structure.
Choose the exact version in the Corvus apps catalogue. For broader warehouse comparison, see Multi-Warehouse Stock ETA; for quantity enforcement, see Sales MOQ & Pack Rules. No demo was launched.
Open the Odoo 19 demo selector for this catalogue-qualified module/version pair. The catalogue listing was verified; no demo was launched.