Skip to main content
iVentureTeam

Odoo 20 Sales Release Notes

All 27 Sales changes from the official Odoo 20 release notes, explained in plain words with a screenshot from a live Odoo 20 database, plus where to find each one and what it means for your upgrade.

Planning the move? See our Odoo upgrade services, the Odoo 20 upgrade guide or get a number from the migration cost calculator.

New feature 13Enhancement 14In Community 23Enterprise only 4
Type
Edition

Change 1 of 27

Payment-based commissions

EnhancementEnterprise only

Calculate sales commissions based on the amount paid.

Official Odoo 20 release note

In plain words

Commission plans can now count what the customer actually paid. A new achievement type, "Amount Paid in Full", adds invoice amounts to the salesperson's achievements once the invoice is paid, dated on the payment reconciliation.

Sales > Commissions > Commission Plans > New > Achievements RulesThe achievement line's Type set to Amount Paid in Full, at a 5% rate, on a new commission plan.

Where to find it

  1. Sales > Commissions > Commission Plans > open or create a plan > Achievements Rules > set Type to "Amount Paid in Full".

For users

Plans can reward cash collected instead of invoiced amounts.

For developers

Achievement report SQL joins account_full_reconcile and uses amount_paid_rate.

Upgrading from Odoo 19

Existing plans keep their achievement types; add the new type where needed.

Change 2 of 27

Charge overages

New featureCommunity

Charge overages for prepaid services directly within the invoicing wizard.

Official Odoo 20 release note

In plain words

When a service sold on ordered quantities is delivered beyond what was sold (for example extra support hours), the Create Invoice wizard now shows an "Invoice Overages" option. When ticked, the extra quantity is invoiced together with the regular invoice.

Sales > Orders > open order > Create Invoice10 hours were sold and 12 delivered. The invoicing wizard offers the new "Invoice Overages" checkbox.

Where to find it

  1. Sell a service with invoicing policy "Ordered quantities" and confirm.
  2. Set a delivered quantity higher than the ordered one.
  3. Click Create Invoice.

For users

Extra hours on prepaid services can be billed in the same invoice.

For developers

New fields: sale.order.has_overages / invoice_overages, sale.order.line.qty_overage, wizard invoice_overages.

Upgrading from Odoo 19

No data migration; qty_to_invoice now depends on order_id.invoice_overages.

Change 3 of 27

Dashboard

New featureCommunity

A Sales dashboard has been added at the top of the quotations and sales orders list views, providing a quick view of sales performance and quick-filter buttons.

Official Odoo 20 release note

In plain words

The quotations and orders lists now open with a small dashboard on top: counters for orders to confirm, to deliver and to invoice (click one to filter the list), plus sales orders and revenue for a chosen period compared with the previous one.

Sales > Orders > QuotationsThe new dashboard above the list: To Confirm / To Deliver / To Invoice buttons and period figures with their change.

Where to find it

  1. Sales > Orders > Quotations (or Orders).

For users

A quick view of what needs action, right above the list.

For developers

New js_class sale_dashboard_list / sale_dashboard_kanban on the new views sale_order_list_with_dashboard and sale_order_kanban_with_dashboard.

Upgrading from Odoo 19

Custom list views that replace the action views will not show the dashboard unless they use the new js_class.

Change 4 of 27

Description-only sales order lines

EnhancementCommunity

Sales order lines no longer require a linked product by default, and can instead be created using a description. The new "Mandatory Product" setting allows product selection to be enforced.

Official Odoo 20 release note

In plain words

A sales order line can now be just a description with a price, without choosing a product. If your company wants every line linked to a product, turn on the new "Mandatory Product" setting in Sales settings.

Sales > Orders > Quotations > open quotation"On-site assembly (half day)" is a line with only a description, quantity and price, no product.

Where to find it

  1. Open a quotation, click Add Line, type a description and a price without picking a product.
  2. Optional: Sales > Configuration > Settings > Mandatory Product.

For users

Quick one-off lines (for example a service note with a price) no longer need a product.

For developers

sale.order.line.product_id is only required when the config parameter sale.mandatory_product is set (computed field mandatory_product).

Upgrading from Odoo 19

Code that assumes every non-display line has a product_id should handle empty products.

Change 5 of 27

Editable product variant price

EnhancementCommunity

Edit the sales price of product variants directly.

Official Odoo 20 release note

In plain words

The Sales Price of a single variant can now be changed directly, for example in the Product Variants list. Before, a variant's price could only change through the template price and the attribute extra prices.

Sales > Products > Product VariantsThe Sales Price cell of the Aluminium variant is open for editing in the variants list.

Where to find it

  1. Sales > Products > Product Variants.
  2. Click the Sales Price of a variant and type a new price.

For users

Set a special price on one variant without touching the others.

For developers

product.product.lst_price is now a stored computed field (list_price + price_extra) with readonly=False; the inverse only updates the template when there is one variant.

Upgrading from Odoo 19

The lst_price column is added and filled on upgrade; custom code that wrote list_price through the variant onchange should write lst_price instead.

Change 6 of 27

Editable margins

EnhancementCommunity

Edit the margin directly on a sales order line to automatically recompute the sales price.

Official Odoo 20 release note

In plain words

The Margin value on a sales order line can now be typed in. Odoo then recalculates the unit price so that the line gives that margin.

Sales > Orders > Quotations > open quotationMargin set to 300 on the chair line: the unit price was recomputed to 217.50 and Margin (%) to 17.24%.

Where to find it

  1. Open a quotation.
  2. Show the Margin column (optional columns toggle).
  3. Edit the Margin of a line.

For users

Salespeople can price by target margin.

For developers

sale.order.line.margin gets an inverse that sets price_unit.

Upgrading from Odoo 19

No migration impact.

Change 7 of 27

Fixed prepayment amounts

EnhancementCommunity

Set a prepayment value to a fixed amount.

Official Odoo 20 release note

In plain words

The prepayment asked for online confirmation can now be set as a fixed amount on the quotation, next to the percentage.

Sales > Orders > Quotations > open quotation > Other InfoThe Prepayment line shows the percentage and, next to it, the editable amount.

Where to find it

  1. Open a quotation > Other Info tab > Prepayment.

For users

Ask for exactly, say, 500 upfront instead of a percentage.

For developers

New field sale.order.prepayment_amount (monetary, linked to prepayment_percent); require_payment was removed.

Upgrading from Odoo 19

Custom code reading require_payment must switch to prepayment_percent / prepayment_amount.

Change 8 of 27

Fixed Price pricelists

EnhancementCommunity

Not verified from the Odoo 20 source code. Shown as Odoo published it.

Extra prices from attribute values are now applied on top of "Fixed Price" pricelist rules.

Official Odoo 20 release note

In plain words

Not verified from the supplied source code. The fixed-price rule code in product.pricelist.item returns the fixed price as is, and a live test in this database (fixed-price rule on a template whose Aluminium value has an extra price) gave the same price for both variants.

Where to find it

  1. Create a pricelist with a Fixed Price rule on a product with attribute extra prices.
  2. Add two variants to a quotation using that pricelist and compare prices.

For users

No visible change found.

For developers

_compute_price() still returns fixed_price for compute_price == 'fixed'.

Upgrading from Odoo 19

None identified.

  • Text-only: the behaviour could not be found in the source, so there is nothing to show.

Change 9 of 27

Lazada

New featureEnterprise only

A marketplace integration with Lazada has been implemented to fetch orders and delivery slips, and to synchronize inventory (available from 19.0).

Official Odoo 20 release note

In plain words

A new Lazada connector (sale_lazada) imports Lazada marketplace orders, fetches delivery slips and keeps stock in sync.

Sales > Marketplaces > Lazada > Shops > Connect New ShopThe Create Lazada Shop dialog, asking for the Lazada API Credentials (App Key and App Secret).

Where to find it

  1. Sales > Marketplaces > Lazada > Shops > Connect New Shop.

For users

Lazada sellers can manage orders in Odoo.

For developers

New module depending on sale_management and stock_delivery.

Upgrading from Odoo 19

None for existing databases.

  • A real Lazada seller account is still needed to actually sync orders; the screenshot shows the connection wizard itself, not live Lazada data.

Change 10 of 27

Loyalty point expiration

New featureCommunity

Set an expiration date for loyalty points.

Official Odoo 20 release note

In plain words

Loyalty programs have a new "Points Validity" setting (in days). Points earned then expire after that period.

Sales > Products > Discount & Loyalty > Loyalty programPoints Validity set to 365 days on a loyalty card program.

Where to find it

  1. Sales > Products > Discount & Loyalty > open a Loyalty Cards program.
  2. Set Points Validity.

For users

Encourage customers to use their points in time.

For developers

New field loyalty.program.expire_after with a CHECK constraint (not negative).

Upgrading from Odoo 19

Existing programs keep 0 (no expiry).

Change 11 of 27

Manager commissions

EnhancementEnterprise only

Roll up achievements and targets of individual contributors into other salespeople's commissions (e.g., managers' commissions and split commissions).

Official Odoo 20 release note

In plain words

On a commission plan, each salesperson line has a "Sum of achievements" field. The sales and invoices of the people listed there are added to that salesperson's achievements, which covers managers and split commissions.

Sales > Commissions > Commission Plans > plan > SalespeopleThe Sum of achievements column on a salesperson's row, listing the other salespeople whose results roll up into it.

Where to find it

  1. Sales > Commissions > Commission Plans > plan > Salespeople > Sum of achievements.

For users

Managers can be paid on their team's results.

For developers

sale.commission.plan.user.user_ids (Many2many to res.users, relation com_plan_user_rel).

Upgrading from Odoo 19

No migration impact; existing plans simply leave the new column empty until used.

Change 12 of 27

Mark orders as fully invoiced

New featureCommunity

Mark an order as fully invoiced to prevent any further actions on it.

Official Odoo 20 release note

In plain words

A confirmed order can be marked as fully invoiced with the new "Close Invoicing" action. The order then counts as invoiced and nothing more is proposed for invoicing. A manager can undo it with "Reopen Invoicing".

Sales > Orders > open order > ActionsThe new "Close Invoicing" entry in the order's Actions menu.

Where to find it

  1. Open a confirmed order.
  2. Actions menu (gear) > Close Invoicing.

For users

Clean up orders that will never be invoiced further.

For developers

New field sale.order.invoicing_closed, methods action_close_invoicing() and action_reopen_order(), server action model_sale_order_action_close_invoicing.

Upgrading from Odoo 19

Reports on invoice_status now treat closed orders as invoiced.

Change 13 of 27

Periodic pricing

New featureCommunity

Define pricelist rules (including surcharges) for specific periods or days of the week.

Official Odoo 20 release note

In plain words

A new "Daily Rates" button on a pricelist opens a calendar of its dated rules. You can see which discounts or surcharges apply on which days, and select days in the calendar to create rules for them.

Sales > Products > Pricelists > pricelist > Daily RatesThe Daily Rates calendar shows the pricelist's dated rules (weekend surcharges and a weekday discount) day by day.

Where to find it

  1. Sales > Products > Pricelists > open a pricelist.
  2. Click the Daily Rates button.

For users

Plan weekend surcharges or promo days visually.

For developers

New calendar view product_pricelist_item_calendar (js_class daily_rates_calendar, multi_create_view) and action_open_daily_rates(); rule types are now Discount, Surcharge and Fixed Price.

Upgrading from Odoo 19

The old percentage rule type was dropped (commit a24fc1d448f2), so custom code using compute_price = 'percentage' must be adapted.

  • Days of the week are handled by selecting those days in the calendar; there is no separate weekday field on the rule.

Change 14 of 27

Price rules per packaging type

New featureCommunity

Define specific price rules per packaging type.

Official Odoo 20 release note

In plain words

A pricelist rule can now be limited to a packaging (unit of measure), for example a special price when a product is sold by the pack of 6.

Sales > Products > Pricelists > pricelist > ruleThe rule applies from a minimum quantity in the "Pack of 6" packaging.

Where to find it

  1. Enable Units of Measure & Packagings.
  2. Open a pricelist and a rule on a product that has packagings.
  3. Pick the Packaging next to the minimum quantity.

For users

Different prices per pack size.

For developers

New field product.pricelist.item.uom_id (string "Packaging") and allowed_uom_ids; rule matching filters on the requested UoM.

Upgrading from Odoo 19

Existing rules have no packaging and apply to all units.

Change 15 of 27

Pricelist report improvements

EnhancementCommunity

Pricelist reports are grouped by product category and additional fields, such as "Product Reference" and "Barcode" are included. It is also possible to filter pricelist reports by a specific date.

Official Odoo 20 release note

In plain words

The pricelist report now groups products by product category, shows the internal reference (and the barcode in exports), and has a Date field to see the prices valid on a given day.

Sales > Products > Pricelists > pricelist > PrintThe report with the new Date field, products grouped under their category and the Internal Reference column.

Where to find it

  1. Sales > Products > Pricelists > open a pricelist > Print.
  2. Add products, choose a Date.

For users

Clearer printed price lists, and price lists for a future date.

For developers

Report data gains category, default_code, barcode; the client action passes a date.

Upgrading from Odoo 19

Customised report templates may need the new columns.

Change 16 of 27

Product images

New featureCommunity

Display product images on sales orders and related PDFs.

Official Odoo 20 release note

In plain words

A new "Display Product Images" setting shows the product picture next to each line on the quotation PDF and on the customer portal.

Customer portal > Sales Orders > quotationWith the setting on, product lines in the online quotation show the product image.

Where to find it

  1. Sales > Configuration > Settings > Display Product Images.
  2. Open a quotation > Preview.

For users

Customers see what they buy.

For developers

New company field display_product_images_on_so used in report and portal templates.

Upgrading from Odoo 19

Customised quotation reports may need the new image cell.

Change 17 of 27

Quotation sections

EnhancementCommunity

Part 1

Update the quantity and unit of a section to quickly update all related products.

Official Odoo 20 release note

In plain words

A section line now has its own quantity and unit. Changing the section quantity scales the quantities of all products in that section.

Sales > Orders > Quotations > open quotationHovering the section shows its own quantity and unit (1.00 Units).

Part 2

Add multi-line section descriptions.

Official Odoo 20 release note

In plain words

Section titles can now span several lines, so a section can carry a short description.

Sales > Orders > Quotations > open quotationThe section title runs over several lines with a description.

Part 3

Save sections as templates so they can be reused in future quotations.

Official Odoo 20 release note

In plain words

A section and its lines can be saved as a template from the section's menu, then added to other quotations from the Add Section button.

Sales > Orders > Quotations > open quotation > section menu"Save as Template" in the section's menu stores the section and its lines for reuse.

Where to find it

  1. Open a quotation with sections.
  2. Hover a section to see its quantity and unit.
  3. Use the section's kebab menu > Save as Template.

For users

Faster editing of kits and room packages, reusable blocks of lines.

For developers

New stored fields sale.order.line.section_qty / section_uom_id with a CHECK constraint (only on sections); sale.order.template methods get_section_templates(), prepare_section_template_order_lines().

Upgrading from Odoo 19

New columns are filled with 1 / empty on existing sections.

Change 18 of 27

Quotation templates

EnhancementCommunity + Enterprise

Part 1

Select a quotation template directly when creating a sales order.

Official Odoo 20 release note

In plain words

The New button of the quotations list now lists your quotation templates, so a quotation can start from a template in one click.

Sales > Orders > Quotations > NewThe New button opens a list: a blank quotation or one of the quotation templates.

Part 2

Subsections and options, such as "Hide Price" and "Hide Composition", are now available.

Official Odoo 20 release note

In plain words

Quotation templates support subsections and the section options Hide Prices and Hide Composition.

Sales > Configuration > Quotation Templates > template > section menuA section of a quotation template offers Add a subsection, Hide Prices and Hide Composition.

Part 3

Browse and add products using the product catalog.

Official Odoo 20 release note

In plain words

Products can be added to a quotation template with the product catalog.

Sales > Configuration > Quotation Templates > templateThe Catalog button under the template lines opens the product catalog.

Part 4

Save any quotation or sales order as a quotation template using the "Save as template" action.

Official Odoo 20 release note

In plain words

Any quotation or sales order can be turned into a new quotation template with "Save as template" in its Actions menu.

Sales > Orders > Quotations > open quotation > Actions"Save as template" in the Actions menu of a quotation.

Where to find it

  1. Sales > Orders > Quotations > New (arrow).
  2. Sales > Configuration > Quotation Templates > open a template > section menu.
  3. Same template > Catalog.
  4. Open a quotation > Actions > Save as template.

For users

Templates are quicker to use and to build.

For developers

New OWL component SaleTemplateDropdown on the New button; template lines get collapse_prices / collapse_composition; sale.order gains a save-as-template action.

Upgrading from Odoo 19

No data migration; custom quotation-template views may need the new section options.

Change 19 of 27

Sales order creation from purchase orders

EnhancementCommunity

When creating sales orders from purchase orders, the import now uses data from previously corrected orders.

Official Odoo 20 release note

In plain words

When a sales order is created from a customer's purchase order file, Odoo now remembers corrections: if a user changes the product matched to a customer's product code, the next import from that customer uses the corrected product.

Where to find it

  1. Upload a customer's purchase order (UBL) on the Quotations list.
  2. Fix a wrongly matched product and save.
  3. Import another order from the same customer.

For users

Fewer manual fixes on repeat imports.

For developers

New model customer.product.reference (partner, product, customer_product_reference).

Upgrading from Odoo 19

New table; nothing to migrate.

  • Text-only: the learning happens in the background (no screen of its own) and needs real purchase order files.

Change 20 of 27

Sales order email template

EnhancementCommunity

When sending a sales order via email, the customer reference is now included in the subject and body of the default email template.

Official Odoo 20 release note

In plain words

The default "send quotation" email now puts the customer reference in the subject and in the text, and the reference also appears next to the order number in the breadcrumb.

Sales > Orders > Quotations > open quotation > SendThe subject reads "Quotation S00116 (PO-4471)": PO-4471 is the customer reference, also repeated in the body.

Where to find it

  1. Open a quotation with a Customer Reference.
  2. Click Send.

For users

Customers find their own reference in the email.

For developers

Template email_template_edi_sale subject and body use client_order_ref.

Upgrading from Odoo 19

Custom copies of the template keep their old text.

Change 21 of 27

Sales order line numbering

New featureCommunity

Number sales order lines on the sales order form, the PDF file, and the customer portal.

Official Odoo 20 release note

In plain words

A new setting numbers the order lines. The numbers show on the sales order form, on the PDF and on the customer portal.

Sales > Orders > Quotations > open quotationWith the setting on, each order line gets a number in the first column.

Where to find it

  1. Sales > Configuration > Settings > enable line numbers.
  2. Open a quotation.

For users

Easier to refer to "line 3" with a customer.

For developers

New company field show_sol_numbers and view widget line_number (CSS counter).

Upgrading from Odoo 19

No migration impact.

Change 22 of 27

Sales order portal page

EnhancementCommunity + Enterprise

The sale order portal page has been redesigned for better content organization and clearer positioning.

Official Odoo 20 release note

In plain words

The customer portal page of a quotation or order was redesigned: a left column with the total, the main actions (sign and pay, download) and the salesperson, and a header card with the order number, dates and customer reference above the lines.

Customer portal > Sales Orders > quotationThe new left column: total, Sign & Pay and Download buttons, and the contact person.

Where to find it

  1. Open a quotation > Preview (or the customer portal > Sales Orders).

For users

A cleaner page for customers.

For developers

Portal templates were restructured (sidebar_content, intro_row).

Upgrading from Odoo 19

Website or portal customisations that xpath into the old sale portal template must be checked.

Change 23 of 27

Services & Material

New featureCommunity

Use fixed-price and cost-based services and materials for re-invoicing.

Official Odoo 20 release note

In plain words

A new "Services & Materials" option in Sales settings turns on a list of re-invoiceable costs (expenses, vendor bill lines, timesheets) per order, where you can re-invoice them at a fixed price or at cost.

Sales > Configuration > SettingsThe new Services & Materials setting in the Invoicing block.

Where to find it

  1. Sales > Configuration > Settings > Services & Materials.
  2. Sales > Orders > Services & Materials.

For users

One place to review and bill costs linked to orders.

For developers

New group sale.group_services_and_material and action action_service_material on account.analytic.line.

Upgrading from Odoo 19

No migration impact.

Change 24 of 27

Ship orders without Inventory

New featureCommunity

Send shipping confirmation emails and manage order fulfillment of sales orders without the Inventory app.

Official Odoo 20 release note

In plain words

Without the Inventory app, a confirmed order now gets a ship button: it records the delivery, can send the shipping confirmation email and tracks the delivery status of the order.

Sales > Orders > (confirmed order) > ShipClicking Ship opens a wizard to confirm the shipment, pick a delivery method and enter a tracking reference, with no Inventory app installed.

Where to find it

  1. In a database without Inventory, confirm an order that has a delivery line.
  2. Click the Ship button in the order header.

For users

Small shops can ship without setting up warehouses.

For developers

sale.order.show_ship_button (computed in delivery), delivery_status, is_unfulfilled.

Upgrading from Odoo 19

When Inventory is installed, stock_delivery forces show_ship_button = False.

Change 25 of 27

Single-use discount codes

New featureCommunity

Allow discount codes to be used only once per customer.

Official Odoo 20 release note

In plain words

Discount code programs have a new "Once per user" option: each customer can then use the code only once.

Sales > Products > Discount & Loyalty > Discount code programThe new "Once per user" option on a discount code program.

Where to find it

  1. Sales > Products > Discount & Loyalty > open a Discount Code program.
  2. Tick Once per user.

For users

Welcome codes cannot be reused by the same customer.

For developers

New fields loyalty.program.once_per_user and partner_ids ("Used by"); sale_loyalty checks them when applying a code.

Upgrading from Odoo 19

None; the option is off on existing programs.

  • The commit that added once_per_user could not be isolated from the subject-only logs; 9ab4b5c5d620 is the loyalty commit that touched the same files in that period.

Change 26 of 27

Stacked fields on sales order lines

EnhancementCommunity

"Margin," "Margin (%)," "Delivered (%)," "Tax Excl.," and "Tax Incl." are now stacked vertically in sales order lines rather than displayed in columns.

Official Odoo 20 release note

In plain words

Optional line values such as Margin, Margin (%), Delivered (%), Tax Excl. and Tax Incl. are now shown under the main value in the same cell, with short labels (M:, M%:, TE:, TI:), instead of taking extra columns.

Sales > Orders > Quotations > open quotationMargin and Margin (%) are stacked under the unit price; Tax Excl. and Tax Incl. under the amount.

Where to find it

  1. Open a quotation.
  2. Enable Margin, Margin (%), Tax Excl. and Tax Incl. in the optional columns.

For users

A narrower, easier to read order line table.

For developers

Fields are grouped with the new <column> element and labeled_* widgets.

Upgrading from Odoo 19

View extensions that xpath on these fields as separate columns may need to target the <column> nodes.

Change 27 of 27

TikTok

New featureEnterprise only

A marketplace integration with Tiktok has been implemented to fetch orders and delivery slips, and to synchronize inventory (available from 19.0).

Official Odoo 20 release note

In plain words

A new TikTok Shop connector (sale_tiktok) imports TikTok orders, fetches delivery slips and syncs stock. Its setup sits under a Marketplaces menu.

Sales > Marketplaces > TikTok Shop > Shops > Connect New ShopThe Create TikTok Shop dialog, asking for the App key, App secret and Service ID, with instructions on where to find them.

Where to find it

  1. Sales > Marketplaces > TikTok Shop > Shops > Connect New Shop.

For users

TikTok sellers can manage orders in Odoo.

For developers

New module depending on sale_management and stock_delivery.

Upgrading from Odoo 19

None for existing databases.

  • A real TikTok Shop Partner Center app is still needed to actually sync orders; the screenshot shows the connection wizard itself, not live TikTok data.

See all 585 Odoo 20 changes across 52 apps

Odoo 20 Sales: common questions

What is new in Odoo 20 Sales?

The official Odoo 20 release notes list 27 Sales changes (13 new features, 14 enhancements). They include Payment-based commissions, Charge overages, Dashboard, Description-only sales order lines and more.

Are the Odoo 20 Sales changes available in Community edition?

23 of the 27 changes are in Odoo 20 Community (and Enterprise). 4 are Enterprise only. Each change on this page is labeled with its edition.

Do Odoo 20 Sales changes affect my customizations when upgrading from Odoo 19?

18 of the 27 changes have something to check when upgrading from Odoo 19, for example Payment-based commissions, Dashboard, Description-only sales order lines. Each change on this page has an "Upgrading from Odoo 19" note. Test custom modules on a copy of your database before moving production.

How do I upgrade Sales to Odoo 20?

Restore a copy of your database, run the Odoo 20 upgrade on the copy, fix any custom modules that extend Sales, then test your main Sales flows with real users before switching production. iVentureTeam runs Odoo upgrades end to end, including custom module migration and user testing.

Odoo services for this

More Odoo 20 release notes

Planning your Odoo 20 move

Want these Sales changes in your database?

We upgrade Odoo databases with their customizations and data intact, and test every custom module against the new version before go-live.